• SpringWeb(SpringMVC)


    目录

    SpringWeb介绍

    搭建 SpringWeb


    SpringWeb介绍

    Spring Web是一个基于 Servlet API 构建的原始 web 框架,用于构建基于MVC模式的Web应用程序。在 web 层框架历经 Strust1,WebWork,Strust2 等诸多产品的历代更选 之后,目前业界普遍选择了 springWeb 作为 Java EE 项目 web 层开发的首选方案。其中DispatcherServlet是一个关键的组件,它负责处理客户端的HTTP请求,并将请求分派到相应的Handler中处理DispatcherServlet是Spring MVC框架的核心组件,它接收客户端的HTTP请求,并将其传递给相应的Handler来处理。

    DispatcherServlet的工作原理:

    1. 请求接收:当客户端发送一个HTTP请求时,DispatcherServlet会创建一个请求对象,并从中获取请求的URL路径、HTTP方法、请求头等信息。
    2. 请求映射:DispatcherServlet会使用HandlerMapping实例来根据请求的URL路径和HTTP方法来匹配一个或多个Handler实例。HandlerMapping实例负责将URL路径和HTTP方法映射到具体的Handler实例上。
    3. 请求解析:当一个Handler实例被选中后,DispatcherServlet会调用HandlerAdapter实例来解析请求,获取请求的参数、请求头等信息。
    4. 业务处理:当请求被解析后,Handler实例会调用业务逻辑来处理请求。这个过程通常由Controller类中的方法来完成。
    5. 视图渲染:当业务逻辑处理完成后,Handler实例会调用ViewResolver实例来选择一个合适的视图来生成HTTP响应。ViewResolver实例负责将业务逻辑的结果转化为HTML、XML等格式的视图内容。
    6. 响应生成:当视图被选择后,Handler实例会调用View类中的render方法来生成HTTP响应。这个过程通常包括设置响应头、生成响应内容等操作。
    7. 响应发送:当HTTP响应生成完成后,DispatcherServlet会将响应发送给客户端。这个过程通常由Servlet容器来完成。
    SpringWEB 运行流程

    搭建 SpringWeb

    导入spring-webmvc包
    1. <dependency>
    2. <groupId>org.springframeworkgroupId>
    3. <artifactId>spring-webmvcartifactId>
    4. <version>5.2.2.RELEASEversion>
    5. dependency>
    在 web.xml 文件中配置 DispatcherServlet
     
    1. <servlet>
    2. <servlet-name>applicationservlet-name>
    3. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    4. <init-param>
    5. <param-name>contextConfigLocationparam-name>
    6. <param-value>classpath:spring.xmlparam-value>
    7. init-param>
    8. <load-on-startup>0load-on-startup>
    9. servlet>
    10. <servlet-mapping>
    11. <servlet-name>applicationservlet-name>
    12. <url-pattern>/url-pattern>
    13. servlet-mapping>
    开启 springmvc 注解(spring核心配置文件)
    1. <mvc:annotation-driven>mvc:annotation-driven>

    处理器类搭建

    • RestController定义web层的类,Spring 会扫描使用了@RestController 标识的类,然后将类加入到 Spring IOC 容器 中,注入依赖;
    • @RequestMapping 注解是一个用来处理请求地址映射的注解,可用于类或方法上。

    常用注解: 

    1. @RequestMapping(path = "/"):post请求和get请求都可以
    2. @GetMapping(path = "/"):用于get请求
    3. @PostMapping(path = "/"):用于post请求
    4. @RequestParam:名字不一致时,RequestParam可以绑定,其中有required默认为false,接收的参数可以为空,required=true时就不能为空,可以继续设置defaultValue作为默认值
    5.  @RequestHeader(“user-Agent”):接收请求头中的内容
    6. @RequestBody:当前端传来是json形式,用@RequestBody来接收
    7. @DateTimeFormat(pattern = "yyyy-MM-dd"):在日期形式的属性前加
    1. //RestController定义web层的类
    2. @RestController
    3. @RequestMapping(path = "/loginCtl")
    4. public class LoginCtl {
    5. @Autowired
    6. LoginService loginService;
    7. @RequestMapping(path = "/test")
    8. public String Login(){
    9. return "hello world!!!!!!!";
    10. }
    11. //path与value都可以 定义映射地址
    12. @RequestMapping(path = "/test1")
    13. public String Login1(){
    14. return "hello world1";
    15. }
    16. //path与value都可以 定义映射地址
    17. @GetMapping(path = "l")
    18. public String Login2(HttpServletRequest httpServletRequest){
    19. String account = httpServletRequest.getParameter("account");
    20. String password = httpServletRequest.getParameter("password");
    21. System.out.println(account+":"+password);
    22. return "hello world1";
    23. }
    1. @DateTimeFormat(pattern = "yyyy-MM-dd")
    2. private Date password;

    拦截器:

    拦截器类

    返回 true是离开拦截器,进目标处理器;

    返回false是不进处理器

    1. public class DemoInterceptor implements HandlerInterceptor {
    2. //preHandle预处理
    3. @Override
    4. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    5. System.out.println("进入到拦截器");
    6. return true;
    7. /*
    8. true是离开拦截器,进目标处理器
    9. false是不进处理器
    10. */
    11. }
    12. }

     注册拦截器

    /**:任何地址都进入拦截器,exclude-mapping:不进入拦截器的地址。

    1. <mvc:interceptors>
    2. <mvc:interceptor>
    3. <mvc:mapping path="/**"/>
    4. <mvc:exclude-mapping path="/loginCtl/test1"/>
    5. <bean id="demo" class="com.yyds.ssm.util.DemoInterceptor">bean>
    6. mvc:interceptor>
    7. mvc:interceptors>

  • 相关阅读:
    力扣-412.Fizz Buzz
    四、C++ 类的继承
    JS问题:项目中如何区分使用防抖或节流?
    Linux下安装docker以及docker安装Oracle19c的全部详细过程及各种问题解决
    Jackson指定json的key
    【vue】Vue项目中如何在父组件中直接调用子组件的方法
    【Rust日报】2022-07-27 chrono 有了新的维护者
    JAVA实操代码练习1
    Go-Excelize API源码阅读(三十五)——SetSheetCol
    不清楚的照片如何变清晰?教你几招变清晰的方法
  • 原文地址:https://blog.csdn.net/weixin_63541561/article/details/132547185