主题:Spring Mvc 下 请求的处理
- 开发环境
- 更多干货
- 请求方式的处理
- 请求参数的获取
- (一) 原来的方式:
- (二)现在 在spring 框架下:
- 请求头的获取
- 源码:
开发环境
基于:IntelliJ IDEA
、Maven构建工具
、JDK1.8
、SpringBoot 2.3.4
、Spring4.3.28
编写。
请求方式的处理
- 可以处理任意请求。
@RequestMapping("/demo1")
- 对于处理Get请求:
@GetMapping("/demo1")
//等价于:
@RequestMapping(value = "/demo1",method = RequestMethod.GET)
- 对于处理Post请求:
@RequestMapping(value = "/demo1",method = RequestMethod.POST)
//等价于:
@PostMapping("/demo1")
请求参数的获取
(一) 原来的方式:
request.getParameter("参数名");
(二)现在 在spring 框架下:
- 演示 spring mvc 获取请求参数
- @RequestMapping 注解,既可以标记在方法上,也可以标记在类。
- 加载类上,会跟方法上的映射结合。
- 结果显示:
- 结果显示:
- 演示用形参x 接收请求参数p_a
- 演示String[] b1 和 @RequestParam(“b”) List b2 绑定同一个接收请求参数
- 多个同名的请求参数可以用数组 或集合来接收
- 结果显示:
- 演示用一个User对象封装 form表单信息。
- 结果显示:
请求头的获取
- 原来的做法:
request.getHeader("头部字段");
- 用spring mvc框架以后:
结果显示: - 不同的浏览器获取的请求头字段不同
源码:
web.xml 配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--通过spring mvc的过滤器来处理post中文乱码-->
<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>
<!--请求中文乱码-->
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<!--响应中文乱码-->
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--spring mvc 是基于servlet 实现的一个框架 需要引用到 DispatcherServlet类-->
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--它这个Servlet类在创建的时候,需要创建Spring 容器。参数名: contextConfigLocation -->
<!--1. 配置我们使用的Spring配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--2. 配置这个类随Tomcat的启动而创建 用到 load-on-startup 标签-->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<!-- “/”就是指spring 的这个servlet 除了处理jsp以外的所有请求-->
<!--如果这里配置的是 /* ,表示处理所有请求,包括 .jsp-->
<!--后缀型的配置,如: .do, 表示处理所有以.do结尾的请求-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
spring-mvc.xml 配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:contest="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--开启扫描-->
<contest:component-scan base-package="com.example"/>
<!--开启spring mvc注解 -->
<mvc:annotation-driven ></mvc:annotation-driven>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
RequestHeaderController 类:
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/rh")
@Controller
public class RequestHeaderController {
//绑定请求头 加@RequestHeader注解
@RequestMapping("/demo1")
public String demo1(@RequestHeader("User-Agent") String userAgent){
System.out.println(userAgent);
return "demo";
}
}
RequestParameterController 类 :
package com.example.demo;
import com.example.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Arrays;
import java.util.List;
// MVC 架构
// M model 模型(数据)
// V view 视图(界面)
// C controller 控制器(衔接前两者的关系)
@RequestMapping("/rq")
@Controller
public class RequestParameterController {
//演示 spring mvc 获取请求参数
@GetMapping("/demo1")
public String demo1(String a ,Integer page){
System.out.println(page);
System.out.println(a);
return "demo";
}
//演示用 形参 接收 请求参数
@GetMapping("/demo2")
public String demo2(@RequestParam("p_a") String x ){
System.out.println(x);
return "demo";
}
//演示String[] b1 和 @RequestParam("b") List<String> b2 绑定同一个请求参数
@GetMapping("/demo3")
public String demo3(String[] b , @RequestParam("b") List<String> b2 ){
System.out.println(Arrays.asList(b));
System.out.println(b2);
return "demo";
}
//演示用一个 User对象 封装from表单信息
@RequestMapping("/demo4")
public String demo4(User user){
System.out.println(user);
return "demo";
}
}
DemoController类:
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class DemoController {
@RequestMapping(value ="/demo" ,method = RequestMethod.GET)
@GetMapping("/demo")
public String demo(){
return "demo";
}
}