SpringWeb(SpringMVC)

目录

SpringWeb介绍

[搭建 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包

XML 复制代码
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>

在 web.xml 文件中配置 DispatcherServlet

XML 复制代码
    <servlet>
        <servlet-name>application</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <!-- 请求映射 -->
    <servlet-mapping>
        <servlet-name>application</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

开启 springmvc 注解(spring核心配置文件)

XML 复制代码
    <!--开启 springmvc 注解-->
    <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"):在日期形式的属性前加
java 复制代码
//RestController定义web层的类
@RestController
@RequestMapping(path = "/loginCtl")
public class LoginCtl {

    @Autowired
    LoginService loginService;
    @RequestMapping(path = "/test")
    public String Login(){
        return "<b>hello world!!!!!!!<b/>";
    }


    //path与value都可以 定义映射地址
    @RequestMapping(path = "/test1")
    public String Login1(){
        return "hello world1";
    }

    //path与value都可以 定义映射地址
    @GetMapping(path = "l")
    public String Login2(HttpServletRequest httpServletRequest){

    String account =  httpServletRequest.getParameter("account");
    String password =  httpServletRequest.getParameter("password");
        System.out.println(account+":"+password);
        return "hello world1";
    }
java 复制代码
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date password;

拦截器:

拦截器类

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

返回false是不进处理器

java 复制代码
public class DemoInterceptor implements HandlerInterceptor {
    //preHandle预处理
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("进入到拦截器");
        return true;
     /*
     true是离开拦截器,进目标处理器
     false是不进处理器
      */
    }
}

注册拦截器

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

XML 复制代码
    <!--注册处连接器-->

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <!--<mvc:exclude-mapping path="/statics/**"/>-->
            <!--test1 不进拦截器 -->
            <mvc:exclude-mapping path="/loginCtl/test1"/>
            <bean id="demo" class="com.yyds.ssm.util.DemoInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
相关推荐
香蕉大香蕉(06敬畏市场)4 分钟前
MySQL 单点详解(09)
java·数据库·mysql·面试·八股·大厂实习
January120723 分钟前
【AI方法笔记】2026-11-02:模型流式吐 JSON 时,前端会遇到四种崩法
前端·人工智能·笔记·json
asdzx6726 分钟前
C# 操作 PDF 元数据:从属性写入到字段提取的完整流程
前端·pdf·c#
java_nnnn32 分钟前
Spring IoC & DI 从入门到理解:控制反转、依赖注入与 Bean 管理详解
数据库·sql·spring
吹什么轩43 分钟前
constexpr 完全指南:从 const 的两种含义,到编译期计算的四次演进
java·前端·javascript
她的男孩1 小时前
租户 A 的验证码,却用了租户 B 的 AccessKey:Forge Admin 修跨租户短信串发
java·spring boot·saas
LabVIEW开发1 小时前
LabVIEW 局部变量与数据流:这道 CLAD 题为什么答案是 Undefined
java·开发语言·labview
文丑颜不良啊1 小时前
LeetCode1721~1740题目解析
java·leetcode
wangbing11251 小时前
监控网页项目常用英文缩写
java
麻瓜code1 小时前
双写一致性:为什么是“删缓存“,而不是“改缓存“
java·缓存·mybatis