Loading... # **SpringMVC的请求参数处理与跳转** ## **目标** 1. **熟练掌握SpringMVC的请求参数处理** 2. **了解并掌握SpringMVC的Model ModelMap ModelAndView ** ## **一、请求参数处理** ****1、提交的域名称和处理方法的参数名一致**** **提交数据 : **[http://localhost:8080/hello?name=Jiaoqianjin](http://localhost:8080/hello?name=Jiaoqianjin) **处理方法 :** ``` @RequestMapping("/hello") public String hello(String name){ System.out.println(name); return "hello"; } ``` **后台输出 : Jiaoqianjin** ****2、提交的域名称和处理方法的参数名不一致**** **提交数据 : **[http://localhost:8080/hello?username=Jiaoqianjin](http://localhost:8080/hello?username=Jiaoqianjin) **处理方法 :** ``` //@RequestParam("username") : username提交的域的名称 . @RequestMapping("/hello") public String hello(@RequestParam("username") String name){ System.out.println(name); return "hello"; } ``` **后台输出 : Jiaoqianjin** ****3、提交的是一个对象**** **要求提交的表单域和对象的属性名一致 , 参数使用对象即可** **1、实体类** ``` public class User { private int id; private String name; private int age; //构造 //get/set //tostring() } ``` **2、提交数据 : **[http://localhost:8080/mvc04/user?name=Jiaoqianjin&id=1&age=15](http://localhost:8080/mvc04/user?name=Jiaoqianjin&id=1&age=15) **3、处理方法 :** ``` @RequestMapping("/user") public String user(User user){ System.out.println(user); return "hello"; } ``` **后台输出 : User { id=1, name='Jiaoqianjin', age=15 }** **说明:如果使用对象的话,前端传递的参数名和对象名必须一致,否则就是null。** ## **二、数据显示** ### **1. 通过ModelAndView** **我们前面一直都是如此 . 就不过多解释** ``` @RequestMapping("/modelAndView") public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { //返回一个模型视图对象 ModelAndView mv = new ModelAndView(); mv.addObject("msg","ControllerTest1"); mv.setViewName("hello"); return mv; } ``` ### **2. 通过ModelMap** **ModelMap** ``` @RequestMapping("/modelMap") public String hello(@RequestParam("username") String name, ModelMap model){ //封装要显示到视图中的数据 //相当于req.setAttribute("name",name); model.addAttribute("msg",name); System.out.println(name); return "hello"; } ``` ### **3.通过Model** **Model** ``` @RequestMapping("/model") public String hello(@RequestParam("username") String name, Model model){ //封装要显示到视图中的数据 //相当于req.setAttribute("name",name); model.addAttribute("msg",name); System.out.println(name); return "hello"; } ``` ### **对比** **就对于新手而言简单来说使用区别就是:** ``` Model 只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解; ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性; ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。 ``` ## **三、乱码问题** ### **1. POST请求乱码** **测试步骤:** **1、我们可以在首页编写一个提交的表单** ``` <form action="${pageContext.request.contextPath}/encodeing" method="post"> <input type="text" name="name"> <input type="submit"> </form> ``` **2、后台编写对应的处理类** ``` @Controller public class HelloController { @PostMapping("/encodeing") public String encodeing(Model model,String name) { System.out.println(name); model.addAttribute("msg",name); //获取表单提交的值 return "test"; //跳转到test页面显示输入的值 } } ``` **3、输入中文测试,发现乱码**  **SpringMVC给我们提供了一个过滤器 , 可以在web.xml中配置 .** **修改了xml文件需要重启服务器!** ``` <filter> <filter-name>encoding</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> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` ### **2. Get请求乱码** **但是我们发现 , 有些极端情况下.这个过滤器对get的支持不好 .** **GET请求乱码** **Tomcat8 默认进行了url编码,get请求不乱码,Tomcat7会乱码** **处理方法 :** **修改tomcat server.xml配置文件 :设置编码!** ``` <Connector URIEncoding="utf-8" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ``` Last modification:June 3rd, 2021 at 11:00 am © 允许规范转载