• SpringMVC的请求处理


    目录

    请求映射路径的配置

    请求数据的接收

    接收Restful风格的数据

    什么是Restful风格?

     接收上传文件

    获取headers头信息和cookie信息

    JavaWeb常用对象获取

    请求静态资源

    注解驱动标签


    请求映射路径的配置

    • 请求映射路径的配置主要是通过@RequestMapping注解实现的
    • 相关注解作用使用位置
      @RequestMapping设置控制器方法访问路径的资源,可以接收任何请求方法和类上
      @GetMapping设置控制器方法访问路径的资源,可接收GET请求方法和类上
      @PostMapping设置控制器方法访问路径的资源,可接收Post请求方法和类上

    请求数据的接收

    参数的接收在JavaWeb后端SpringBoot专栏已经进行了学习,此处就不再赘述。感兴趣可以去我主页对应专栏进行阅读。主页传送门:内容管理-CSDN创作中心

    • 接收Restful风格的数据

    • 什么是Restful风格

      • Rest(表象化状态转变/表述性状态转变),在2000年被提出,基于HTTP,URI,xml,JSON等标准和协议,支持轻量级、跨平台、跨语言架构设计。是Web服务的一种新网络应用程序的设计风格和开发方式。 
    • 常用规则
      • 用URI表示某个模块资源,资源名称为名词:
      • 模块

        URI资源

        用户模块userhttp://localhost/user
        商品模块producthttp://localhost/product
        账户模块accounthttp://localhost/account
        日志模块loghttp://localhost/log
    • 用HTTP响应状态码表示结果,国内常用的响应包括三部分:状态码、状态信息、响应数据


    •  
    • Restful风格参数是通过路径参数进行传递的,具体可以参照文章:请求响应-路径参数的接收_保持敬畏的博客-CSDN博客
    •  接收上传文件

    • 接收上传文件的数据,文件上传的表单有一定的要求:如下
      • 表单的提交方式必须是POST
      • 表单的enctype属性必须是,multipart/form-data
      • 文件上传需要name属性
         
    • 具体可以参照文章:SpringBoot案例-文件上传_保持敬畏的博客-CSDN博客
    •  虽然使用了不同的框架但是对于原理介绍是一样的。
    • 获取headers头信息和cookie信息

      • 接收Http请求头数据,接受指定名称的数据头
        1. package com.example.Controller;
        2. import com.example.Service.Service01;
        3. import org.springframework.beans.factory.annotation.Autowired;
        4. import org.springframework.stereotype.Controller;
        5. import org.springframework.web.bind.annotation.RequestHeader;
        6. import org.springframework.web.bind.annotation.RequestMapping;
        7. import java.util.Map;
        8. @Controller
        9. public class Controller01 {
        10. @Autowired
        11. private Service01 service01;
        12. @RequestMapping("/show")
        13. // 获取指定请求头信息
        14. public String show(@RequestHeader("Accept-Encoding") String requestHeader) {
        15. System.out.println(requestHeader);
        16. return "/index.jsp";
        17. }
        18. @RequestMapping("/show1")
        19. // 获取所有请求头信息
        20. public String show1(@RequestHeader Map requestHeader) {
        21. requestHeader.forEach((k, v) -> {
        22. System.out.println(k + "====" + v);
        23. });
        24. return "/index.jsp";
        25. }
        26. }
    • 启动web服务器后就可以,请求对应的路径
    • 请求show路径,终端输出
    • 请求show1
    • 终端输出
    • 获取客户端携带的Cookie数据
    • 关键代码如下
      1. package com.example.Controller;
      2. import com.example.Service.Service01;
      3. import org.springframework.beans.factory.annotation.Autowired;
      4. import org.springframework.stereotype.Controller;
      5. import org.springframework.web.bind.annotation.CookieValue;
      6. import org.springframework.web.bind.annotation.RequestMapping;
      7. @Controller
      8. public class Controller01 {
      9. @Autowired
      10. private Service01 service01;
      11. @RequestMapping("/show")
      12. // 获取Cookie信息
      13. public String show(@CookieValue(value = "JSESSIONID", defaultValue = "") String requestHeader) {
      14. System.out.println(requestHeader);
      15. return "/index.jsp";
      16. }
      17. }

    JavaWeb常用对象获取

    JavaWeb常用对象就是HttpServletRequest request和HttpServletResponse response,方法中要调用上述参数直接在方法的形参位置写入即可,SpringMVC框架在接收到请求后就会主动的将参数注入,具体代码如下

    运行结果如下

    请求静态资源

    • 在web服务器内部默认配置了一个defaul的tServlet,其匹配路径为“/”,该Servlet具备访问服务器中静态资源的能力,但是当我们自己配置一个DispatcherServlet时,如果设置的访问路径也是“/”那么就会对其进行覆盖,就无法访问到服务器中的静态资源。(上述是为什么不能访问到静态资源的原理
    • 解决方法一(spring的方式)
    • 将default的servlet的匹配路径更加精确一点
    • servlet的url-pattern匹配优先级时:精确匹配>目录匹配>拓展名匹配>缺省匹配
    • 解决方法二(SpringMVC框架中的方法)
    • 在SpringMVC框架的配置文件中去设置静态资源的映射关系
    • 解决方法三(SpringMVC框架中的方法)
    • 在SpringMVC框架的配置文件中去注册一个DefaultServletHttpRequestHandler处理器,静态资源由该处理器去处理,该方法也是使用最多的。

    注解驱动标签

    • 存在的问题,我们在上述解决方法三中,使用的注解,其底层代码的实现会相Spring容器中注入一个SimpleUrlHandlerMapping,该类继承了HandlerMapping
    • 由此Spring就不会默认自动加载该RequestMappingHandlerMapping,那么就会造成框架无法解析注解中的路径,以及实现路径与资源的映射。要解决上述问题,就需要人为的在SpringMVC框架中注册上述HandlerMapping
    • 由此可以完美解决上述问题

    但是在Spring框架中,可以将上述配置以及各种配置浓缩为一个简单的配置标签,那就是mvc的注解驱动,该标签内会帮我们注册RequestMappinghandlerMapping、注册RequsestingMappingHandlerAdapter并注入JSON消息转换器,上述配置就可以简化为一下配置

    ps:上述标签在不同版本的Spring框架中帮我们注册的组件不同。

  • 相关阅读:
    从ContinuousEventTimeTrigger/ContinuousProcessingTimeTrigger代码看如何实现一个自定义的触发器
    深度解析 | 支付和分账系统的前世今生
    双节前把我的网站重构了一遍
    SpringBoot + mongodb 删除集合中的数据
    Docker:Jenkins安装和自动构建发布
    Spring Boot 整合 Shiro(后端)
    POI2020题解
    List集合拆分为多个List
    源码:TMS FlexCel Studio for .NET 7.19
    Java 面试真题
  • 原文地址:https://blog.csdn.net/weixin_64939936/article/details/133798057