1.DispatcherServlet配置在web.xml
请求会先进入 DispatcherServlet 中
2.HandlerMapping:负责帮助解析请求.
需要配置 DefaultAnnotationHandlerMapping的 <bean> HandlerMapping接口的实现类
3.HandlerAdapter:负责根据HandlerMapping解析的结果,去实际调用对用的方法.(找方法上@RequestMapping(“abc”)),如果找到方法,就执行这个方法
4.Controllers: 程序员自己写的方法,在具体的名称HandlerMethod
5.ViewResovler:视图解析器.负责解析HandlerMethod返回值,根据返回值内容去寻找要跳转的资源.
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 指定加载文件--> <init-param> <param-name>contextConfigLocation</param-name><!-- 这个名字是固定的 --> <param-value>classpath:springmvc.xml</param-value><!-- 文件名 和servlet-name 保持一致 --> <!-- 如果不给项目指定加载文件,默认加载的就是<servlet-name>名字</servlet-name>,名字- servlet.xml文 件。 --> </init-param> <!-- 配置创建对象的优先级。数值越低,优先级越高,1:当Tomcat加载时就,创建对象 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 除了JSP 都会执行Servlet --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
springmvc.xml
<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 实现注解 --> <context:component-scan base-package="com.bjsxt.controller"></context:component-scan> <!-- 配置DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter 的<bean> --> <mvc:annotation-driven></mvc:annotation-driven> </beans><mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的,即解决了@Controller注解使用的前提配置。
DemoController
@Controller // 注解加载 类 public class DemoController { // 只有被容器管理了,才能使用注解 @RequestMapping("demo123") public String demo(){ System.out.println("请求demo123 被处理"); return "index.jsp"; // 负责解析HandlerMethod返回值 } }
当访问 http://localhost:8080/springmvc01/ 时,根据 web.xml文件的默认配置信息,当访问项目根目录时候,自动跳转到index.jsp页面,但是拦截器不会拦截JSP文件。但是打印语句不会执行。
当访问 http://localhost:8080/springmvc01/demo123 时候,DispatcherServlet会拦截除了 jsp文件之外的所有请求,所以1.demo123会被拦截,2.并被HandlerMapping解析成 demo123 ,3.HandlerAdapter也会根据解析的内容调用对应的方法(Controller),4.ViewResolver再根据方法的返回值,进行响应。