在学习Spring的时候,我们通过注解,将类添加到Spring容器中就存在一个这个@Controller
表示当前类是一个控制器类
@RequestMapperSpringMvc将请求对应RequestMapper中的地址进行对应
注解使用的范围该注解表示的多个请求地址不能是相同,否则会出现异常。前端能控制找不准确的控制器
放在类一个类中有多个方法,一个方法可以表示一个请求的地址
可以在类上添加一个@RequestMapper注解,进行统一管理方法中地址
通过上面示例自行观察
该注解的其他参数 value- @RequestMapping注解的value属性通过请求的请求地址匹配请求映射
- @RequestMapping注解的value属性是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址
所对应的请求 - @RequestMapping注解的value属性必须设置,至少通过请求地址匹配请求映射
//一个方法指定多个请求的地址
@RequestMapping(value = {"/testRequestMapping", "/test"})
public String testRequestMapping(){
return "success";
}
method
请求的方法,在学习HTML前端之后的时候,我们知道各种提交方式get/post/put/delete
//默认就是get
@RequestMapping(
value = {"/testRequestMapping", "/test"},
method = {RequestMethod.GET, RequestMethod.POST})
public String testRequestMapping(){
return "success";
}
注:
1、对于处理指定请求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解
处理get请求的映射–>@GetMapping
处理post请求的映射–>@PostMapping
处理put请求的映射–>@PutMapping
处理delete请求的映射–>@DeleteMapping
2、常用的请求方式有get,post,put,delete
如果发送的请求方式不匹配,会出现405异常
params- @RequestMapping注解的params属性通过请求的请求参数匹配请求映射
- @RequestMapping注解的params属性是一个字符串类型的数组,可通过四种表达式设置请求参数和请求映射的匹配关系
“param”:要求请求映射所匹配的请求必须携带param请求参数
“!param”:要求请求映射所匹配的请求必须不能携带param请求参数
“param=value”:要求请求映射所匹配的请求必须携带param请求参数且param=value
“param!=value”:要求请求映射所匹配的请求必须携带param请求参数但是param!=value
@RequestMapping(value = "show",method = RequestMethod.GET,params = {"username!=admin","password!=123"})
public String show(){
System.out.println("sss");
return "show";
}
400异常
header注:
若当前请求满足@RequestMapping注解的value和method属性,但是不满足params属性,此时
页面回报错400:Parameter conditions “username, password!=123456” not met for actual
request parameters: username={admin}, password={123456}
- @RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射
- @RequestMapping注解的headers属性是一个字符串类型的数组,可以通四种表达式设置请求头信息和请求映射的匹配关系
- 若当前请求满足@RequestMapping注解的value和method属性,但是不满足headers属性,此时页面
显示404错误,即资源未找到
与上面的params参数类似
查看header信息“header”:要求请求映射所匹配的请求必须携带header请求头信息
“!header”:要求请求映射所匹配的请求必须不能携带header请求头信息
“header=value”:要求请求映射所匹配的请求必须携带header请求头信息且header=value
“header!=value”:要求请求映射所匹配的请求必须携带header请求头信息且header!=value
我们需要去看一看header信息,怎么看呢
打开浏览器开发者模式,打开NetWork
这里面可以看到存在(请求头)(响应头)等,我们要对应的就是请求头信息
Goole浏览器
SpringMVC支持ant风格路径?:表示任意的单个字符
*:表示任意的0个或多个字符
**:表示任意的一层或多层目录
在指定请求路径的时候 @RequestMapper的value属性中,
添加这些符号,来表示多个路径
// 使用ant风格请求
@RequestMapping(value = "**/sh?w")
public String show(){
System.out.println("sss");
return "show";
}
观察路径,通过ant的路径可以进行多个路径展示
SpringMVC支持路径中的占位符- 原始方式:/deleteUser?id=1
- rest方式:/deleteUser/1
SpringMVC路径中的占位符常用于RESTful风格中,
当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,
在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参
// 使用ant风格请求和restfull风格注入值
@RequestMapping(value = "**/sh?w/{str}/{inttest}")
public String show(@PathVariable("str") String strvalue,@PathVariable("inttest") int inttestvalue ){
System.out.println("restfull获取值"+strvalue+" 第二个:"+inttestvalue);
return "show";
}
确实打印了但是有点乱码
SpringMVC获取请求的值 通过ServlectAPI获取将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象
@RequestMapping("/testParam")
public String testParam(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username:"+username+",password:"+password);
return "success";
}
通过控制器方法的形参获取请求参数
在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在
DispatcherServlet中就会将请求参数赋值给相应的形参
@RequestMapping("/testParam")
public String testParam(String username, String password){
System.out.println("username:"+username+",password:"+password);
return "success";
}
注: 若请求所传输的请求参数中有多个同名的请求参数,此时可以在控制器方法的形参中设置字符串 数组或者字符串类型的形参接收此请求参数 若使用字符串数组类型的形参,此参数的数组中包含了每一个数据 若使用字符串类型的形参,此参数的值为每个数据中间使用逗号拼接的结果@RequestParam
@RequestParam是将请求参数和控制器方法的形参创建映射关系
@RequestHeader@RequestParam注解一共有三个属性:
value 表示请求中的属性名 Required 表示如果请求中没有对应的属性名是报错还是为空 defaultValue 表示如果请求中没有对应的属性名带着什么默认值
@RequestHeader是将请求头信息和控制器方法的形参创建映射关系
@RequestHeader注解一共有三个属性:value、required、defaultValue,用法同@RequestParam
@cookievalue是将cookie数据和控制器方法的形参创建映射关系
@cookievalue注解一共有三个属性:value、required、defaultValue,用法同@RequestParam
可以在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类中的属性名一致,
那么请求参数就会为此属性赋值
//存在get/set方法不是没有是我没有展示出来
@Component("user")
public class User {
private String username;
private String password;
SpringMvc会自动将请求来的值对应实体类进行操作
get的乱码问题可以通过Tomcat的Server.xml进行配置
post则需要通过配置过滤器去操作了
上面可以看到我出现过乱码问题,现在来解决了
解决获取请求参数的乱码问题,可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进行注册
注:
SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*



