1.如何获取请求参数
* 默认方式:给方法参数写一个和请求参数名相同的变量,这个变量就用来接收请求参数的值
<a href="handle01?username=tomcat">参数请求1</a></br>
===> public String handle01(String username)
* @RequestParam:
public String handle02(@RequestParam("user") String username)
* 等价于 username=request.getParameter("user")
@RequestParam的属性:
* value:指定要获取的参数的key
* required:这个参数是否是必须的
* defaultValue:给参数设置默认值
@RequestParam与@PathVariable("id")的区别:
* @PathVariable是路径中的占位符: @RequestMapping("/hello/{id}")
* @RequestParam获取的是?后面参数的值
*@RequestHeader:获取请求头中某个key的值
@RequestHeader("User-Agent") String head
* 等价于head=request.getHeader("User-Agent")
@RequestHeader的属性和@RequestParam一致!!
* @CookieValue:获取某个Cookie的值
@CookieValue("JSESSIONID")
* 等价于Cookie[] cookies=request.getCookies();
for(Cookie c:cookies){
if(c.getName().equals("JSESSIONID")){
c.getValue();
}
}
@RequestMapping("/handle01")
public String handle01(String username, @RequestHeader("User-Agent") String head, @CookieValue("JSESSIONID") String cookie){
System.out.println("参数:"+username);
System.out.println("请求头:"+head);
System.out.println("cookie:"+cookie);
return "success";
}
@RequestMapping("/handle02")
public String handle02(@RequestParam(value="user",defaultValue = "请求没有带参数") String username){
System.out.println("参数:"+username);
return "success";
}
@RequestMapping("/handle03")
public String handle03(@RequestParam(value="user",required = false,defaultValue = "请求没有带参数") String username){
System.out.println("参数:"+username);
return "success";
}
2.如何从页面发起PUT、DELETE请求(浏览器只支持POST、GET请求),SpringMVC提供了对REST风格的支持
- SpringMVC中有一个HiddenHttpMethodFilter:把普通的请求转化为规定形式的请求
- 如何发送其他形式的请求?
创建一个post表单,设置参数_method的值为delete或者put,即设置想要转化的请求
注意:在高版本的tomcat中,REST支持会出现异常
解决方案:在跳转页面jsp中加入isErrorPage="true"
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>
3.乱码解决:CharacterEncodingFilter
- 在web.xml配置一个字符编码的Filter:CharacterEncodingFilter
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--encoding:指定解决POST请求乱码-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!--解决响应乱码-->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>
注意:
多个filter的情况下,按filter配置顺序进行拦截,所以一般将字符编码filter放在其他filter前面,否则会失效。
(characterEncodingFilter在第一次获取参数时有效)