/ L& X+ `2 \8 C; k0 ~! H
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处理请求的流程:
# t% z1 |/ l- R9 V- ?/ B
四:项目案例 web.xml配置: - <?xml version="1.0" encoding="UTF-8"?>
5 K; X+ H5 K+ ?0 O9 Z9 X3 _7 \1 M) r - <web-app version="2.4" 5 N9 K( x5 [$ @* q
- xmlns="http://java.sun.com/xml/ns/j2ee"
3 u3 V4 `4 W$ U - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ) g6 F" t5 L S- w
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee , E" ?* L# I! P
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">0 ?) |$ C# z' M$ A" _5 R3 J
- <servlet>' _- }% z, ]( [- P9 \& }
- <servlet-name>springmvc</servlet-name>
7 C! ]- Q) P, x - <servlet-class>) c6 J3 J6 i4 G2 y$ g( n, U9 I
- org.springframework.web.servlet.DispatcherServlet9 O3 f% W3 W% A( S/ i
- </servlet-class>' y* [ N+ l7 o1 e! F
- <init-param>
/ ]" w4 T6 y$ ~ - <param-name>contextConfigLocation</param-name>
' W1 i) N M+ X ]2 Z0 p1 n7 f - <param-value>classpath:applicationContext.xml</param-value>; n5 I' F; a. I
- </init-param>
- n, g L7 g' q6 `; e- K' y! @9 G$ L - <load-on-startup>1</load-on-startup>
% s# y, g2 k) W/ z, @ - </servlet>
# ?7 L& l4 S6 K - <servlet-mapping>
7 \4 E: R0 v6 F/ i - <servlet-name>springmvc</servlet-name>' X' }; `3 W3 z% H% V( t2 }3 ?
- <url-pattern>*.do</url-pattern>
/ h1 l( k; q) w. S3 _$ | - </servlet-mapping>/ y* A$ s5 m0 T' A
- <filter>
6 a( Y0 l5 C3 {( M3 U - <filter-name>CharacterEncodingFilter</filter-name>( o0 \( x7 |( B4 ~
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
# i: S8 ?/ \* j) o } - <init-param>) l; M' t" K7 y* Y, }' I5 k
- <param-name>encoding</param-name>
" Y1 b6 V) g2 P* z1 V - <param-value>utf-8</param-value>
( a: X2 Q% e- H. k; ^' c0 t - </init-param>
: y0 A. Z7 T" P - </filter>" }2 I! D( { _; y, ], l* B
- <filter-mapping>
- o* h- c3 t5 o6 f - <filter-name>CharacterEncodingFilter</filter-name>
2 A4 J, o& G X, { - <url-pattern>/*</url-pattern>+ D/ d8 E4 ^) X; v! B6 K1 I0 |
- </filter-mapping>+ Q# ^ d8 N$ R8 [7 b& T. a' G, f
- <welcome-file-list>! i7 Q, o. Y% U9 a2 O, s+ @/ G
- <welcome-file>index.jsp</welcome-file>
0 X: M) y+ p8 d, q - </welcome-file-list>4 w& p5 C# C( N
- </web-app>
5 p" b n2 J* F5 z
复制代码 applicationContext.xml配置:- <?xml version="1.0" encoding="UTF-8"?>) Y9 f* E$ n, V5 o$ U
- <beans xmlns="http://www.springframework.org/schema/beans"
0 r$ ]+ \/ H7 X0 \: z - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance". @( }/ b1 n7 R% n8 r+ o+ T. R1 v, g
- xmlns:tx="http://www.springframework.org/schema/tx" 7 `) _8 @9 O C# [3 @
- xmlns:aop="http://www.springframework.org/schema/aop"- {& ^9 d# C0 H3 ^# r) D& n& E
- xmlns:context="http://www.springframework.org/schema/context" 0 h8 K' p' X) |8 T7 G5 m& @ W- h
- xmlns:jee="http://www.springframework.org/schema/jee"
. O' Y+ M" U r& x" c - xsi:schemaLocation="! c/ b5 o4 _" @" j' x
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
: o+ G0 o$ V7 W/ ~ - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
( {1 X0 }9 m0 Y0 h; \, U; s - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
, J" E- l9 U, b; d7 |; S - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd7 k, p/ y6 {5 [/ o
- http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
3 @6 O- c. Y+ V; W& C - <!-- 定义映射处理器,指定请求和controller对应关系 -->
0 r. L! l: s# d b/ J - <bean id="handlerMapping"
3 g j( S o' B$ R# f/ |) x - class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">; z' [/ R( F# ^" |6 l# C- n
- <property name="mappings">
9 b& k, n5 A1 f - <props>8 D; _* ] x) p" e
- <prop key="welcome.do">welcomeController</prop>
: S6 [8 y& h* g! F" Y - <prop key="login.do">loginController</prop>% c# r; M2 z! e/ V2 Z
- <prop key="toLogin.do">toLoginController</prop>
; p; o! z5 A( r4 d7 y; E5 A- g f - </props>
( l' r# v; G9 c/ m! H u - </property>4 c) D6 b( y$ R, e! H# }7 m$ E ^
- </bean>
# P* \3 k- z9 r! L - <!-- 定义视图解析器,根据ModelAndView信息定位视图组件 -->
+ `1 c0 Q1 O8 b - <bean id="viewResolver" & E; \# ?( G; S# p( K: i
- class="org.springframework.web.servlet.view.InternalResourceViewResolver">3 T/ P: J* C0 C
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
7 `6 T- n. r) V" i) R4 O6 q4 q8 H - <!-- 配置视图后缀 -->
$ n8 ] g7 Z- X - <property name="suffix" value=".jsp"></property> n/ V9 d2 O7 e$ d
- <!-- 配置视图前缀 -->
1 [2 y# k5 j* L3 a2 C - <property name="prefix" value="WEB-INF/jsp/"></property>1 k: r; C2 S5 v9 @, [6 |; z
- </bean>5 |0 K# e5 d& f, o2 A: D% i
- <!-- 定义Controller组件,等价于原来的Action -->
$ o0 O" l: b0 w9 e2 k - <bean id="welcomeController" scope="prototype" class="itstyle.action.WelcomeController"></bean>
R' U5 ]! Q% x - <bean id="loginController" scope="prototype" class="itstyle.action.LoginController"> 9 P' W$ w( W. Z1 ?. |
- <property name="commandClass"
! m# H, J5 t; q& p K8 `1 `/ H - value="itstyle.entity.User">
0 J7 S$ z7 o1 |8 X* w - </property>% h$ U. Q& f; o1 j$ o
- </bean>2 t) z3 e) a" T$ L: b q
- <bean id="toLoginController" scope="prototype" class="itstyle.action.ToLoginController"></bean>
8 u! K, e4 J: c+ T7 ?, Y3 x4 s - </beans>
复制代码 项目测试通过 包含所有的jar包和配置文件 导入即可。$ A* s8 ]- k: }- l8 ~& b
8 W' |4 q1 H/ `$ z& i. t
|