Spring MVC请求流程

1.MVC执行流程

1. ⾸先⽤户发送请求 , 请求被 SpringMvc 前端控制器( DispatherServlet )捕获。
2. 前端控制器 (DispatherServlet) 对请求 URL 解析获取请求 URI, 根据 URI, 调⽤ HandlerMapping。
3.前端控制器 (DispatherServlet) 获得返回的 HandlerExecutionChain (包括 Handler 对象以及 Handler对象对应的拦截器)。
4. DispatcherServlet 根据获得的 HandlerExecutionChain ,选择⼀个合适的 HandlerAdapter。(如果成功获得 HandlerAdapter 后,此时将开始执⾏拦截器的 preHandler(...) ⽅法))
5. HandlerAdapter 根据请求的 Handler 适配并执⾏对应的Handler(controller )
6.Controller 方法会调用相应的 Service 方法来执行业务逻辑。
7.Service 层通常会调用 DAO 层来实现对数据库的实际操作.
8.DAO 层会使用 JDBC、Hibernate 或者其他持久化框架,执行具体的 SQL 操作。DAO 层执行完数据库操作后,将结果返回给调用它的 Service 层方法

9.Service 层在获得了 DAO 层返回的结果后,可能会进行一些额外的业务逻辑处理,然后将最终结果(通常是业务逻辑需要的数据或者操作结果)返回给 Controller。
10.Controller 方法会收到来自 Service 层的结果, 返回⼀个 ModelAndView( 即模型和视图 ) 给HandlerAdaptor。
11.HandlerAdaptor
适配器将执⾏结果 ModelAndView返回给前端控制器。
12.前端控制器接收到
ModelAndView后,请求对应的视图解析器。
13.视图解析器解析ModelAndView后返回对应View。
14.渲染视图并返回渲染后的视图给前端控制器。
15.最终前端控制器将渲染后的⻚⾯响应给⽤户或客户端。


2.过滤器,拦截器,监听器的使用

2.1 过滤器(Filter)

过滤器是Servlet规范中的一部分,它可以截取请求在进入Servlet之前或者从Servlet生成的响应返回客户端之前进行预处理或后处理。在Spring MVC中,过滤器通常用于:

请求过滤和处理:可以在请求到达DispatcherServlet之前对请求进行预处理,如认证、日志记录、字符编码转换等。
响应处理:可以在生成响应之前对响应进行后处理,如设置响应的头信息、内容处理等。

过滤器是在Servlet容器级别配置和管理的,通常在web.xml或使用注解方式配置。

<!-- 设置过滤器 !-->
    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.sxkj.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/user/*</url-pattern>
    </filter-mapping>

2.2 拦截器(Interceptor)

拦截器是Spring MVC框架提供的一种机制,用于在请求处理过程中进行拦截和处理。拦截器是基于Spring框架的,因此能够访问Spring容器中的Bean,并且对处理器执行过程进行更详细的控制。

处理器前预处理:在进入处理器之前进行操作,如登录检查、权限验证等。
处理器后后处理:在处理器执行完毕但未返回视图前进行操作,如记录日志、添加公共模型数据等。
视图渲染前后处理:在视图渲染之前或之后进行操作,如修改模型数据、修改视图等。

 springmvc.xml中配置

 <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/user/**"/>
            <bean class="com.sxkj.interceptor.LoginIntercepter"/>
        </mvc:interceptor>
    </mvc:interceptors>

拦截器可以通过配置HandlerInterceptor接口实现类或继承HandlerInterceptorAdapter

public class MyInterceptor extends HandlerInterceptorAdapter {
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 预处理逻辑
        return true; // true表示继续流程,false表示中断后续流程
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 后处理逻辑
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 渲染完视图后的处理
    }
}

3. 监听器(Listener)

监听器是Servlet规范中的一种机制,用于监听Web应用中的事件和状态变化。在Spring MVC中,监听器主要用于:

应用生命周期事件监听:如应用启动、销毁等。
会话生命周期事件监听:如会话创建、销毁等。
属性变化监听:如会话属性变化等。
监听器通过实现ServletContextListener、HttpSessionListener等接口来监听相应的事件。

public class MyServletContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // 应用初始化逻辑
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // 应用销毁逻辑
    }
}

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC的执行流程主要包括以下几个步骤: 1. 客户端发送请求:当客户端发送一个 HTTP 请求时,它会首先到达 DispatcherServlet。 2. DispatcherServlet的处理:DispatcherServlet 是整个 Spring MVC 的核心,它负责接收所有的请求,并将请求发送到相应的处理器(Controller)进行处理。 3. 处理器映射:DispatcherServlet 会通过处理器映射器(Handler Mapping)来确定请求所对应的处理器(Controller)。 4. 处理器适配器:一旦确定了请求所对应的处理器(Controller),DispatcherServlet 会将请求发送给相应的处理器适配器(Handler Adapter)。 5. 控制器处理请求:处理器适配器会根据处理器(Controller)的类型来调用相应的方法来处理请求,这个方法就是我们在 Controller 中编写的业务逻辑。 6. 视图解析:处理器(Controller)处理完请求后,会返回一个 ModelAndView 对象,其中包含了视图名称和模型数据。DispatcherServlet 会使用视图解析器(View Resolver)来解析视图名称,将其对应的视图找到。 7. 视图渲染:一旦视图被找到,DispatcherServlet 会将模型数据传递给视图,并让视图进行渲染,生成最终的响应结果。 8. 响应返回给客户端:视图渲染完成后,DispatcherServlet 会将响应结果返回给客户端,完成整个请求-响应周期。 以上就是 Spring MVC 的简要执行流程,通过这个流程Spring MVC 可以将请求和处理解耦,实现了灵活的请求处理和视图渲染。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值