SpringMVC如何获取请求带来的各种信息?

SpringMVC如何获取请求带来的各种信息?

contoller演示

package com.atguigu.controller;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class HelloWorldController {

	@RequestMapping("/hello")
	public String hello() {
		System.out.println("hello方法执行了。。。");
		return "success";
	}
	
	/**
	 * springMVC如何获取请求带来的各种信息?
	 * 默认方式获取请求参数:
	 * 		直接给方法上写一个参数和请求参数一样的变量,这个变量就来接收请求参数的值
	 * 		带了就是有值的,没带默认为null
	 * 
	 * @RequestParam:获取请求参数
	 * @RequestHeader:获取请求头
	 * @CookieValue:获取某个cookie的值
	 */
	@RequestMapping("/handle01")
	public String handle01(String username) {
		System.out.println("这个变量名username的内容是"+username);
		return "success";
	}
	
	/**
	 * @RequestParam("username")指定后面的变量就是用来接受请求参数username的变量
	 * 默认必须带此参数,否则报错400,可以通过修改required=false来避免报错
	 * 带了就是有值的,没带默认为null
	 * 
	 * 参数:
	 * value:指定要获取的参数的key
	 * required:这个参数是否是必须的
	 * defaultVlaue:默认值,没带就默认是这个值
	 */
	@RequestMapping("/handle02")
	public String handle02(@RequestParam(value="username",required = false,defaultValue = "Tom") String name) {
		System.out.println("这个变量名username的内容是"+name);
		return "success";
	}
	
	/**
	 * @RequestHeader:获取请求头中的某个key的值
	 * @RequestHeader(value="userAgent")表示后面的变量userAgent用来表示请求头中User-Agent的值
	 * 如果请求头中没有此请求头,则报错500,可以通过修改required=false来避免报错
	 * 带了就是有值的,没带默认为null
	 * 
	 * 参数:
	 * value:指定要获取的参数的key
	 * required:这个参数是否是必须的
	 * defaultVlaue:默认值,没带就默认是这个值
	 */
	@RequestMapping("/handle03")
	public String handle03(@RequestHeader(value="User-Agent",required = false,defaultValue = "火狐") String userAgent) {
		System.out.println("请求头中浏览器的信息:"+userAgent);
		return "success";
	}
	
	/**
	 * @CoolkieValue:获取某个cookie的值,麻烦!!
	 * 	以前的操作获取某个cookie:Cookie[] cookies =  request.getCookies();
	 * 	for(Cookie c:cookies){
	 * 		if(c.getName().equals("JSESSIONID")){
	 * 			String cv = c.getValue();
	 * 		}
	 * 	}
	 * 
	 * (@CookieValue("JSESSIONID")表示后面的jSessionId变量就是cookie中JSESSIONID的值
	 * 如果cookie中没有这个键值对,则报错500,可以通过修改required=false来避免报错
	 * 带了就是有值的,没带默认为null
	 * 
	 *	参数:
	 * value:指定要获取的参数的key
	 * required:这个参数是否是必须的
	 * defaultVlaue:默认值,没带就默认是这个值
	 */
	@RequestMapping("/handle04")
	public String handle04(@CookieValue(value="JSESSIONID",required = false,defaultValue = "1") String jSessionId) {
		System.out.println("cookie中的JSESSIONID值为:"+jSessionId);
		return "success";
	}
	
	/**
	 * 如果我们的请求参数是一个pojo,springMVC会自动为这个pojo自动赋值
	 * 1、将pojo中的每一个参数,从request参数中尝试获取出来,并封装进去
	 * 2、还可以级联封装
	 * 
	 * 提交的数据可能有乱码:
	 * 		请求乱码:
	 * 			get请求:改Server.xml
	 * 				 <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8181" protocol="HTTP/1.1" redirectPort="8443"/>
	 * 			post请求:在第一次获取请求之前设置
	 * 				request.setCharacterEncoding("utf-8");
	 * 				自己写一个filter;springMVC有这个filter
	 * 		相应乱码:
	 *  		response.setContentType("text/html";charset=utf-8);
	 */
	@RequestMapping("/book")
	public String addBook(Book book) {
		System.out.println(book);
		return "success";
	}
	
	/**
	 * springMVC可以直接在参数上写原生API
	 */
	@RequestMapping("/handle05")
	public String handle05(HttpSession httpSerssion,HttpServletRequest httpServletRequest) {
		httpServletRequest.setAttribute("reqParam", "我是请求域中的");
		httpSerssion.setAttribute("sessionParam", "我是session域中的");
		return "success"; 
	}
	
}

前端jsp发送请求的样式:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="hello">hello</a><br/>
	<a href="handle01?username=tomcat">普通取参数</a><br/>
	<a href="handle02?username=tomcat">@RequestParam取参数</a><br/>
	<a href="handle03">@RequestHeader取参数</a><br/>
	<a href="handle04">@CookieValue取参数</a><br/>
	<!-- 级联属性 -->
	<form action="book" method="post">
		书名:<input name="bookName"/><br/>
		作者:<input name="author"/><br/>
		价格:<input name="price"/><br/>
		库存:<input name="stock"/><br/>
		销量:<input name="sales"/><br/>
		<hr/>
		省:<input name="address.province"/><br/>
		市:<input name="address.city"/><br/>
		街道:<input name="address.street"/><br/>
		<input type="submit"/>
	</form><br/>
	<a href="handle05">原生API</a>
</body>
</html>

解决乱码问题:配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>springMVC_helloWorld</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
	<servlet>
		<servlet-name>springDispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springMVC.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>springDispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- 使用spirngMVC前端控制器写完就直接写字符编过滤器
		Tomcat一装上,修改servlet.xml
		<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8181" protocol="HTTP/1.1" redirectPort="8443"/>
		就可以解决乱码问题
	 -->
	<!-- 配置一个字符编码的filter -->
	<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>
		<!-- 响应编码也设置成上述encoding,顺手解决响应乱码 -->
		<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>
	
	<filter>
		<filter-name>HiddenHttpMethodFilter</filter-name>
		<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
	</filter>
	
	<!-- 支持REST风格的URL的过滤器,一定要放在字符编码的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>
	
</web-app>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值