SpringMVC学习,在完成环境配置,程序入门,请求参数的绑定之后,学习了服务器对客户端的响应。
1. 响应返回类型为String类型
- 使用Model model对象完成对数据的存储,在客户端可使用${user}对该数据进行获取
@RequestMapping(path = "/test01")
public String test01(Model model){
System.out.println("test01");
user user = new user();
user.setId(1);
user.setUsername("xiaojingya");
user.setPassword("dashabi");
model.addAttribute("user",user);
return "success";
}
1.1注意
- 在返回到success.jsp时,返回数据读取会出错,需在success.jsp进行如下设置
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html></html>
2.响应之返回类型为空
- 在客户端传输数据进行服务器后台操作时,会自动传输servlet原生API,当返回值为空时,可利用该API的request和response进行转发与重定向操作(注意两者不同,有时间补充或者response直接返回)。
@RequestMapping(path = "/test02")
public void test02(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("test02");
//转发
//request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
//重定向
//response.sendRedirect(request.getContextPath()+"/index.jsp");
//直接返回
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print("你好");
}
3.响应之返回类型为ModelAndView
- 类似于返回值为String类型的内部操作
@RequestMapping(path = "/test03")
public ModelAndView test03(){
System.out.println("test03");
ModelAndView mv = new ModelAndView();
user user2 = new user();
user2.setId(1);
user2.setUsername("xiaojingya");
user2.setPassword("dashabi");
//model.addAttribute("user",user);
mv.addObject("user2",user2);
mv.setViewName("success");
return mv;
}
4.响应之返回类型为String之关键字返回
- 使用return forword与redirect等关键字进行直接返回,注此处重定向不需要加具体的路径(即可省略request.getContextPath())
@RequestMapping(path = "/test04")
public String test04(){
System.out.println("test04");
//return "forward:/WEB-INF/pages/success.jsp";
return "redirect:/index.jsp";
}
5.响应之返回类型为Json
- 异步操作在前端使用时极其频繁,处于独特的地位,所以在前端使用Ajax传输数据时,SpringMVC框架提供了对应的解析处理框架,方便我们进行处理。
5.1服务器解析Json
- 服务器对json的解析,需要导入如下pom坐标
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
- 需在前端jsp文件中导入js文件
<script src="js/jquery-3.3.1.js"></script>
- 需在SpringMVC.xml文件中完成如下配置,即放松核心控制器对js包下文件的拦截,当有图片等静态资源时,也需进行如下操作。
<mvc:resources location="/js/" mapping="/js/**"/>
- 当完成上述环境配置时,可进行后端代码编写
@RequestMapping(path = "/test05")
//public @ResponseBody user test05(@RequestBody String body){
public @ResponseBody user test05(@RequestBody user user){
//这里的user需要导入pom的坐标
System.out.println("test05");
//System.out.println(body);
//user user = new user();
user.setId(1);
user.setUsername("dashabi");
user.setPassword("xiaokeai");
return user;
}
5.2注意事项
- @RequestBody使用时只能对post方法适用,注意使用 . p o s t ( ) 或 者 注 明 .post()或者注明 .post()或者注明.ajx()中的方法为post
- 在进行上述第二步时,js工具包应与WEB-INF同级,注意不要写入WEB-INF中
- 在进行json–user对象的封装时才需要上述第一步jar包的导入,且前端进行传输时,应该传输user的所有变量,否则会出现封装失败的情况