赞
踩
理解handler方法的作用和组成:
@RequestMapping
/@GetMapping
等,声明路径,在HandlerMapping
中注册,供DS查找!@RequestMapping
public Object handler(简化请求参数接收){
调用业务方法
返回的结果 (页面跳转,返回数据(json))
return 简化响应前端数据;
}
总结:
JSP(JavaServer Pages)是一种动态网页开发技术,可以在 HTML 文件中嵌入 Java 代码。
JSP 首次运行时会被转换为 Servlet,然后编译为字节码,从而可以启用 Just-in-Time(JIT)编译器,实现更高效的运行。
<!-- jsp需要依赖! jstl-->
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>3.0.0</version>
</dependency>
建议位置:/WEB-INF/下,避免外部直接访问!
位置:/WEB-INF/views/home.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--
request.setAttribute("data","hello jsp!")
vue {{key}}
--%>
<h1>
${data}
</h1>
</body>
</html>
@EnableWebMvc // HandlerAdapter配置JSON转换器
@Configuration
@ComponentScan("com.wake.jsp")
public class MvcConfig implements WebMvcConfigurer {
//配置jsp对应的视图解析器
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
//快速配置jsp模板语言对应的
// '/WEB-INF/views/'这个会与controller层 类的 return 地址进行拼接 注意 ‘/’ 下划线有没有加
registry.jsp("/WEB-INF/views/",".jsp");
}
}
@Controller
@RequestMapping("jsp")
public class JspController {
// 直接返回给浏览器 不加注解@ResponseBody 不找视图 不走视图解析器
@GetMapping("index")
public String show(HttpServletRequest request){
request.setAttribute("data","Hello JSP ! long time no see !");
System.out.println("index JSP");
// 返回的是jsp文件名地址(jsp文件名 会跟字符串拼接 -> 查找前端页面(MvcConfig)
return "home";
}
}
原生开发 路径细节
使用springmvc路径语法
forward
: 路径 | redirect
路径 转发和重定向 资源地址都不需要写 项目的根路径。/jsp/index
/springmvc/jsp/index
-> 加了就重复了 变成 /springmvc/springmvc/jsp/index
这是错的注意:
/
下划线 加没加的问题
@Controller @RequestMapping("jsp") public class JspController { // 直接返回给浏览器 不加注解@ResponseBody // 该方法地址:/jsp/index @GetMapping("index") public String show(HttpServletRequest request){ request.setAttribute("data","Hello JSP ! long time no see !"); System.out.println("index JSP"); // 返回的是jsp文件名地址(jsp文件名 会跟字符串拼接 -> 查找前端页面(MvcConfig) return "home"; } /** * 转发:只能是项目下的资源 * 1. 不能添加@ResponseBody注解 * 2. 方法返回值是字符串 * 3. 返回的字符串前面 forward:/转发地址 * @return 转发到其他handler方法 */ @GetMapping("forward") public String forward(){ System.out.println("JspController.forward! 转发!"); return "forward:/jsp/index"; } /** * 重定向 : redirect:/重定向地址 * @return */ @GetMapping("redirect") public String redirect(){ System.out.println("JspController.forward! 重定向!"); return "redirect:/jsp/index"; } /** * 重定向到项目外地址 * @return 重定向到show方法的地址 */ @GetMapping("redirect/csdn") public String redirect2(){ System.out.println("重定向!CSDN!"); return "redirect:https://blog.csdn.net/GavinGroves"; } }
json依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.0</version>
</dependency>
MVC配置类中添加json数据转化器
@EnableWebMvc
@ResponseBody 返回JSON的注解,可以添加到类和方法上
@Controller @RequestMapping("json") @ResponseBody public class JsonController { @RequestMapping("user") public User userShow() { User user = new User(); user.setName("道格"); user.setAge(26); // user -> handlerAdapter -> json -> @ResponseBody -> json直接返回【前后端分离模式】 return user; } @RequestMapping("userList") public List<User> userListShow() { User user = new User(); user.setName("道格"); user.setAge(26); User user1 = new User(); user1.setName("维克"); user1.setAge(25); List<User> userList = new ArrayList<>(); userList.add(user); userList.add(user1); return userList; } }
@ResponseBody 数据直接放入响应体返回,也不会走视图解析器。
快速查找视图、转发和重定向都不生效。
@RestController == @Controller + @ResponseBody
资源本身已经是可以直接拿到浏览器上使用的程度了,不需要在服务器端做任何运算、处理。
典型的静态资源包括:
MvcConfig 配置类 开启静态资源查找
/**
* 开启静态资源查找
* @param configurer
* dispatcherServlet -> handlerMapper 找有没有对应的handler -> 如果没有 就找有没有静态资源
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
存放静态资源:
确保编译:
结果:直接访问静态资源 -》 显示图片
原理:
底层是通过转发:
找不到对应的handler方法 就会转发 查找当前项目下的真实资源
- 在方法上使用
@ResponseBody
注解,用于将方法返回的对象序列化为 JSON 或 XML 格式的数据,并发送给客户端。- 在前后端分离的项目中使用!
@ResponseBody
注解可以用来标识方法或者方法返回值,表示方法的返回值是要直接返回给客户端的数据,
而不是由视图解析器来解析并渲染生成响应体(viewResolver没用)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。