SpringMVC是Spring框架的一个模块,无需通过中间层整合在一起。
SpringMVC是一个基于MVC设计模式web框架,MVC-model-view-controller:MVC将服务器端分为M、V、C三个组件,各模块负责各自的业务,实现了数据、业务逻辑和视图显示的分离。使软件模块化。model处理数据属于业务逻辑,controller完成数据和业务的调度,view完成视图显示。
SpringMVC的几个重要组件:
DispatcherServlet:前端控制器,主要是接收前端数据,通过HandlerMapping查找相应的Handler(通过HandlerAdapter适配)。DispatcherServlet将数据调度到相应的Handler执行。Handler(即SpringMVC中的Controller的实例?)执行得到ModelAndView,返回给DispatcherServlet。然后DispatcherServlet调用ViewResolver进行视图解析,ViewResolver解析完成得到View返回给DispatcherServlet,最后DispatcherServlet渲染数据到JSP/JSTL等返回给客户。
HandlerMapping映射器:根据请求的url查找Handler。
HandlerAdapter适配器:通过适配器DispatcherServlet无需实现所有的Handler的调用规则,只需执行对HandlerAdapter的调用。按照特定规则(HandlerAdapter要求的规则)去执行Handler
处理器Handler(需要攻城狮开发):编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行HandlerHandler。是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要攻城狮根据业务需求开发Handler
视图解析器ViewResolver(不需要攻城狮开发),由框架提供:进行视图解析,根据逻辑视图名解析成真正的视图(view)。ViewResolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
视图View(需要攻城狮开发jsp...)
xml配置方式的SpringMVC的开发:
1、在web.xml中配置前端控制器(DispatcherServlet)
<servlet>
<!-- 配置前端控制器(DispatcherServlet) -->
<!-- 配置name&class -->
<!-- <init-param>是SpringMVC配置文件在web.xml的映射 -->
<!-- <servlet-mapping>中将所有的.action结尾的url交给DispatcherServlet解析 -->
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- contextConfigLocation:指定springmvc配置的加载位置,如果不指定则默认加
载WEB-INF/servlet名称—servlet.xml(springmvc-servlet.xml)
-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- load-on-startup:表示servlet随服务启动; -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
第一种:*.action 或者 *.do,访问以.action或*.do结尾 由DispatcherServlet进行解析
第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析
使用此种方式可以实现 RESTful风格的url
第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,
仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错。
-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!-- springMvc前端控制器配置 -->
2、配置Spring MVC的配置文件
Spring MVC的配置文件由<servlet><init-param></init-param></servlet>指定
在springmvc中配置处理器适配器
<!-- 处理器适配器 所有处理器适配器都实现 HandlerAdapter接口 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
3、开发handler(及Controller)
需要实现Controller(com.springmvc.controller)接口实现handleRequest方法:方法原型:ModelAndView handleRequest(HttpServletRequest req,
HttpServletResponse res) throws Exception
返回ModelAndView接口
4、配置Handler
<!-- 配置Handler -->
<bean id="itemsController1" name="/queryItems_test1.action" class="com.springmvc.controller.ItemsController01" />
5、配置视图解析器
<!-- 视图解析器 解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置jsp路径的前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 配置jsp路径的后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
6、配置HandlerMapping:一个映射器可以有多个Url和Controller的映射,也可同时存在多个HandlerMapping映射器,url和Controller是一对一的关系,而Controller与url可以是一对多的关系。Controller可以处理多个url请求,url要指定一个Controller来执行,否则引起混乱。
<!--简单url映射 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- 对itemsController1进行url映射,url是/queryItems1.action -->
<prop key="/queryItems1.action">itemsController1</prop>
<prop key="/queryItems2.action">itemsController1</prop>
<prop key="/queryItems3.action">itemsController2</prop>
</props>
</property>
</bean>
7、配置DispatcherSerlvet.properties
路径在org.springframework.web.servlet.DispatcherSerlvet.properties
二、使用注解