1、第一个hello程序
- 导入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
- 在web.xml中配置DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--注册DispatcherServlet-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--DispatcherServlet的配置-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMvc-config.xml</param-value>
</init-param>
<!--跟随服务器启动-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<!--
/ 不会匹配有后缀的视图 如.jsp
/* 会匹配有后后缀的视图
放在WEB-INF下面的视图不可见
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- 创建HelloController类实现Controller接口
package cn.butcher.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
// 模型与视图
ModelAndView mv = new ModelAndView();
// 将数据放入模型视图中
mv.addObject("msg","hello SpringMVC!");
// 设置要跳转得视图
mv.setViewName("hello");
return mv;
}
}
- 在resources下创建springMvc-config.xml作为DispatcherServlet的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--url映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--controller适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--handler-->
<bean id="/hello" class="cn.butcher.controller.HelloController"/>
</beans>
启动tomcat,访问 hello
2、执行流程
注意只有虚线的部分需要我们去做,实线部分都是spring帮我们做好了!
- 所有请求进入DispatcherServlet
- HandlerMapping为处理器映射,根据请求的url,查找Handler
- HandlerExecution表示具体的Handler 也就是 url去掉前缀后缀,如例子中的hello
- 将信息传回给DispatcherServlet
- HandlerAdapter处理器适配器,用来适配对应的controller
- 执行controller
- controller去调用业务层获得数据
- 业务层返回数据
- controller返回数据
- 适配器返回视图或模型返回给DispatcherServlet
- DispatcherServlet调用视图解析器解析
- 解析的逻辑视图名传回
- DispatcherServlet根据解析结果调用具体视图
- 呈现给用户