关键词
@RequestMapping
@RequestMapping("/xxxx")
功能:在方法,类中添加该注解,相当于:浏览器发送请求xxxx。会访问该类中的方法。比如:
public class Test{
@RequestMapping("/one")
public String one(){
return "one";
}
}
返回的one会给视图解析器进行解析拼接,然后跳转到该页面。
测试url:http://localhost:8080/one
@ResponseBody
就像上面的情况:
public class Test{
@ResponseBody
@RequestMapping("/one")
public String one(){
return "one";
}
}
当我们加入了该注解,就相当于,这个“one”只是作为响应体,而不是映射某一个文件。
实现转发和重定向
关键词:
- redirect:重定向
- forward:转发
没有视图解析器的情况
记得把视图解析器的代码注释掉先。
默认不写的情况是转发。
关于转发与重定向的相关信息请看这篇文章。
@Controller
@RequestMapping("/two")
public class TwoController {
@RequestMapping("/test1")
public String getTest1(Model model){
//使用重定向
return "redirect:/index.jsp";
}
@RequestMapping("/test2")
public String getTest2(Model model){
//使用重定向
return "forward:/WEB-INF/jsp/test.jsp";
}
@RequestMapping("/test3")
public String getTest3(Model model){
//使用重定向
return "/WEB-INF/jsp/test.jsp";
}
}
有视图解析器的情况
使用重定向和转发的情况一样,但是要注意的是,有视图解析器的话,无论是重定向还是转发,都会对字符串进行拼接
数据的处理
传递参数是一个对象:
User.java:
public class User {
private String name;
private int age;
....
}
@Controller
@RequestMapping("/two")
public class TwoController {
@RequestMapping("/test1")
public String getTest1(User user){
System.out.println(user);
return "test";
}
}
为了将前端传递的数据都封装成一个user对象,字段名必须要根据user的属性进行匹配,不然为空。
访问地址:http://localhost:8080/two/test1?name=tom&age=5
提交域名名称与处理方法参数不一致
关键词:@RequestParam(“xxxx”)
括号内的名称为域名提交的名称。
@Controller
@RequestMapping("/two")
public class TwoController {
@RequestMapping("/test1")
public String getTest1(@RequestParam("username") String name){
System.out.println(name);
return "test";
}
}
乱码问题:
在web.xml配置Spring提供的乱码过滤器:
<!-- 中文乱码过滤器 -->
<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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>