SpringMVC请求与响应处理要点有哪些?

2026-05-27 12:251阅读0评论SEO资源
  • 内容介绍
  • 相关推荐

本文共计1794个文字,预计阅读时间需要8分钟。

SpringMVC请求与响应处理要点有哪些?

一、处理器方法响应+ Controller方法返回- Controller数据共享+ 返回类型:void/ModelAndView/String

1.Controller方法返回void

// 返回void类型,适用于不需要返回数据的操作public void someMethod() { // 处理逻辑}

2. Controller方法返回void类型(返回类型说明)// 返回void类型,适用于不需要返回数据的操作,可视为Servlet使用public void someMethod() { // 处理逻辑}


一、处理器方法响应处理

Controller方法该怎么返回、Controller数据该怎么进行共享

  • 返回void/ModelAndView/String

1、Controller方法返回void

//返回void类型,此时可以把Controller方法当做Servlet使用 @RequestMapping("/test1") public void test(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //请求转发 request.getRequestDispatcher("/WEB-INF/views/welcome.jsp").forward(request, response); //设置共享数据 request.setAttribute("msg", "hello"); //输出json格式 response.setContentType("text/json;charset=utf-8"); response.getWriter().println(); } 2、返回ModelAndView

//返回ModelAndView @RequestMapping("/test3") public ModelAndView test3() { ModelAndView mv = new ModelAndView(); //设置视图名称 // mv.setViewName("/WEB-INF/views/welcome.jsp"); mv.setViewName("welcome"); mv.addObject("msg", "返回ModelNAndView");//设置共享数据的key和value mv.addObject("叩丁狼教育");//设置共享数据的value,此时会把value类型的首字母作为key:string return mv; } 3、返回String类型(是逻辑视图名称),参数是Model类型(是共享数据)

//返回string,逻辑视图名称,此时需要结合参数Model类型 一起使用 @RequestMapping("/test4") public String test4(Model model) { //设置共享数据 model.addAttribute("叩丁狼"); model.addAttribute("msg", "教育"); return "welcome";//设置跳转的视图 }




二、请求跳转
  • 请求转发、URL重定向、URL重定向共享数据

1、请求转发

//请求转发,浏览器地址栏不变,可以共享请求中的数据 //原理:request.getRequestDispatcher("").forward(request, response); @RequestMapping("/test5") public String test5(Model model) { return "forward:/hello.jsp";//设置跳转的视图 } 2、URL重定向

//重定向,浏览器地址栏改变,不能共享请求中的数据 //原理:request.sendRedirect(""); @RequestMapping("/test6") public String test6(Model model) { return "redirect:/hello.jsp";//设置跳转的视图 }
■ 请求资源的路径问题:[总结:访问资源的时候,都使用/开头]

  • 访问资源的时候前面带上/,表示绝对路径,根路径开始去寻找资源
  • 访问资源的时候签名不加/,表示相对路径,上一级上下文路径中去寻找资源

✿ 请求转发和URL重定向的选择: 请求转发/URL重定向 请求转发 URL重定向 地址栏改变? 不会 会改变 共享数据? 可以 不可以? 表单重复提交? 会发生 不会发生
  • 传统的方式,在url重定向的时候,因为是两次不同的请求,所以不能共享请求中的数据。 在开发中,有时候真的需要重定向跳转后共享数据------------spring3.1开始,提供了Flash属性。 ★ 只能是从Controller 重定向到 Controller,不能到jsp



3、URL重定向共享数据

//重定向:从a跳转到b @RequestMapping("/a") public String a(RedirectAttributes ra) { ra.addAttribute("msg1", "a传递的数据"); ra.addFlashAttribute("msg2", "msg2"); return "redirect:/response/b";//设置跳转的视图 } @RequestMapping("/b") public ModelAndView b(String msg1, @ModelAttribute("msg2") String msg2) { System.out.println("msg1:" + msg1); System.out.println("msg2:" + msg2); return null; }

  • 重定向共享数据的原理:更大的作用域--session




