IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 详细解读-Spring请求处理 -> 正文阅读

[Java知识库]详细解读-Spring请求处理

SpringMvc_请求处理

Spring MVC 框架也是一个基于请求驱动的 Web 框架,并且使用了前端控制器模式(是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理来进行设计,再根据请求映射规则分发给相应的页面控制器(动作/处理器)进行处理




一、请求参数处理

1.SpringMvc对请求参数的处理

@RequestParam:获取请求的参数

如何获取SpringMVC中请求中的信息
默认情况下,可以直接在方法的参数中填写跟请求一样的名称,此时会默认接受参数
如果有值,直接赋值,如果没有,那么直接给空值
@RequestParam:获取请求中的参数值,使用此注解之后,参数的名称不需要跟请求 的名称一致,但是必须要写

此注解还包含三个参数:
value:表示要获取的参数值
required:表示此参数是否必须,默认是true,如果不写参数那么会报错, 如果值为false,那么不写参数不会有任何错误
defaultValue:如果在使用的时候没有传递参数,那么定义默认值即可

示例:

 @RequestMapping("/bobo")
    public String bobo(@RequestParam(value = "username", defaultValue = "徐庶") String name) {
        System.out.println(name);
        return "index.jsp";
    }

@RequestHeader:获取请求头信息

如果需要获取请求头信息该如何处理呢?
可以使用@RequestHeader注解,
如果要获取请求头中没有的信息,那么此时会报错
同样,此注解中也包含三 个参数,跟@RequestParam一样 value required defalutValue

示例:

 @RequestMapping("/header")
    public String header(@RequestHeader("Host") String host){
        System.out.println(host);
        return "/index.jsp";
    }

@CookieValue:获取cookie中的值

如果需要获取cookie信息该如何处理呢?
可以使用@CookieValue注解
如果要获取cookie中没有的信息,那么此时会报错
同样,此注解中也包含三 个参数,跟@RequestParam一样 value required defalutValue

示例:

   @RequestMapping("/cookie")
    public String cookie(@CookieValue("JSESSIONID") String jsessionId){
        System.out.println(jsessionId);
        return "/index.jsp";
    }

2.乱码问题的解决

我们在表单或者发送请求的时候,经常会遇到中文乱码的问题
那么 如何解决乱码问题呢?

GET请求:修改tomcat的server.xml,在Connector标签后面+ URIEncoding=“utf-8”
POST请求:编写过滤器进行实现

在web.xml中加入过滤器进行实现POST请求
注:此过滤器要写在其他过滤器前面,否则不起作用

<!--    解决编码识别问题-->
    <filter>
        <filter-name>characterEncodingFileter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--        encoding 编码格式-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
<!--    同时开启请求和响应的编码设置  -->
        <init-param>
            <param-name>transformWsdlLocations</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFileter</filter-name>
        <servlet-name>springmvc</servlet-name>
    </filter-mapping>

3.SpringMvc对原生API的支持

springMvc中的handler可以接收如下的servletAPI:

1.HttpServletRequest
2.HttpServletResponse
3.HttpSession
4.java.security.Principal
5.Locale
6.InputStream
7.OutputStream
8.Reader
9.Writer

通过导入Tomcat中lib文件下的service和jsp包 导入依赖
示例:

  @RequestMapping("/servlet")
    public String servlet(String username , HttpServletRequest request, HttpServletResponse response){
        System.out.println(username);
        String name = request.getParameter("name");
        System.out.println(name);
        request.setAttribute("name",name);
        return "/index.jsp";
    }

二、请求映射处理

1.@RequestMapping

作用:将请求和处理请求的控制器方法关联起来,建立映射关系。
@RequestMapping用来匹配客户端发送的请求,可以在方法上使用, 也可以在类上使用。
方法:表示用来匹配要处理的请求
类上:表示为当前类的所有方法的请求地址添加一个前置路径,访问 的时候必须要添加此路径

@RequestMapping就是用来标识此方法用来处理什么请求,其中的/可以取消
取消后默认也是从当前项目的根目录开始查找,一般在编写的时候看个人习惯
同时,@RequestMapping也可以用来加在类上,

 @RequestMapping("/bobo1")
    public String bobo1(User user) {
        System.out.println(user);
        return "index.jsp";
    }

2.@PathVariable

此注解就是提供了对占位符URL的支持,就是将URL中占 位符参数绑定到控制器处理方法的参数中。
@PathVariable 用在参数上面的 专门用来获取URL目录级别的参数
比如 http://localhost:8080/springmvc/path/user/123/xushu 要获得123 @RequestMapping(“/user/{id}”) : @PathVariable(“id”) Int eger id 10

示例:

@RequestMapping("/user/{id}/{username}") 
public String path01(@PathVariable("id") Integer id,@PathVariable("username") String name)
{ 
	System.out.println(id); 
	System.out.println(name);
	return "/index.jsp"; 
}

3.REST

REST即表述性状态传递(英文:Representational State Transfer, 简称REST)是RoyFielding博士在2000年他的博士论文中提出来的一种软件架 构风格。
它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。 一种相较与之前URL所产生一种更优雅的URL风格

如果是原来的架构风格,需要发送四个请求,分别是?
查询用户:http://localhost:8080/app/user.do?action=getUser&id=xxx GET 增加用户:
http://localhost:8080/app/user_add.do POST 修改用户:
http://localhost:8080/app/xiugaiuser.do POST 删除用户:
http://localhost:8080/app/delete.do?id=1 GET/POST

让不同的请求方式表示不同的请求类型就可以简化我们 的查询,改成名词
看URL就知道要什么看http method就知道干什么
查询用户: http://localhost:8080/xxx/user/1 GET --查询
查询多个用户: http://localhost:8080/xxx/users GET
新增用户: http://localhost:8080/xxx/user POST ---新增
修改用户: http://localhost:8080/xxx/user/1 PUT --修改
删除用户:http://localhost:8080/xxx/user/1 DELETE --删除

对网络上所有的资源都有一个资源标志符;
对资源的操作不会改变标识符;
同一资源有多种表现形式(xml、json);
所有操作都是无状态的(Stateless)
符合上述REST原则的架构方式称为RESTful;

HiddenHttpMethodFilter:浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求。
在web.xml中配置过滤器,来实现delete和put方法

<!--    处理html不支持rest中put和delete-->
    <filter>
        <filter-name>hiddenHttpMethod</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>hiddenHttpMethod</filter-name>
        <servlet-name>springmvc</servlet-name>
    </filter-mapping>
@Controller
@RequestMapping("/rest")
public class RestController {

    // 查询
    @GetMapping("/user/{id}")
    public String get(@PathVariable("id") Integer id){
        System.out.println("查询用户:"+id);
        return "/index.jsp";
    }


    // 新增
    @PostMapping("/user")
    public String add(User user){
        System.out.println("新增用户:"+user);
        return "/index.jsp";
    }
    // 修改
    @PutMapping("/user/{id}")
    public String update(User user){
        System.out.println("修改用户:"+user);
        return "/index.jsp";
    }
    // 删除
    @DeleteMapping("/user/{id}")
    public String delete(@PathVariable("id") Integer id){
        System.out.println("删除用户:"+id);
        return "/index.jsp";
    }
}

4.静态资源的访问

当页面中包含静态资源的时候我们能够正确的获取到吗?
在这里插入图片描述
在自己设置的xml文件中加入一个配置
我这里图片放在web文件夹下的image文件夹中

   <mvc:default-servlet-handler/>
<!--    <mvc:annotation-driven></mvc:annotation-driven>-->
    <mvc:resources mapping="/images/**" location="/image/"/>

访问静态资源,只要在xml文件中加入如下配置即可:

    <mvc:default-servlet-handler/>
    <mvc:annotation-driven></mvc:annotation-driven>

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:12:55  更:2022-09-21 00:13:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:02:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码