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>
相关推荐
cs_dn_Jie7 分钟前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
测开小菜鸟7 分钟前
使用python向钉钉群聊发送消息
java·python·钉钉
开心工作室_kaic41 分钟前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿1 小时前
webWorker基本用法
前端·javascript·vue.js
P.H. Infinity1 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天1 小时前
java的threadlocal为何内存泄漏
java
caridle1 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
cy玩具1 小时前
点击评论详情,跳到评论页面,携带对象参数写法:
前端
^velpro^1 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋31 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx