Spring框架提供了构建Web应用程序的全功能MVC模块。通过策略接口Spring框架是高度可配置的,而且支持多种视图技术,例如JavaServerPages(JSP)技术,Velocity,Tiles(Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离),iText(一种生成PDF报表的Java组件)和POI.(POI提供API给Java程序对Microsoft Office格式档案读和写的功能).SpringMVC框架并不知道使用的视图,所以不会强迫只使用jsp技术。SpringMVC分离了控制器,模型对象,分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
Spring的MVC是基于servlet功能实现的,通过实现Servlet接口的DispatchSerlver来封装其核心功能实现,通过将请求分派给处理程序,同时带有可配置的处理程序映射,视图解析,本地语言,主题解析以及上载文件支持。默认的处理程序是非常简单的Controller接口,只有一个方法ModelAndView handleRequest(request,response)。Spring提供了一个控制器层次结构,可以派生子类。如果应用程序需要处理用户输入表单,俺么可以继承AbstractFormController。如果需要把多页输入处理到一个表单,那么可以继承AbstractWizardFromController.
SpringMVC或者其他比较成熟的MVC框架而言,解决的问题无外乎三点:
(1)将web页面的请求传给服务器。
(2)根据不同的请求处理不同的逻辑单元
(2)返回处理结果数据并跳转至响应的页面。
我们首先通过一个示例来快速回顾SpringMVC的使用。
1.SpringMVC快速体验
(1)配置web.xml.
一个web中可以没有web.xml文件,也就是说web.xml不是web工程必须的。web.xml文件用来初始化配置信息:比如Welcom页面,servlet,servlet-mapping,filter,listener,启动加载级别等。但是,SpringMVC的实现原理是通过servlet拦截所有URL来达到控制的目的,所以web.xml是必须的。
下面介绍web.xml的配置方式:
<!-- SpringMVC的前端控制器 -->
<!-- 当DispatcherServlet载入后,它将从一个XML文件中载入Spring的应用上下文 -->
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置上下文载入器 -->
<!-- 上下文载入器载入除DispatcherServlet载入的配置文件之外的其它上下文配置文件 -->
<!-- 最常用的上下文载入器是一个Servlet监听器,其名称为ContextLoaderListener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 使用ContextLoaderListener配置时,需要告诉它Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext-spring.xml</param-value>
</context-param>
Sring的MVC之所以要配置web.xml,其实最关键的是要配置两个地方。
- contextConfigLocation:Spring的核心就是配置文件,可以说配置文件是Spring中必不可少的东西,而这个参数就是使Web与Spring的配置文件相结合的一个关键配置
- DispatcherServlet:包含了SpringMVC的请求逻辑,Spring使用此类拦截Web请求进行相应的逻辑处理
之后可以在Spring中加入这样一段配置
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/view/" />
<property name="suffix" value=".jsp" />
</bean>
InternalResourceViewResolver是一个辅助Bean,会在ModelAndView返回的视图名前加上prefix指定的前缀,再在最后加上suffix指定的后缀,例如:由于XXController返回的ModelAndView中的视图名是testview,故该视图解析器将在/WEB-INF/jsp/testview.jsp处查找视图。