, R/ [- I, y% X# i; L
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处理请求的流程:
B0 S5 \) B7 l/ _! P! F
四:项目案例 web.xml配置: - <?xml version="1.0" encoding="UTF-8"?>6 b. M4 t6 a" _1 K! |$ M
- <web-app version="2.4" , @5 q( U4 _ C4 i: \ e' V/ k6 }
- xmlns="http://java.sun.com/xml/ns/j2ee"
! [$ h2 U- T6 j8 Z2 r+ Q' s - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' z4 U* Z7 P8 e7 T* `% H3 r
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
1 V0 A1 d( D- L - http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
5 Q, c, [2 N# l' S6 e - <servlet>8 E1 f( f1 M7 s: @- ^! b: e7 Z8 H
- <servlet-name>springmvc</servlet-name>
, I: N Q7 z! T0 Z% C4 | - <servlet-class>
( c. ~8 ?8 J2 u! t; g6 S - org.springframework.web.servlet.DispatcherServlet
6 V0 e+ j. o: |5 R% P+ h - </servlet-class>
4 r! R' r, v5 _9 p - <init-param>, R9 c) n- a& {* h4 V: G6 B( E4 X
- <param-name>contextConfigLocation</param-name>/ `% e4 d$ u+ O i
- <param-value>classpath:applicationContext.xml</param-value>$ F: s* o' l7 f5 I" {: R
- </init-param>% ]/ }! r2 T9 e- l1 }
- <load-on-startup>1</load-on-startup># T2 }8 e; I0 ?2 V+ _4 Y7 I
- </servlet> R8 b; I# u& |/ f. L
- <servlet-mapping>% {5 a1 k L! B* f
- <servlet-name>springmvc</servlet-name>. h( K! |8 ?6 u
- <url-pattern>*.do</url-pattern>
4 y1 ?! G9 X. v - </servlet-mapping>; g0 l" R7 r, Y# c; B. U9 q9 e
- <filter>
, I+ r! T. C, f( _; X0 S- { - <filter-name>CharacterEncodingFilter</filter-name>9 B" a' ?4 I; Y: W" B6 ]
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>1 Q2 L1 h* w L
- <init-param>
b* _* k' H# [# J* r7 k - <param-name>encoding</param-name>7 o' d, L! h' F- E1 @- b
- <param-value>utf-8</param-value>
! s' d4 u1 n( h+ B- C: e2 X: _ - </init-param>' q+ h7 B" I. A0 j1 |
- </filter>
; B8 ~9 }4 f$ s- q - <filter-mapping>
' W# y/ q- g5 |) P - <filter-name>CharacterEncodingFilter</filter-name> l* l* z: t! ]- J
- <url-pattern>/*</url-pattern>' [# b1 V1 N) L
- </filter-mapping>
3 \+ F( h% ^/ } - <welcome-file-list>
/ } X' ~( C+ e. `7 ]: k* U - <welcome-file>index.jsp</welcome-file>
& v7 ~) F {, w9 C - </welcome-file-list>
g1 D) W: {+ I% q% ?0 A; L - </web-app>
7 A: W0 H7 M( {. w" `+ y/ w
复制代码 applicationContext.xml配置:- <?xml version="1.0" encoding="UTF-8"?>2 ]' \9 K! S! W* O
- <beans xmlns="http://www.springframework.org/schema/beans"
* A7 w' R/ U& o6 m' ? E! N4 x - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- o" q1 C/ M0 t3 W - xmlns:tx="http://www.springframework.org/schema/tx"
' h( ^8 o( Q' a2 G7 h - xmlns:aop="http://www.springframework.org/schema/aop"4 \/ M1 B# w5 C/ h1 w4 g2 r
- xmlns:context="http://www.springframework.org/schema/context"
$ f0 T: `9 Z7 F# n+ b - xmlns:jee="http://www.springframework.org/schema/jee"
( x6 O# P( [% M. o - xsi:schemaLocation="
. A2 L2 R% I* y0 x# `; t1 T5 T' B - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd2 M/ b$ ?3 j; k* X1 A5 i: t
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- p7 n" n5 m+ ~/ k: Q$ Z - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd! D+ u1 P4 B1 b4 P
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd. B+ V; a* k3 b$ x
- http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
h& f+ W5 l8 D/ l - <!-- 定义映射处理器,指定请求和controller对应关系 --># w' B! v; [. W9 {* p
- <bean id="handlerMapping"
. r$ ?# T, o2 K - class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">0 @* c6 [4 T0 s& T. ^
- <property name="mappings">0 { B8 N& ^' [. a
- <props>
& l* \$ \: f, c9 a7 \$ G - <prop key="welcome.do">welcomeController</prop>
# Q* V+ F7 a$ E4 R - <prop key="login.do">loginController</prop>
: @1 N5 X& [. p - <prop key="toLogin.do">toLoginController</prop>' D% o# ?% t; H# e
- </props>
9 y8 u' D1 f( ?- }: m, U, K - </property>1 z# j2 S6 m6 B! Q4 J
- </bean>2 I4 Q( F d; T9 k0 K, F0 T
- <!-- 定义视图解析器,根据ModelAndView信息定位视图组件 -->
; }4 r# G! O T* O1 i/ w$ H) A - <bean id="viewResolver" , n' [# I% x. T, s# S/ Z
- class="org.springframework.web.servlet.view.InternalResourceViewResolver">
8 o# S( y$ [/ w4 ` - <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
) v/ P. y: y' C, z - <!-- 配置视图后缀 --> g- r# @8 {9 O( K, G8 L
- <property name="suffix" value=".jsp"></property>5 [; z+ \+ B- ~6 M' {
- <!-- 配置视图前缀 -->
/ T A2 ~' |2 Y# }# ` - <property name="prefix" value="WEB-INF/jsp/"></property>
! a# K! }: q# t. z/ C: K1 }* ?- S - </bean>+ w: q F% T, O2 I* d
- <!-- 定义Controller组件,等价于原来的Action -->. }* ]0 a# h( C9 U: c
- <bean id="welcomeController" scope="prototype" class="itstyle.action.WelcomeController"></bean>6 x# d( ^' G; j" p s
- <bean id="loginController" scope="prototype" class="itstyle.action.LoginController">
) o; N8 v" Y" X0 d0 x% O - <property name="commandClass" ' D4 X/ K. [( K3 H% x1 Z
- value="itstyle.entity.User">
# T# m1 p7 a, Z6 I- _8 I4 Z4 H3 S - </property>
* y1 F v* y5 k$ }1 Z+ |4 @# i - </bean>, { }$ |! g) g3 c$ F/ t1 @6 P
- <bean id="toLoginController" scope="prototype" class="itstyle.action.ToLoginController"></bean>
/ \! v: b i: O) b5 g) p& e% d - </beans>
复制代码 项目测试通过 包含所有的jar包和配置文件 导入即可。$ g" z- J' b% R7 ]
) E' [# z: u( g3 G6 K! Z2 }
|