SpringMVC的工作流程简介

SpringMVC控制器工作流程

  1. 用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet所拦截;

  2. DispatcherServlet拦截到请求后,会调用HandlerMapping处理器映射器;

  3. 处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;

  4. DispatcherServlet会通过返回信息选择合适的HandlerAdapter(处理器适配器);

  5. HandlerAdapter会调用并执行Handler(处理器),这里的处理器指的就是程序中编写的Controller类,也被称之为后端控制器;

  6. Controller执行完成后,会返回一个ModelAndView对象,该对象中会包含视图名或包含模型和视图名;

  7. HandlerAdapter将ModelAndView对象返回给DispatcherServlet;

  8. DispatcherServlet会根据ModelAndView对象选择一个合适的ViewReslover(视图解析器);

  9. ViewReslover解析后,会向DispatcherServlet中返回具体的View(视图);

  10. DispatcherServlet对View进行渲染(即将模型数据填充至视图中); 11视图渲染结果会返回给客户端浏览器显示。

web.xml配置文件

f'g 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              ...
              
    <servlet>
        <!--注入前端控制器组件(实现了前端和后端如何交互)-->
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
                         </servlet-class>
        <!--加载spingmvc配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
        <!--应用启动自动启动前端控制器servlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--匹配前端传来的所有url-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

springmvc-config.xml配置文件

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
...
    <!--如果前端传来url是/firstController,就调用此类进行处理-->
    <bean name="/firstController" class="com.itheima.controller.FirstController" />
    <!-- 控制器映射器,将处理器Handle的name作为url进行查找,上条配置由此生效 -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!-- 控制器适配器,配置对处理器中handleRequest()方法的调用-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
</beans>

FirstController 控制器类

复制代码
public class FirstController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
        HttpServletResponse response) {
        //定义返回的模型
        ModelAndView mav = new ModelAndView();
        //定义返回的model模板(页面)为first.jsp页面
        mav.setViewName("/WEB-INF/jsp/first.jsp");
        //模版的数据赋值,也可以说是对model模板(页面)的渲染(加数据或者加特效?!)
        mav.addObject("msg", "这是我的第一个Spring MVC程序");
        return mav;
    }
}

first.jsp页面文件

复制代码
<html>
 <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
  <title>springmvc控制器流程</title> 
 </head> 
 <body>
   ${msg}   
 </body>
</html>

@controller 用于标识是处理器类

@RequestMapping:请求到处理器功能方法的映射规则;

@RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;

@ModelAttribute:请求参数到命令对象的绑定;

tMapping:请求到处理器功能方法的映射规则;**

@RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;

@ModelAttribute:请求参数到命令对象的绑定;

相关推荐
2501_9098008125 分钟前
Java 集合框架之 Set 接口
java·set接口
断剑zou天涯28 分钟前
【算法笔记】暴力递归尝试
java·笔记·算法
Nobody_Cares2 小时前
JWT令牌
java
沐浴露z2 小时前
Kafka入门:基础架构讲解,安装与使用
java·分布式·kafka
神秘的土鸡2 小时前
从数据仓库到数据中台再到数据飞轮:我的数据技术成长之路
java·服务器·aigc·数据库架构·1024程序员节
vir022 小时前
P1928 外星密码(dfs)
java·数据结构·算法·深度优先·1024程序员节
摇滚侠2 小时前
全面掌握PostgreSQL关系型数据库,备份和恢复,笔记46和笔记47
java·数据库·笔记·postgresql·1024程序员节
eguid_13 小时前
【开源项目分享】JNSM1.2.0,支持批量管理的jar包安装成Windows服务可视化工具,基于Java实现的支持批量管理已经安装服务的可视化工具
java·开源·jar·1024程序员节·windows服务·jar包安装成服务·exe安装成服务
杯莫停丶4 小时前
设计模式之:享元模式
java·设计模式·享元模式
遥远_4 小时前
Java微服务无损发布生产案例
java·spring·微服务·优雅停机·java微服务无损发布