4 @9 ]$ J$ t6 i- m4 Z
Spring Web MVC是一种基于java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。 另外还有一种基于组件的、事件驱动的Web框架在此就不介绍了,如Tapestry、JSF等。 Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet;应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。 二:Spring Web MVC能帮我们做什么 √让我们能非常简单的设计出干净的Web层和薄薄的Web层; √进行更简洁的Web层的开发; √天生与Spring框架集成(如IoC容器、AOP等); √提供强大的约定大于配置的契约式编程支持; √能简单的进行Web层的单元测试; √支持灵活的URL到页面控制器的映射; √非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用); √非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API; √提供一套强大的JSP标签库,简化JSP开发; √支持灵活的本地化、主题等解析; √更加简单的异常处理; √对静态资源的支持; √支持Restful风格。 三:Spring Web MVC架构 Spring Web MVC框架也是一个基于请求驱动的Web框架,并且也使用了前端控制器模式来进行设计,再根据请求映射规则分发给相应的页面控制器(动作/处理器)进行处理。首先让我们整体看一下Spring Web MVC处理请求的流程:
6 Y7 z2 @' B& L; H. U- T1 W$ W 四:项目案例 web.xml配置: - <?xml version="1.0" encoding="UTF-8"?>
( P6 O/ Q" Z' }) f6 r x - <web-app version="2.4"
! a. M& ~5 l6 \ d8 j: @5 ?! U - xmlns="http://java.sun.com/xml/ns/j2ee"
( p2 I! i- u4 Z& k7 A* r - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 P1 ?. L- U: Z3 g' u6 [
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee ) `- _0 \, ]9 {- q
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">: w& p- \/ h8 |" d/ l! z
- <servlet>
% w* I4 J2 i- ~ - <servlet-name>springmvc</servlet-name>
, j1 Q' f) O$ X7 v2 D$ a5 U' E - <servlet-class>5 m# Q4 b' p0 C# i* V
- org.springframework.web.servlet.DispatcherServlet
" U4 _, K8 E8 {( I' w% C+ b - </servlet-class>4 t; c; s% A7 H, Q! o. A3 u
- <init-param>
3 F; V& E( d) t - <param-name>contextConfigLocation</param-name>5 }1 Z; Z' ~0 s+ b, [* r; L5 V
- <param-value>classpath:applicationContext.xml</param-value>
" {+ x3 g. J( s5 K3 T [# q - </init-param>! U% e+ L& i8 r7 F$ p. z( k
- <load-on-startup>1</load-on-startup>) |) h0 Z2 B+ ^& y# f
- </servlet>! K* g$ _& [, g9 i2 X5 G1 u
- <servlet-mapping>
) D4 n. D+ K4 H0 e/ j - <servlet-name>springmvc</servlet-name>
3 s+ k& e5 j6 r9 A- p( f - <url-pattern>*.do</url-pattern>
/ g( H9 z- N2 t: L - </servlet-mapping>
F0 Q# Y6 Q& b4 q! y - <filter>9 F6 @% ], L9 a- J5 h$ e2 J+ W
- <filter-name>CharacterEncodingFilter</filter-name>
. a* }& `3 E! y5 U7 p2 Q9 @5 N - <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
1 R1 ^3 Q) ?' F; `1 Z% P% I - <init-param>
# s5 R( N# @5 [ - <param-name>encoding</param-name>
) h2 g! {, B! p+ B8 G - <param-value>utf-8</param-value>
2 M* ~/ ^! R5 E- q* G - </init-param>+ R3 D2 x* B+ ]" f6 P/ [
- </filter>
% x* @) o" H( M9 L - <filter-mapping>
( M& }# e2 F, P; ?. W" l - <filter-name>CharacterEncodingFilter</filter-name>
- P: T' ~- k$ ?& u; q - <url-pattern>/*</url-pattern>
$ D! x. ~+ ^. n - </filter-mapping>
" j4 V! d% q! d# _" g# Q' f - <welcome-file-list>
6 \4 c: [$ x' i3 ~ - <welcome-file>index.jsp</welcome-file>4 G6 }6 I4 @2 r
- </welcome-file-list>2 F# Q5 ]& {0 S1 @4 J9 X4 J
- </web-app>1 J4 R2 A: Y( l0 i
复制代码 applicationContext.xml配置:- <?xml version="1.0" encoding="UTF-8"?>4 N8 q9 N9 j; W9 ~! V- p! x
- <beans xmlns="http://www.springframework.org/schema/beans" * H3 r; M q& T& J$ n5 M* g) ?9 F7 p
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance") D- J1 y r) M! s+ s# D5 }" X
- xmlns:tx="http://www.springframework.org/schema/tx" : A# }* U- p! T/ R) `6 \1 H) X9 Q
- xmlns:aop="http://www.springframework.org/schema/aop". A3 [9 `8 J! T( {4 b
- xmlns:context="http://www.springframework.org/schema/context" . c; z- Z$ j5 B- N& c7 c2 Q0 m# w
- xmlns:jee="http://www.springframework.org/schema/jee" f1 q/ C Y! B! `4 L6 K
- xsi:schemaLocation="
, n- l& j4 u5 ~+ k$ ~) K9 @ - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
' ^. t! M/ F5 b2 _% i0 X4 O! W& N - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd" Z) W$ @, T4 l% K2 d
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
* R' Z, j+ K$ Q - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
# m6 ?. n$ h- N5 h, F. D! ?) t1 j - http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
: }& y5 p O7 n/ w" H2 T - <!-- 定义映射处理器,指定请求和controller对应关系 -->7 k8 b/ V# P; I! D5 B
- <bean id="handlerMapping" 6 A1 S8 t! }- }% P8 D9 i: U8 ]7 m
- class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">/ I6 V( N% c+ h
- <property name="mappings">) D( J8 k# ~+ P; i$ n3 l
- <props>9 x# k0 m3 k+ J. e3 l
- <prop key="welcome.do">welcomeController</prop>
7 E2 S2 y" G7 R) t - <prop key="login.do">loginController</prop>. }0 H4 o! w0 ~
- <prop key="toLogin.do">toLoginController</prop>! V6 Y, | D9 a& i8 U2 _# |0 ^
- </props>% G2 o, X* `. r8 {! d' u2 j7 m
- </property>6 ?" { |7 \! u2 k7 {- R
- </bean>0 H9 f. @. y# }" I
- <!-- 定义视图解析器,根据ModelAndView信息定位视图组件 --> U8 Z1 L n( ^& Q
- <bean id="viewResolver"
$ M6 X2 l$ j8 _' ]/ K" H* ?% v - class="org.springframework.web.servlet.view.InternalResourceViewResolver">
# v8 E7 p" w! q5 B4 a+ s7 k - <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>0 B! t. T$ s* p+ o/ {
- <!-- 配置视图后缀 --> 3 z# y/ E5 D& z
- <property name="suffix" value=".jsp"></property>* u' n2 a; ~; U4 W5 S9 K
- <!-- 配置视图前缀 --> 3 E6 f2 \ G" E8 h3 ]/ A
- <property name="prefix" value="WEB-INF/jsp/"></property>" ]! M$ k0 n/ @
- </bean>4 g1 Y! i# k* v9 u. }% I4 e' n
- <!-- 定义Controller组件,等价于原来的Action -->0 b9 I) F# H/ W/ `1 a0 X' d' v
- <bean id="welcomeController" scope="prototype" class="itstyle.action.WelcomeController"></bean>; i; E2 v' ^! {! Q- b# t1 O) X. b
- <bean id="loginController" scope="prototype" class="itstyle.action.LoginController"> 7 {. J7 r! d; a Q9 t" [
- <property name="commandClass" 1 z. k& c# l$ `* f7 f. Z. V+ g$ \5 N% |
- value="itstyle.entity.User">
1 d9 a9 T/ i1 q - </property>
- ?' ] [7 p+ R8 x - </bean>
# {& c1 F, {1 [% b - <bean id="toLoginController" scope="prototype" class="itstyle.action.ToLoginController"></bean>0 Q' ^+ m4 ^8 P6 l' z M
- </beans>
复制代码 项目测试通过 包含所有的jar包和配置文件 导入即可。% s- Z) \# T" H/ E; M& ]2 H# H
& O- E$ K u9 Y* L9 F* O0 {) {
|