栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

6.3(SpringMVC)操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

6.3(SpringMVC)操作

@Controller

在学习Spring的时候,我们通过注解,将类添加到Spring容器中就存在一个这个@Controller

表示当前类是一个控制器类

@RequestMapper

SpringMvc将请求对应RequestMapper中的地址进行对应

注解使用的范围

该注解表示的多个请求地址不能是相同,否则会出现异常。前端能控制找不准确的控制器

放在类

一个类中有多个方法,一个方法可以表示一个请求的地址

可以在类上添加一个@RequestMapper注解,进行统一管理方法中地址

放在方法中

通过上面示例自行观察

该注解的其他参数 value
  1. @RequestMapping注解的value属性通过请求的请求地址匹配请求映射
  2. @RequestMapping注解的value属性是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址
    所对应的请求
  3. @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
  1. @RequestMapping注解的params属性通过请求的请求参数匹配请求映射
  2. @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异常

注:
若当前请求满足@RequestMapping注解的value和method属性,但是不满足params属性,此时
页面回报错400:Parameter conditions “username, password!=123456” not met for actual
request parameters: username={admin}, password={123456}

header
  1. @RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射
  2. @RequestMapping注解的headers属性是一个字符串类型的数组,可以通四种表达式设置请求头信息和请求映射的匹配关系
  3. 若当前请求满足@RequestMapping注解的value和method属性,但是不满足headers属性,此时页面
    显示404错误,即资源未找到

与上面的params参数类似

“header”:要求请求映射所匹配的请求必须携带header请求头信息
“!header”:要求请求映射所匹配的请求必须不能携带header请求头信息
“header=value”:要求请求映射所匹配的请求必须携带header请求头信息且header=value
“header!=value”:要求请求映射所匹配的请求必须携带header请求头信息且header!=value

查看header信息

我们需要去看一看header信息,怎么看呢

打开浏览器开发者模式,打开NetWork

这里面可以看到存在(请求头)(响应头)等,我们要对应的就是请求头信息

Goole浏览器

SpringMVC支持ant风格路径

?:表示任意的单个字符
*:表示任意的0个或多个字符
**:表示任意的一层或多层目录

在指定请求路径的时候 @RequestMapper的value属性中,

添加这些符号,来表示多个路径

//    使用ant风格请求
    @RequestMapping(value = "**/sh?w")
    public String show(){
        System.out.println("sss");
        return "show";
    }

观察路径,通过ant的路径可以进行多个路径展示

SpringMVC支持路径中的占位符
  1. 原始方式:/deleteUser?id=1
  2. 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是将请求参数和控制器方法的形参创建映射关系

@RequestParam注解一共有三个属性:

value表示请求中的属性名
Required表示如果请求中没有对应的属性名是报错还是为空
defaultValue表示如果请求中没有对应的属性名带着什么默认值
@RequestHeader

@RequestHeader是将请求头信息和控制器方法的形参创建映射关系
@RequestHeader注解一共有三个属性:value、required、defaultValue,用法同@RequestParam

@cookievalue

@cookievalue是将cookie数据和控制器方法的形参创建映射关系
@cookievalue注解一共有三个属性:value、required、defaultValue,用法同@RequestParam

通过POJO获取请求参数

可以在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类中的属性名一致,

那么请求参数就会为此属性赋值

//存在get/set方法不是没有是我没有展示出来
@Component("user")
public class User {

    private String username;

    private String password;

SpringMvc会自动将请求来的值对应实体类进行操作

解决请求参数乱码问题 get和post乱码

get的乱码问题可以通过Tomcat的Server.xml进行配置

post则需要通过配置过滤器去操作了

上面可以看到我出现过乱码问题,现在来解决了

解决获取请求参数的乱码问题,可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进行注册

注:
SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效

 
    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        CharacterEncodingFilter
        /*
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643654.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号