转发
无视图解析器
@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>