% C4 g& Y6 _3 W
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处理请求的流程:
0 V* i% `7 M1 ]8 O A4 N1 S 四:项目案例 web.xml配置: - <?xml version="1.0" encoding="UTF-8"?>9 W5 d5 A4 G- k G
- <web-app version="2.4"
3 K. _$ a6 J3 e1 ~+ B/ `9 \6 M - xmlns="http://java.sun.com/xml/ns/j2ee" % S* u J! t+ N* R/ R
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
$ D. f# u8 G0 i* \9 ~ - xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
; _7 o6 z- c3 B - http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
9 ?; ]/ x9 ?/ u* i - <servlet>7 \3 }' H& l: x$ b! m/ J9 g
- <servlet-name>springmvc</servlet-name>
8 v) Y4 K! ?" W - <servlet-class>/ Z2 j6 H: I" F7 z6 ?
- org.springframework.web.servlet.DispatcherServlet% C$ g- `' a) C
- </servlet-class>- }6 o! {6 O$ h$ y1 ^8 k' [* s2 u
- <init-param>
8 t, U! ]/ q4 x6 f8 f9 P2 C1 u - <param-name>contextConfigLocation</param-name>& L( {- ^1 C Y+ {" S
- <param-value>classpath:applicationContext.xml</param-value>
. V+ s6 S, m+ u+ I - </init-param>
) C1 }2 S8 F( O/ I - <load-on-startup>1</load-on-startup>
2 ^* r/ y7 z8 B! u - </servlet>
% K p: [7 i5 Q) Y1 a9 P" `6 { - <servlet-mapping>; I! f# R( v, u1 a3 H* j
- <servlet-name>springmvc</servlet-name>
1 C- g( p/ ?/ l1 X1 G - <url-pattern>*.do</url-pattern>+ F: {3 D, Y" B
- </servlet-mapping>% i, S X' P t1 o# k( ^
- <filter>
. L' B: ]! E) g7 a" c2 M) G. \ - <filter-name>CharacterEncodingFilter</filter-name>
e' \9 C& X. E7 H1 f0 S - <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
' v4 e, A2 b6 q- N5 J - <init-param>* e5 z3 O+ H9 S/ o/ I
- <param-name>encoding</param-name>
& {& ?. J R. @+ k - <param-value>utf-8</param-value>
3 ?- _. g( B3 f& y - </init-param>
/ K2 u- z/ U6 h9 f B# m5 l- u1 N: C - </filter>7 D/ E e# {$ J# n
- <filter-mapping>9 Y. P# e, W& a' I3 \/ ~( k
- <filter-name>CharacterEncodingFilter</filter-name>
6 A A5 H0 R5 H9 i% r2 E - <url-pattern>/*</url-pattern>) _$ }; h- K1 u6 S
- </filter-mapping>
$ @/ G/ `+ H- K2 u2 C! q# f - <welcome-file-list>) N1 X( ^ ]6 B) D$ W" M/ m' o
- <welcome-file>index.jsp</welcome-file>0 H2 b( i8 \/ F# W
- </welcome-file-list>5 {3 u d8 D$ _% }( Y
- </web-app>
9 p5 y. t# o! q% R
复制代码 applicationContext.xml配置:- <?xml version="1.0" encoding="UTF-8"?>9 y( w; l( w, H1 d B2 H, m
- <beans xmlns="http://www.springframework.org/schema/beans" : k9 K9 l) N2 }2 ]
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
~$ `/ B3 R' Q Y - xmlns:tx="http://www.springframework.org/schema/tx" : V/ i7 V% U8 s* f6 h
- xmlns:aop="http://www.springframework.org/schema/aop"3 U& Y. n9 T$ n
- xmlns:context="http://www.springframework.org/schema/context"
/ ]' h) a( d7 t0 ? - xmlns:jee="http://www.springframework.org/schema/jee"
* N+ {% w4 s: c, n9 K - xsi:schemaLocation=". s3 l& N. @( R( [& C
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd8 s% `* [/ i# c$ z( \2 l- v* o, A( a
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
3 ^* O6 ~- ] E5 Q7 N& q7 {- m - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
* ?9 m Q$ l* B' f4 R5 t - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd3 d) |& P: ^% ~! l, P0 |7 F
- http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
; R! C/ q4 O7 @5 s7 P; r% X7 o7 L - <!-- 定义映射处理器,指定请求和controller对应关系 -->9 W U9 e0 ]% X# ^4 }3 v5 ?! D
- <bean id="handlerMapping" " N- d8 `, ?& `$ p$ A
- class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">8 @1 M- l! M* W; m" d7 g* r& A
- <property name="mappings">
" ]( ^8 ^5 Q- M- U6 o6 d2 y7 W - <props>3 Q1 j: c, N0 G
- <prop key="welcome.do">welcomeController</prop>
( d$ v" a, }% g" {# e$ o - <prop key="login.do">loginController</prop>
6 t$ @9 D: d& G - <prop key="toLogin.do">toLoginController</prop>& V6 t1 W) u p$ B0 |
- </props>% P; n! B/ h$ }0 E M
- </property>
; Z# z5 R6 P# k) A: E6 i) e$ [ - </bean>
) |% k' i3 h" P) u - <!-- 定义视图解析器,根据ModelAndView信息定位视图组件 -->7 {: M# T: m h1 ^
- <bean id="viewResolver" + R, ~; i) I* B
- class="org.springframework.web.servlet.view.InternalResourceViewResolver">
7 r5 `8 P6 V" d1 O4 V - <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>& D% u, W% i3 s1 Q8 }( ~6 _
- <!-- 配置视图后缀 --> ' P k v* j: B9 ?
- <property name="suffix" value=".jsp"></property>
9 f" l' F# n% x6 | - <!-- 配置视图前缀 --> & n3 E* w- a' ^8 h+ F/ c) v1 G
- <property name="prefix" value="WEB-INF/jsp/"></property>
/ P+ }; W ?8 g- H - </bean> Q5 A# R8 W$ ?/ O5 o) F
- <!-- 定义Controller组件,等价于原来的Action -->
K5 O& o6 `# s - <bean id="welcomeController" scope="prototype" class="itstyle.action.WelcomeController"></bean>8 h. x0 A" n& x, S# ^* H, ?* h
- <bean id="loginController" scope="prototype" class="itstyle.action.LoginController"> ) [, W6 I3 y% s% o
- <property name="commandClass" 3 A5 D, ]4 t) b
- value="itstyle.entity.User">" J; J% V4 c% T; ~, J3 [
- </property>
6 Y9 b. T- S3 |* [# w/ Y - </bean>
, I) O$ }' D7 S4 |7 H/ y$ x - <bean id="toLoginController" scope="prototype" class="itstyle.action.ToLoginController"></bean>
. Q7 C: A! i$ u. K/ x5 k - </beans>
复制代码 项目测试通过 包含所有的jar包和配置文件 导入即可。+ i7 y2 k& \0 _3 ^& L
# Y, q+ _% z# J! K) m' x
|