SpringMVC_处理请求数据

在上一篇博客中说到了@RequestMapping这个注解,那么今天就继续老说说SpringMVC是怎样处理请求数据的。

1、请求数据包括哪几部分呢?

它包括以下几个部分 :

  • 请求参数 。
  • cookie信息。
  • 请求头信息。

我们在前面说过JavaWEB中就有获取请求参数的类,HttpServletRequest有以下几个方法来获取请求数据。

  • Request.getParameter(参数名); Request.getParameterMap();
  • Request.getCookies();
  • Request.getHeader();

2、SpringMVC是怎么请求处理方法签名的*

1) Spring MVC 通过分析处理方法的签名(方法名+ 参数列表),HTTP请 求信息绑定到处理方法的相应形参中。
2) Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名。
3) 必要时可以对方法及方法入参标注相应的注解( @PathVariable 、@RequestParam、@RequestHeader 等)。
4) Spring MVC 框架会将 HTTP 请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。

3、 @RequestParam注解

1)在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
2)value:参数名
3)required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
4)defaultValue: 默认值,当没有传递参数时使用该值

控制器方法:

@RequestMapping(value="/testRequestParam")
public String testRequestParam(
@RequestParam(value="username") String username,
@RequestParam(value="age",required=false,defaultValue="0") int age){
	System.out.println("testRequestParam - username="+username +",age="+age);
	return "success";
}

index.jsp:

<a href="springmvc/testRequestParam?username=xiaoxiao&age=10">testRequestParama>

测试:
SpringMVC_处理请求数据_第1张图片
SpringMVC_处理请求数据_第2张图片
控制台打印信息:
SpringMVC_处理请求数据_第3张图片

4、 @RequestHeader 注解

1) 使用 @RequestHeader 绑定请求报头的属性值。
2) 请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中 。

控制器:

/**
 * 处理请求头信息
 * @param acceptLanguage
 * @return
 */
@RequestMapping(value="/testRequestHeader",method=RequestMethod.GET)
public String testRequestHeader(@RequestHeader(value="Accept-Language") String acceptLanguage) {
	System.out.println(acceptLanguage);
	return "success";
	
}

index.jsp:


<a href="springmvc/testRequestHeader">testRequestHeadera>

测试:
SpringMVC_处理请求数据_第4张图片
请求头信息:
SpringMVC_处理请求数据_第5张图片
控制台打印信息如下图:
SpringMVC_处理请求数据_第6张图片

5、@CookieValue 注解

1) 使用 @CookieValue 绑定请求中的 Cookie 值
2) @CookieValue 可让处理方法入参绑定某个 Cookie 值

控制器方法:

/**
 * 处理cookie信息
 * @param id
 * @return
 */
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String id ) {
	System.out.println(id);
	return "success";
}

index.jsp:

<a href="springmvc/testCookieValue">cookieValue</a> 

测试:
SpringMVC_处理请求数据_第7张图片
SpringMVC_处理请求数据_第8张图片
控制台打印信息:
SpringMVC_处理请求数据_第9张图片
SpringMVC_处理请求数据_第10张图片
可以发现与浏览器JSESSIONID的value一致。

6、使用POJO作为参数

1) 使用 POJO 对象绑定请求参数值。
2) Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。如:dept.deptId、dept.address.tel 等。
3) 实验代码

User类:

public class User {
	private Integer id ;
	private String username;
	private String password; 
	private String email;
	private int age;
	private Address address;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Address getAddress() {
		return address;
	}
	
	public void setAddress(Address address) {
		this.address = address;
	}
	
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email + ", age="
				+ age + ", address=" + address + "]";
	}
}

Address类:

public class Address {
	private String province;
	private String city;
	
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	@Override
	public String toString() {
		return "Address [province=" + province + ", city=" + city + "]";
	}
}

增加控制器方法:

/**
 * Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配, 自动为该对象填充属性值。
 * 支持级联属性 如:dept.deptId、dept.address.tel 等
 */
@RequestMapping("/testPOJO")
public String testPojo(User user) {
System.out.println("testPojo: " + user);
return "success";
}

index.jsp:


<form action=" testPOJO" method="POST">
	username: <input type="text" name="username"/><br>
	password: <input type="password" name="password"/><br>
	email: <input type="text" name="email"/><br>
	age: <input type="text" name="age"/><br>
	city: <input type="text" name="address.city"/><br>
	province: <input type="text" name="address.province"/>
	<input type="submit" value="Submit"/>
form>

测试:
SpringMVC_处理请求数据_第11张图片
SpringMVC_处理请求数据_第12张图片

控制台显示信息:
在这里插入图片描述
可以发现文字都出现乱码,那就配置一下字符编码过滤器。
将下面代码放在web.xml文件中所有的过滤器之前:

<!-- 配置字符集 -->
	<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>/*
   

测试结果:
在这里插入图片描述
注意:上述只是配置了以POST方式获取的,关于GET方式获取的还需要配置。

就是在你的Tomcat的web.xml配置文件中配置:
SpringMVC_处理请求数据_第13张图片
SpringMVC_处理请求数据_第14张图片

你可能感兴趣的:(#,SSM框架)