一、简单使用(实现接口)
该片文章使用实现接口。真实开发中不推荐使用这个,推荐使用注解。因为实现接口一个类就只能实现一个接口方法,而使用注解可以在一个类中定义多个方法,多个注解
这个简单使用,目的是为了了解Spring MVC 的运行流程。
使用Spring MVC需要的导入的maven依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
项目结构
创建jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>test.jsp</title>
</head>
<body>
${msg}
</body>
</html>
配置web.xml文件
主要配置DispatcherServlet。
<!--配置DispatcherServlet-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联一个SpringMVC的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--服务器启动的时候就启动-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!-- "/"匹配所有的请求不包括.jsp。"/*"匹配所有的请求包括.jsp -->
<url-pattern>/</url-pattern>
</servlet-mapping>
创建HelloController类并实现Controller接口。
仅仅用于学习Spring的运行原理,后面会使用注解实现。
/** 实现Controller */
public class HelloController implements Controller {
/** 处理请求 */
@Override
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws Exception {
// 业务代码...
// 模型和视图
ModelAndView mv = new ModelAndView();
// 将模型放入ModelAndView中(处理好的模型)
mv.addObject("msg", "hello Spring MVC");
// 将视图放到ModelAndView中
mv.setViewName("test");
// return视图
return mv;
}
}
配置springmvc-servlet.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 处理器映射器(第2步,BeanNameUrlHandlerMapping实现了HandlerMapping接口) -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 处理器适配器(第5步,SimpleControllerHandlerAdapter实现了HandlerAdapter接口) -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--视图解析器(第9步,InternalResourceViewResolver实现了ViewResolver接口)-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!-- id需要配置url,/开头(BeanNameUrlHandlerMapping这个处理器映射器仅学习原理时候用,还有很多别的处理器映射器,以后用别的) -->
<bean id="/hello" class="com.shengjava.web.controller.HelloController"/>
</beans>
部署到tomcat,发布。浏览器输入url地址
页面输出:
hello Spring MVC
注意:如果IDEA出现404访问不到的情况,请到项目结构的Artifacts中查看该模块中是否添加了jar包!
二、Spring MVC 流程
1.大概流程
实线是Spring MVC自己完成的,虚线是我们自己的操作。
Spring MVC 配置文件中必须配置的三大件:处理器映射器、处理器适配器、视图解析器。
其中,如果使用注解开发,则仅仅需要再配置文件中配置视图解析器即可。另外两个自动被解决了。
1.流程
流程:
-
1.用户发送请求至前端控制器DispatcherServlet。
-
2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。
-
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
-
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
-
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
-
6、 Controller执行完成返回ModelAndView。
-
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
-
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
-
9、 ViewReslover解析后返回具体View。
-
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
-
11、 DispatcherServlet响应用户。
2.组件说明
组件说明:
以下组件通常使用框架提供实现:
DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。
HandlerMapping:通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
HandlAdapter:通过扩展处理器适配器,支持更多类型的处理器。
ViewResolver:通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、excel等。
相关
我的该分类的其他相关文章,请点击:【Spring + Spring MVC + MyBatis】文章目录