9 k7 V! h; O q1 N: \
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处理请求的流程:
! _. ]$ A) q Z! f5 m
四:项目案例 web.xml配置: - <?xml version="1.0" encoding="UTF-8"?>/ V( S/ m8 l* I/ A& t' R# h
- <web-app version="2.4"
$ C6 ~; @5 o6 ~0 N - xmlns="http://java.sun.com/xml/ns/j2ee" 7 I6 G+ _5 z# D. u$ L0 V1 e! y
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" # @& g, |+ D0 T* s+ J9 G( U
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee - ]1 r- ~9 z6 i7 h3 a& I% n% `
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
: o. q" D6 y( m - <servlet>
7 K+ u) w7 |; I2 Q8 D) K - <servlet-name>springmvc</servlet-name>! s1 Y* T0 U; q* |) w
- <servlet-class>2 X- J# ~! p m' c. P
- org.springframework.web.servlet.DispatcherServlet
7 _1 {' ]( }9 W1 Z - </servlet-class>
/ B! w8 ]- Z: B. y - <init-param>
y: x6 M8 Y% ]0 q% }& l - <param-name>contextConfigLocation</param-name>7 t5 }9 \ \% R% ~5 X; F, m
- <param-value>classpath:applicationContext.xml</param-value>& _' M4 R) D3 l' e0 w6 k* C
- </init-param>9 Z- ] \8 s2 h9 n2 H# A
- <load-on-startup>1</load-on-startup>2 t; J! a& s) `& o
- </servlet>9 W0 h, }4 A7 \8 i/ A0 k
- <servlet-mapping>
' V6 z, a% ~& l0 U7 s/ W - <servlet-name>springmvc</servlet-name>
. _7 u( J+ J7 ?) B/ ^& X - <url-pattern>*.do</url-pattern># ` j! v% l/ P$ _3 m
- </servlet-mapping>
7 E7 _0 |$ u8 @% H6 d* ?8 n6 W$ P - <filter>
; }& h* S7 P+ Y4 r - <filter-name>CharacterEncodingFilter</filter-name>" b* |7 l4 u$ c; S6 N& q! W
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>! c- C p4 x; g5 f! k, }
- <init-param>
* Y* j1 A6 J* ?+ o - <param-name>encoding</param-name>+ d- b; d2 C# u% w, E. k
- <param-value>utf-8</param-value>& {- `% _. i- H5 f
- </init-param>
7 ~* p4 _, {( x) H* o - </filter>. O5 r* a& s6 r7 |" W. n( R1 o
- <filter-mapping>% F' H- o/ `) _0 d
- <filter-name>CharacterEncodingFilter</filter-name>+ @; h& I8 n/ r- `/ m0 z' q5 a$ @
- <url-pattern>/*</url-pattern>8 d% k& n+ N3 r, ?8 p A
- </filter-mapping>
3 T- l# M" K' w- Y4 n5 P5 V" c - <welcome-file-list>
- `( D4 x4 W, |1 m3 E$ b' ] - <welcome-file>index.jsp</welcome-file>
, y( { U& t- a/ f% I8 R" d. g - </welcome-file-list>
6 z: i! Z& A/ s - </web-app>
( L6 c. G4 n4 ]# y7 G' ^
复制代码 applicationContext.xml配置:- <?xml version="1.0" encoding="UTF-8"?>' ~0 F" a2 {5 H1 [* ?+ q: [
- <beans xmlns="http://www.springframework.org/schema/beans"
$ X+ ^7 H/ L* w& t, U& h/ j0 o. { - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 I& {6 p+ S- @( b' l3 a/ U( ?" _ - xmlns:tx="http://www.springframework.org/schema/tx" 3 V; N3 p" [3 i, v( a9 N4 i2 m
- xmlns:aop="http://www.springframework.org/schema/aop"
# I# g/ a( g& V. a+ j3 l6 d Q$ f - xmlns:context="http://www.springframework.org/schema/context"
% H/ w6 a5 c }5 S* I G E - xmlns:jee="http://www.springframework.org/schema/jee"5 T) l1 R- [3 x# t& L
- xsi:schemaLocation="
) X+ @. Y, Z2 q" ~' V6 [) S - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
" P. M. ]4 z6 Q' t6 i - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
$ @4 Z( r( v u, p5 N0 B/ e: ?8 F - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
' J$ }9 U2 A& [: g7 j, o" [ - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd5 q/ e$ l$ i) s
- http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
0 B( k' j, E) H - <!-- 定义映射处理器,指定请求和controller对应关系 -->- d! F( O( G* Q3 N3 ^& B/ G& }
- <bean id="handlerMapping"
' a6 T" l2 f1 N! @ - class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">" M8 \; h0 H4 l, \' Z
- <property name="mappings">
) ^5 X. B8 V6 f% b- x# G9 P/ a - <props>) u' S' y8 p7 H+ Z' c" k
- <prop key="welcome.do">welcomeController</prop>
7 C3 P0 l! H/ ?2 k& A - <prop key="login.do">loginController</prop>7 L% k+ b0 p& @% v c8 K
- <prop key="toLogin.do">toLoginController</prop>
4 I! G2 [" k* w0 @" [1 J/ m% I - </props>
8 b( V$ V: Z7 d @; O( g" [/ ^ - </property>2 j: @0 c! k( y) U8 L- |
- </bean>
) F5 B8 i/ a+ v) S - <!-- 定义视图解析器,根据ModelAndView信息定位视图组件 -->
( a) C3 _2 H Q6 i8 D, H% y, m. z - <bean id="viewResolver"
6 o0 c1 {! j) U9 X1 s. { - class="org.springframework.web.servlet.view.InternalResourceViewResolver">) j8 ~- ]! B; F L* a5 A
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
[0 K+ f/ G( p V6 c- |+ ^ - <!-- 配置视图后缀 -->
; T8 j' S- Y% i0 [" H6 X4 K - <property name="suffix" value=".jsp"></property> F, k& [+ E7 U7 J5 Z* Q
- <!-- 配置视图前缀 --> , a# O# N' G; k i
- <property name="prefix" value="WEB-INF/jsp/"></property>
) H& {' F! i$ Z( m$ {2 L# _: o1 h - </bean>
4 M8 u; F/ t! c - <!-- 定义Controller组件,等价于原来的Action --> `* V$ a C" g- v$ X& v
- <bean id="welcomeController" scope="prototype" class="itstyle.action.WelcomeController"></bean>
2 c! S5 Z* a( c, C8 g) w - <bean id="loginController" scope="prototype" class="itstyle.action.LoginController"> - _3 S- b8 E1 Y- u# R" C
- <property name="commandClass"
( i( h" R$ b' T: _ - value="itstyle.entity.User">% d* y' u/ {+ B! ^
- </property>+ {6 q( Y4 T# v
- </bean>
( b; p9 f: E1 U* N& R3 G - <bean id="toLoginController" scope="prototype" class="itstyle.action.ToLoginController"></bean>: T" [; R$ u# [+ d4 ~+ N' w
- </beans>
复制代码 项目测试通过 包含所有的jar包和配置文件 导入即可。
8 \( {1 n1 L4 W& A0 c, H/ G( I# a
+ _* n0 r& z2 d: [7 {" |
|