SpringMVC如何获取请求带来的各种信息&请求乱码和响应乱码问题

@RequestParam:获取请求参数
* 默认方式获取请求参数:
* 直接给方法入参上写一个和请求参数名相同的变量,这个变量就用来接收请求参数的值;没值传null
* @RequestParam(“username”)也能获取到值,没值报错
* value():获取的参数的key
required():这个参数是否必须
defaultValue():默认值
@PathVariable(“user”)//获取路径上的值 /book/{user}?user=admin
@RequestParam(“user”)//获取参数

@RequestHeader:获取请求头中某个key的值
用法和RequestParam一致

@CookieValue:获取Cookie值
以前的操作获取某个cookie:Cookie[] cookies = request.getCookies();//获得所有cookies
和RequestParam一致

@RequestMapping("/handle02")
	public String handle02(@RequestParam(value="username",required=false,defaultValue="你没带值") String username,
						   @RequestHeader("User-Agent")String userAgent,
						   @CookieValue(value="JSESSIONID",required=false)String jid){
		System.out.println("请求头中浏览器的信息:"+userAgent);
		System.out.println("这个变量的值:"+username);
		System.out.println("cookie中的jid值"+jid);
		return "success";
	}

如果我们的请求参数是一个POJO,StringMVC会自动赋值

* 
	 * 将POJO中的每一个属性,从request参数中尝试获取,并封装,没值就是null
	 * 还可以级联封装,属性的属性

@RequestMapping("/book")
	public String addBook(Book book){
		System.out.println("我要保存的图书:"+book);
		return "success";
	}

SpringMVC可以直接在参数上写原生API

 * 	HttpServletRequest
 *  HttpSession
 *  HttpServletResponse
 *  ----------------------------------------------------
 *  
 *  HttpServletRequest
	HttpServletResponse
	HttpSession
	java.security.Principal
	Locale:国际化有关的区域信息对象
	InputStream
		ServletInputStream inputStream = request.getInputStream();
	OutputStream
		ServletOutputStream outputStream = response.getOutputStream();
	Reader
	BufferedReader reader = request.getReader();
	Writer
@RequestMapping("/handle03")
	public String handle03(HttpSession session,HttpServletRequest request,HttpServletResponse response) {
		request.setAttribute("reqParam", "我是请求域中的");
		session.setAttribute("sessionParam", "我是session域中的");
		return "success";
	}

提交的数据可能有乱码

 * 提交的数据可能有乱码
 * 		请求乱码:
 * 			GET请求:改server.xml  添加URIEncoding="UTF-8"
 * 			POST请求:
 * 				在第一次获取请求参数之前设置
 * 				request.setCharacterEncoding("UTF-8");
 * 				使用SpringMVC的filter
 * 		响应乱码:response.setContentType("Text/html;charset=utf-8")

在web.xml

<!-- 配置一个字符编码的filter,字符编码过滤器一定要在所有过滤的前面-->
    <!-- 使用SpringMVC前端控制器写完,直接写字符编码过滤器
		tomcat一装上,就改server.xml的8080处添加URIEncoding="UTF-8"
 	-->
  <filter>
  	<filter-name>CharacterEncodingFilter</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 	<!-- encoding:指定解决POST请求乱码,forceEncoding:顺手解决响应乱码 -->
 	<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>/*</url-pattern>
  </filter-mapping>

  
  <!-- 支持Rest风格的Filter -->
  <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>/*</url-pattern>
  	</filter-mapping>

你可能感兴趣的:(SpringMVC,JAVA)