三、处理器方法参数处理(接收请求参数的处理
  • 处理器方法的请求参数该怎么携带、请求参数该怎么获取

1、request 和 response 参数 ■ 情况一:为了操作Servlet API 对象,此时可以直接以参数形式传递,也可以直接使用DI注入。

@Controller @RequestMapping("/request") public class HandlerRequestController { @Autowired private ServletContext context; @RequestMapping("/test1") public void test(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws ServletException, IOException { System.out.println("request:" + request); System.out.println("response:" + response); System.out.println("session:" + session); System.out.println("ServletContext:" + this.context); } }

  • request、response、session:建议使用参数
  • context 上下文:单例,建议使用属性,注入

因为Controller(Servlet) 是单例的,线程不安全,一般不用成员变量,除非要共享的数据,才作为成员变量。



SpringMVC请求与响应处理要点有哪些?

2、简单类型参数
  • 处理简单类型的请求参数

■ 获取请求参数:

//获取请求参数:通过保证请求参数名称和Controller方法定义的形参(入参)同名即可 @RequestMapping("/test2") public void test2(String username, int age) { System.out.println(username); System.out.println(age); }


■ 获取请求参数:----注解@RequestParam

//获取请求参数:若请求参数和请求参数名称和形参不同----注解@RequestParam @RequestMapping("/test3") public void test3(@RequestParam("name") String username, @RequestParam(value="age",required=false) Integer age) { System.out.println("username:" +username); System.out.println("age:" + age); }
3、中文乱码处理 ■ 在"全局配置",添加上编码过滤器:

<!-- (针对post请求)配置过滤器 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!-- 配置初始化参数 --> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
4、restfull风格传参

  • restfull 风格:软件架构风格,严格讲是一种编码风格,充分利用java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

    (3) 使用jstl:

    <% pageContext.setAttribute("myDate", new java.util.Date()); %> 北京时间: <fmt:formatDate value="${myDate}" pattern="yyyy=MM-dd HH:mm:ss"/>



    3、后台往前台响应JSON时---Date类型

    (1)方法1:在springmvc框架配置中添加json类型转化相关的配置[配置全局解析器]:

    <!-- MVC注解解析器 --> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /> </bean> </property> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
    (2)方式2:使用注解@JsonFormat

    @Data public class User { private Long id; private String username; private Integer age; //@DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date hireDate; }

    ★ 注意:@DateTimeFormat前台往后台传参

    ★ 注意: 是后台响应给前台,响应为json格式(对时间Date类型的处理)



    如果本文对你有帮助的话记得给一乐点个赞哦,感谢!

本文共计1794个文字,预计阅读时间需要8分钟。

SpringMVC请求与响应处理要点有哪些?

一、处理器方法响应+ Controller方法返回- Controller数据共享+ 返回类型:void/ModelAndView/String

1.Controller方法返回void

// 返回void类型,适用于不需要返回数据的操作public void someMethod() { // 处理逻辑}

2. Controller方法返回void类型(返回类型说明)// 返回void类型,适用于不需要返回数据的操作,可视为Servlet使用public void someMethod() { // 处理逻辑}


一、处理器方法响应处理

Controller方法该怎么返回、Controller数据该怎么进行共享

  • 返回void/ModelAndView/String

1、Controller方法返回void

//返回void类型,此时可以把Controller方法当做Servlet使用 @RequestMapping("/test1") public void test(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //请求转发 request.getRequestDispatcher("/WEB-INF/views/welcome.jsp").forward(request, response); //设置共享数据 request.setAttribute("msg", "hello"); //输出json格式 response.setContentType("text/json;charset=utf-8"); response.getWriter().println(); } 2、返回ModelAndView

//返回ModelAndView @RequestMapping("/test3") public ModelAndView test3() { ModelAndView mv = new ModelAndView(); //设置视图名称 // mv.setViewName("/WEB-INF/views/welcome.jsp"); mv.setViewName("welcome"); mv.addObject("msg", "返回ModelNAndView");//设置共享数据的key和value mv.addObject("叩丁狼教育");//设置共享数据的value,此时会把value类型的首字母作为key:string return mv; } 3、返回String类型(是逻辑视图名称),参数是Model类型(是共享数据)

//返回string,逻辑视图名称,此时需要结合参数Model类型 一起使用 @RequestMapping("/test4") public String test4(Model model) { //设置共享数据 model.addAttribute("叩丁狼"); model.addAttribute("msg", "教育"); return "welcome";//设置跳转的视图 }




二、请求跳转
  • 请求转发、URL重定向、URL重定向共享数据

1、请求转发

//请求转发,浏览器地址栏不变,可以共享请求中的数据 //原理:request.getRequestDispatcher("").forward(request, response); @RequestMapping("/test5") public String test5(Model model) { return "forward:/hello.jsp";//设置跳转的视图 } 2、URL重定向

//重定向,浏览器地址栏改变,不能共享请求中的数据 //原理:request.sendRedirect(""); @RequestMapping("/test6") public String test6(Model model) { return "redirect:/hello.jsp";//设置跳转的视图 }
■ 请求资源的路径问题:[总结:访问资源的时候,都使用/开头]

  • 访问资源的时候前面带上/,表示绝对路径,根路径开始去寻找资源
  • 访问资源的时候签名不加/,表示相对路径,上一级上下文路径中去寻找资源

✿ 请求转发和URL重定向的选择: 请求转发/URL重定向 请求转发 URL重定向 地址栏改变? 不会 会改变 共享数据? 可以 不可以? 表单重复提交? 会发生 不会发生
  • 传统的方式,在url重定向的时候,因为是两次不同的请求,所以不能共享请求中的数据。 在开发中,有时候真的需要重定向跳转后共享数据------------spring3.1开始,提供了Flash属性。 ★ 只能是从Controller 重定向到 Controller,不能到jsp



3、URL重定向共享数据

//重定向:从a跳转到b @RequestMapping("/a") public String a(RedirectAttributes ra) { ra.addAttribute("msg1", "a传递的数据"); ra.addFlashAttribute("msg2", "msg2"); return "redirect:/response/b";//设置跳转的视图 } @RequestMapping("/b") public ModelAndView b(String msg1, @ModelAttribute("msg2") String msg2) { System.out.println("msg1:" + msg1); System.out.println("msg2:" + msg2); return null; }

  • 重定向共享数据的原理:更大的作用域--session




三、处理器方法参数处理(接收请求参数的处理
  • 处理器方法的请求参数该怎么携带、请求参数该怎么获取

1、request 和 response 参数 ■ 情况一:为了操作Servlet API 对象,此时可以直接以参数形式传递,也可以直接使用DI注入。

@Controller @RequestMapping("/request") public class HandlerRequestController { @Autowired private ServletContext context; @RequestMapping("/test1") public void test(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws ServletException, IOException { System.out.println("request:" + request); System.out.println("response:" + response); System.out.println("session:" + session); System.out.println("ServletContext:" + this.context); } }

  • request、response、session:建议使用参数
  • context 上下文:单例,建议使用属性,注入

因为Controller(Servlet) 是单例的,线程不安全,一般不用成员变量,除非要共享的数据,才作为成员变量。



SpringMVC请求与响应处理要点有哪些?

2、简单类型参数
  • 处理简单类型的请求参数

■ 获取请求参数:

//获取请求参数:通过保证请求参数名称和Controller方法定义的形参(入参)同名即可 @RequestMapping("/test2") public void test2(String username, int age) { System.out.println(username); System.out.println(age); }


■ 获取请求参数:----注解@RequestParam

//获取请求参数:若请求参数和请求参数名称和形参不同----注解@RequestParam @RequestMapping("/test3") public void test3(@RequestParam("name") String username, @RequestParam(value="age",required=false) Integer age) { System.out.println("username:" +username); System.out.println("age:" + age); }
3、中文乱码处理 ■ 在"全局配置",添加上编码过滤器:

<!-- (针对post请求)配置过滤器 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!-- 配置初始化参数 --> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
4、restfull风格传参

  • restfull 风格:软件架构风格,严格讲是一种编码风格,充分利用java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

    (3) 使用jstl:

    <% pageContext.setAttribute("myDate", new java.util.Date()); %> 北京时间: <fmt:formatDate value="${myDate}" pattern="yyyy=MM-dd HH:mm:ss"/>



    3、后台往前台响应JSON时---Date类型

    (1)方法1:在springmvc框架配置中添加json类型转化相关的配置[配置全局解析器]:

    <!-- MVC注解解析器 --> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /> </bean> </property> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
    (2)方式2:使用注解@JsonFormat

    @Data public class User { private Long id; private String username; private Integer age; //@DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date hireDate; }

    ★ 注意:@DateTimeFormat前台往后台传参

    ★ 注意: 是后台响应给前台,响应为json格式(对时间Date类型的处理)



    如果本文对你有帮助的话记得给一乐点个赞哦,感谢!