转发
无视图解析器
@RequestMapping("/t2") public String test2(){ return "/WEB-INF/views/test.jsp"; }
@RequestMapping("/t2") public String test2(){ return "forward:/WEB-INF/views/test.jsp"; }
有视图解析器
return:默认转发
@RequestMapping("/t2") public String test2(){ return "test"; }
重定向
重定向不需要视图解析器,本质就是重新请求一个新东方,所以只需要注意路径问题!
可以重定向到另外一个请求实现;
@RequestMapping("/t4") public String test4(){ return "redirect:/index.jsp"; }
数据处理
处理提交数据
1、提交的域名称和处理方法的参数名一致
提交数据: http://localhost:8080/hello?name=zhangsan
处理方法:
@RequestMapping("/param") public String test(String name){ System.out.println(name); return "hello"; }
2、提交的域名称和处理方法的参数不一致
提交数据: http://localhost:8080/hello?username=zhangsan
处理方法:
//@RequestParam("username") : username:提交的域的名称 . @RequestMapping("/hello") public String hello(@RequestParam("username") String name){ System.out.println(name); return "hello"; }
3、提交一个对象
实体类User
package com.star.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private String username; private int age; private String sex; }
处理方法:
@RequestMapping("/user") public String test(User user){ System.out.println(user); return "hello"; }
注意:如果使用对象的话,前端传递的参数名和对象名必须一致,否则就是null。
数据显示到前端
1、ModelAndView
public class ControllerTest1 implements Controller { public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { //返回一个模型视图对象 ModelAndView mv = new ModelAndView(); mv.addObject("msg","ControllerTest1"); mv.setViewName("hello"); return mv; } }
2、ModelMap
@RequestMapping("/param") public String test(@RequestParam() String name, ModelMap model){ System.out.println(name); model.addAttribute("username",name); return "hello"; }
3、Model
@RequestMapping("/param") public String test(@RequestParam() String name, Model model){ System.out.println(name); model.addAttribute("username",name); return "hello"; }
对比
Model:只有几个方法只适用于储存数据,简化了新手对于Model对象的操作和理解;
ModelMap:继承了LinkedMap,除了实现自身的一些方法,同样的继承LinkedMao的方法和特性;
ModelAndView:可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。
乱码问题
测试乱码
1、在首页编写一个提交表单
<form action="encode" method="post"> <input type="text" name="name"> <input type="submit"> </form>
2、后台编写对应的处理类
@PostMapping("/encode") public String test(String name,Model model){ model.addAttribute("name",name);//将数据传到前端 return "hello"; }
3、前端页面
<h1>${name}</h1>
测试结果:
可以看到出现乱码,SpringMVC为我们提供了一个过滤器,可以在web.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>
来源:https://www.cnblogs.com/lmx-181028/p/12505208.html