SpringMVC day02 客户端与服务器之间交互及问题解决

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

  1. 服务器对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>
  1. 需在前端jsp文件中导入js文件
<script src="js/jquery-3.3.1.js"></script>
  1. 需在SpringMVC.xml文件中完成如下配置,即放松核心控制器对js包下文件的拦截,当有图片等静态资源时,也需进行如下操作。
<mvc:resources location="/js/" mapping="/js/**"/> 
  1. 当完成上述环境配置时,可进行后端代码编写
@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注意事项

  1. @RequestBody使用时只能对post方法适用,注意使用 . p o s t ( ) 或 者 注 明 .post()或者注明 .post().ajx()中的方法为post
  2. 在进行上述第二步时,js工具包应与WEB-INF同级,注意不要写入WEB-INF中
  3. 在进行json–user对象的封装时才需要上述第一步jar包的导入,且前端进行传输时,应该传输user的所有变量,否则会出现封装失败的情况

你可能感兴趣的:(Java,java,ajax,http,jquery)