SpringMVC工作流程及环境搭建
步骤:
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping 查找Handler可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping 向前端控制器返回Handlere
第四步:前端控制器调用处理器适配器去执行 Handlere
第五步:处理器适配器去执行 Handlere
第六步:Handler 执行完成给适配器返回 ModelAndViewe
第七步:处理器适配器向前端控制器返回 ModelAndViewe ModelAndView是springmvc框架的一个底层对象,包括Model和view
第八步:前端控制器请求视图解析器去进行视图解析根据逻辑视图名解析成真正的视图(isp)
第九步:视图解析器向前端控制器返回 View第十步:前端控制器进行视图渲染视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
组件:
1、前端控制器DispatcherSerlet(不需要程序员开发)作用接收请求,响应结果,相当于转发器,中央处理器。
有了DispatcherServlet减少了其它组件之间的耦合度。
2、处理器映射器HandlerMapping(不需要程序员开发作用:根据请求的url查找Handlere
3、处理器适配器HandlerAdaptere
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
4、处理器Handler(需要程序员开发)注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handlere
5、视图解析器View resolver(不需要程序员开发)作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)I
6、视图View(需要程序员开发isp)View是一个接口,实现类支持不同的View类型(isp、freemarker、pd..)
web.xml
<!--springmvc前端控制器--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--contextConfigLocation配置springmyc载的配置文件(配置处理器映射器、适配器等等)如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml) --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!- 第一种:*.action,访问以.action结尾由DispatcherServlet进行解析第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析使用此种方式可以实现RESTful风格的url第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,仍然会由DispatcherServlet解析isp地址,不能根据isp页面找到handler,会报错。 <url-pattern>*.action</url-pattern> <servlet-mapping> <servlet-name>springweb</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
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: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/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!-- spring扫描的包 --> <context:component-scan base-package="com.eco.controllor"/> <!-- DispatcherServlet不处理静态资源,交给服务器默认的servlet处理 --> <mvc:default-servlet-handler /> <!-- 启用annotation --> <mvc:annotation-driven /> <!-- 视图渲染器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean> <!--处理器映射器 将bean的name作为url进行查找,需要在配置Handler时指定beanname(就是url) --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandLerMapping"/> <!--处理器适配器 所有处理器适配器都实现HandlerAdapter接口 --> <bean class="org.springframework.web servlet.mvc.SimpleControl lerHandlerAdapter"/> </beans>