SpringMVC 详细流程 + 入门程序(详细步骤)

SpringMVC 工做流程:css

流程图,截取与----》(http://blog.csdn.net/zuoluoboy/article/details/19766131):
html



详细图:前端



SpringMVC工做流程描述java

1.用户向服务器发送请求时,请求被Spring 前端控制器DispatcherServlet获取,如详细图第一步

2.DispatcherServlet对请求URL进行解析(好比咱们发送一个url以下的请求web

http://localhost:8080/SpringMVC/hello.action),就会获得请求资源标示符(URI,至关于就是上面的hello.action )。而后根据URI,调用处理器映射器(HandlerMapping)得到该Handler配置的全部相关对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回。spring

3.DispatcherServlet获取上面返回的Handler,并选择一个适合的HandlerAdapter。(附注:若是成功得到HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法后端

4.选择好合适的 HandlerAdapter后就 会开始执行Handler。在填充Handler的入参过程当中,根据配置,Spring将帮你作一些额外的工做(咱们不须要管)
EG:

      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息服务器

      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等mvc

      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等app

      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中


5. Handler执行完成后DispatcherServlet 返回一个ModelAndView对象(包含视图名或视图名和模型)


6.根据返回的ModelAndView象,选择一个合适的ViewResolver返会给DispatcherServlet 


7.ViewResolver结合,Model和View来渲染视图


8.最后将视图渲染结果返回给客户端


组件名词解释

1.DispatcherServlet:前端控制器

等同于之前的Controller, 是整个流程的中心, 负责调用其余组件

 

2.HandlerMapping 处理器映射器

负责根据请求找到Handler(处理器),springMVC中能够根据不一样的映射器实现不一样映射,好比 xml配置方式,注解方式,接口方式等

 

3.Handler后端控制器

在前端控制器的控制下对具体的用户请求进行处理,因此通常状况下都须要开发者进行根据需求进行开发


4.HandlerAdapter处理器适配器

处理Handler,能够对多种类型的处理器进行执行,这是对适配器模式的应用体现。


5.ViewResolver : 视图解析器

负责将处理结果生成view视图、开发者能够根据须要开发view


 入门程序(详细步骤): 在理解了springMVC的工做流程后,下面咱们根据流程步骤,来实现咱们的入门程序,步骤以下:

1.导入咱们的spring架包(通常去官网下载便可 4.2版本用的比较多)


2.在web.xml配置前端控制器

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<!-- 让servlet随服务启动 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
这里说一下 咱们的 拦截方式

1.   拦截固定后缀名的URL   *.action, *.do

2.   拦截全部:设置为/可是该方法会致使静态文件(css,js.jpg)被拦截下来不能正常显示,因此该方式须要特殊处理

注意:不能设置拦截全部为/*  该方式是错误的,由于请求action时,当action跳转到jsp时会再次被拦截,出现异常:根据jsp路径找不到映射地址


3.设置springmvc的配置文件

<servlet>
<init-param>
<param-name>contextConfigLocation</param-name>
  		<param-value>WEB-INF/springmvc.xml</param-value>
</init-param>
</servlet>

4.开发处理器

public class Hello implements Controller{
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		List list = new ArrayList<>();
		list.add("one");
		list.add("two");
		ModelAndView mv = new ModelAndView();
		mv.addObject("list",list);
		return mv;
	}
}

5.在springmvc.xml中配置

<!-- 配置适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 处理器映射器  -->
<!-- 根据bean的 name 查找Handler , 将action的URL 配置在bean的name中-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

<!-- 配置处理器 -->
<bean name="/hello.action" class="com.mt.controller.Hello"></bean>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>

6.视图开发  jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
asdfadfadfa
${list }
</body>
</html>


测试结果:   开启服务器后, 发送 http://localhost:8080/SpringMVC/hello.action的请求


页面显示:





对应理解springMVC  的流程便可。