Spring MVC执行的流程
用我个人的语言和理解进行讲解。
首先我们配置前端控制器Dispctcherservlet,扫描用户所发出的请求。
Controller 并未接收到用户请求,前端Servlet接收到用户请求后,通常会对用户请求进行简单预处理,例如解析,封装参数等,然后通过反射来创建Controller实例,并调用Controller的指定方法(MVC实际上封装的就是Servlet的请求和响应。)
Servlet拦截用户请求后,它如何知道创建那个 Controller接口的实例呢?
利用 xml 配置文件:例如在XML配置文件中描述hello请求对应使用HelloControllerL类。这就可以让MVC框架知道创建那个Controller接口的实例。
利用注解: 例如使用注解@Controller描述一个类,并使用注解RequestMapping(value=“/hello”)描述hello请求对应的方法。

Spring MVC执行的流程

1
用户向服务器发送请求,请求被DispacherServlet拦截获取,
2
DispacherServlet对请求的URL(统一资源定位符)进行解析,获得URL,再根据URL调用HandlerMapping获得该Handler配置的所有相关的对象,包括Handler对象以及Hanler对象对应的拦截器,这些对象会被封装到hanlerExecutionChain对象中进行返回。

3
Servlet获得的Handler,选择一个合适的HandlerAdapter。
HandlerAdapter的设计符合面向对象中的单一职责原则,会被用于处理多种Handler,调用Handler实际处理请求的方法。
4
提取请求重点模型数据,开始执行Handler(Controller)在。再填充Handlerd的入参过程中,根据配置。
Spring将帮你做一些额外的工作: 消息转化,数据转化,数据格式化,数据验证
5
Handler执行完成后,DisptcherServlet返回一个ModelAndView对象,ModelAndView对象中应该包含视图名或视图名和模型。
6
根据返回的ModelAndView对象,选择一个合适的ViewResolver(视图解析器)返回给DispacherServlet
7
ViewResolver结合Model和View来渲染视图。
8
将视图渲染结果返回给客户端。

1 环境配置(导入Springjar包)
idea开发环境,配置Tomcat 创建项目 植入依赖 (不管是哪个ide都可以转化为maven项目。 所以在创建项目时,就创建maven项目。)

1)Maven项目 artifactID 产品ID GroupID 厂商id version 版本号 2)pom.xml
Maven的配置文件。 主要在dependencies添加 maven的相关依赖(maven官方) 3)d为该项目添加Web能力
(尝试利用打包的方式 来给项目添加 web的tomcat的能力。)自学点

开发Spring MVC应用

pom.xml 配置(首先增加Spring支持)

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.18</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.3.18</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.3.18</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.18</version>
      
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>

在 web.xml定义前端控制器Dispatcherservlet来拦截用户请求。

配置前端控制器Dispctcherservlet

修改web.xml (servler servlet mapping) 配置dispatcherservlet

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!-- 拦截所有的请求,并且由他对所有的请求进行分配 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <!--    初始化参数 spring配置文件的作用-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/springmvc-config.xml</param-value>
    </init-param>
    <!--    启动序列,拍到第一位-->
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!--  代表拦截的命令的类型 /所有类型-->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <!--  servlet 和 servlet-mapping 配置之后,代表springMVC接受了请求响应-->
</web-app>

3配置Spring MVC的控制类

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd">

    <!--    定义注解扫描-->
    <context:component-scan base-package="org.chen.controller"/>

<!--    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>-->
<!--    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>-->
<!--    默认装配方案-->
    <mvc:annotation-driven/>
    <!--    静态资源处理-->
    <mvc:default-servlet-handler/>
    <!--视图解析器 解析jsp-->
    <bean  id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

</beans>

Controller类的实现

@Controller
public class Hellocontroller {
    @RequestMapping(value = "/hello")
    public ModelAndView hello() {
        System.out.println("hello 方法被调用");
        ModelAndView mv = new ModelAndView();
        mv.addObject("message", "Hello World!");
        mv.setViewName("/WEB-INF/view/weclome.jsp");
        return mv;
    }
}

View页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${requestScope.message}
<br>
<input type="submit" name="提交">

</body>
</html>

界面

SpringMVC统计项目所有接口及其路径 springmvc接口开发_spring