尝试按照xiaxin的文档来写一个使用了spring MVC的登陆。
包含在文档 http://www.xiaxin.net/Spring_Dev_Guide.rar中。
1。环境
Tomcat5.0以上。因为该示例程序使用了JSP Standard Tag Library (JSTL),可我一直用的是Tomcat4,郁闷。
2。jar包
spring.jar
commons-logging.jar
jstl.jar 从spring-framework目录/lib/j2ee下获得
standard.jar 从spring-framework目录/lib/jakarta-taglibs下获得(好像这个不需要,没装Tomcat5,没试验)
3。配置web.xml
4。配置Config.xml
⑴Resolver设定
Resolver将把输出结果与输出界面相融合,为表现层提供呈现资源。
⑵ View Resolver的viewClass参数
这里我们使用JSP页面作为输出,因此,设定为:
org.springframework.web.servlet.view.JstlView
其余可选的viewClass还有:
org.springframework.web.servlet.view.freemarker.FreeMarker
View(用于基于FreeMarker模板的表现层实现)
org.springframework.web.servlet.view.velocity.VelocityView
(用于基于velocity模板的表现层实现)
等。
⑶⑷ View Resolver的prefix和suffix参数
指定了表现层资源的前缀和后缀,运行时,Spring 将为指定的表现层资源自动追加前缀和后缀,以形成一个完整的资源路径。另参见⑻
⑸ “请求/处理单元”关系映射
可以看到,这里我们将“/login.do”请求映射到处理单元LoginAction。
<props>节点下可以有多个映射关系存在,目前我们只定义了一个。
⑹ LoginAction定义
这里定义了逻辑处理单元LoginAction 的具体实现,这里,LoginAction 的实现类为com.maxway.action.LoginAction。
⑺ LoginAction的请求数据对象
commandClass 参数源于LoginAction 的基类BaseCommandController,BaseCommandControlle 包含了请求数据封装和验证方法( BaseCommandController.bindAndValidate ) , 它将根据传入的HttpServletRequest构造请求数据对象。
⑻ 返回视图定义
对于这里的LoginAction 而言,有两种返回结果,即登录失败时返回错误界面,登录成功时进入系统主界面。对应我们配置了fail_view、success_view两个自定义参数。参数值将由Resolver进行处理,为其加上前缀后缀,如对于fail_view而言,实际的视图路径为/WEB-INF/view/loginfail.jsp。之后,Resolver 会将LoginAction的返回数据与视图相融合,返回最终的显示界面。
PS:
1。原文<value>org.springframework.web.servlet.view.JstlView</value>出分了3行写,但我在Tomcat4下运行时好像连前后的空格都一起识别了,导致找不到这个类,不能正常初始化,改为紧凑格式就没事了。
2。
<property name="commandClass">
<value>com.maxway.action.LoginInfo</value>
</property>
这里相当于Struts中的Formbean,不过不需要继承任何东西,非常简单的get/set就可以了,很不错。
5。写逻辑处理单元
本例中就是验证单元了。
1。继承org.springframework.web.servlet.mvc.SimpleFormController
需要重载onSubmit,相当于Struts的execute
有两种方式
protected ModelAndView onSubmit(Object cmd,BindException ex)
或
protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,Object cmd,BindException ex)
后者优先级高,如果同时存在则执行后者。
Dispatcher从HttpServletRequestDispatcher,将对传入的HttpServletRequest进行封装,形成请求数据对象,即传入的object。
2。返回处理结果也有两种方式:
1、返回一个ModelAndView对象
public ModelAndView(String viewname)
返回界面无需通过结果数据集进行填充。
public ModelAndView(String viewname, Map model)
返回界面由指定的结果数据集加以填充。可以看到,结果数据集采用了Map接口实现的数据类型。其中包含了返回结果中的各个数据单元。关于结果数据集在界面中的填充操作,可参见下面关于返回界面的描述。
上面这两个版本的构造子中,通过viewname指定了表示层资源。
另外,我们也可以通过传递View对象指定表示层资源。
public ModelAndView(View view)
public ModelAndView(View view, Map model)
2、在带有HttpServletRequest参数的onSubmit方法实现中,通
过HttpServletRequest/HttpServletResponse完成forward/redirect功
能,这两种途径可以达到同样的效果。
6。页面显示
可以直接使用 ModelAndView中的Map
附:UML图
![](http://blog.csdn.net/images/blog_csdn_net/maxway/100940/r_Spring_MVC_UML图.JPG)
================================
spring有一个自带的MVC教程,step by step,由简单到复杂,好像很不错。
spring有个好处就是,spring由多个模块组成,我们可以只使用其中一部分功能,spring也提供了几中jar包的格式,spring.jar是包含所有spring功能的包,还有其他的各模块的单独的包。
其实spring的mvc和struts还是比较相似的,毕竟MVC也就是这么回事,但某写方面spring的mvc框架做的还是比Struts的要好一些,比如类似formbean的功能。spring没有自己的taglib库,不过看起来jstl这个taglib也比较好用的样子。
spring的mvc只是其众多功能的一小部分。
本文很多内容是从xiaxin的文档中摘下来的,勉强算是笔记吧。
包含在文档 http://www.xiaxin.net/Spring_Dev_Guide.rar中。
1。环境
Tomcat5.0以上。因为该示例程序使用了JSP Standard Tag Library (JSTL),可我一直用的是Tomcat4,郁闷。
2。jar包
spring.jar
commons-logging.jar
jstl.jar 从spring-framework目录/lib/j2ee下获得
standard.jar 从spring-framework目录/lib/jakarta-taglibs下获得(好像这个不需要,没装Tomcat5,没试验)
3。配置web.xml
<servlet>DispatcherServlet根据Config.xml来调度,将请求分发给各个逻辑处理单元,相当于Struts中的ActionServlet。
<servlet-name>Dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/Config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
4。配置Config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>Config.xml项目说明
<!--Definition of View Resolver -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
<property name="prefix">
<value>/WEB-INF/view/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<!--Request Mapping -->
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/login.do">LoginAction</prop>
</props>
</property>
</bean>
<!---Action Definition-->
<bean id="LoginAction"
class="com.maxway.action.LoginAction">
<property name="commandClass">
<value>com.maxway.action.LoginInfo</value>
</property>
<property name="fail_view">
<value>loginfail</value>
</property>
<property name="success_view">
<value>main</value>
</property>
</bean>
</beans>
⑴Resolver设定
Resolver将把输出结果与输出界面相融合,为表现层提供呈现资源。
⑵ View Resolver的viewClass参数
这里我们使用JSP页面作为输出,因此,设定为:
org.springframework.web.servlet.view.JstlView
其余可选的viewClass还有:
org.springframework.web.servlet.view.freemarker.FreeMarker
View(用于基于FreeMarker模板的表现层实现)
org.springframework.web.servlet.view.velocity.VelocityView
(用于基于velocity模板的表现层实现)
等。
⑶⑷ View Resolver的prefix和suffix参数
指定了表现层资源的前缀和后缀,运行时,Spring 将为指定的表现层资源自动追加前缀和后缀,以形成一个完整的资源路径。另参见⑻
⑸ “请求/处理单元”关系映射
可以看到,这里我们将“/login.do”请求映射到处理单元LoginAction。
<props>节点下可以有多个映射关系存在,目前我们只定义了一个。
⑹ LoginAction定义
这里定义了逻辑处理单元LoginAction 的具体实现,这里,LoginAction 的实现类为com.maxway.action.LoginAction。
⑺ LoginAction的请求数据对象
commandClass 参数源于LoginAction 的基类BaseCommandController,BaseCommandControlle 包含了请求数据封装和验证方法( BaseCommandController.bindAndValidate ) , 它将根据传入的HttpServletRequest构造请求数据对象。
⑻ 返回视图定义
对于这里的LoginAction 而言,有两种返回结果,即登录失败时返回错误界面,登录成功时进入系统主界面。对应我们配置了fail_view、success_view两个自定义参数。参数值将由Resolver进行处理,为其加上前缀后缀,如对于fail_view而言,实际的视图路径为/WEB-INF/view/loginfail.jsp。之后,Resolver 会将LoginAction的返回数据与视图相融合,返回最终的显示界面。
PS:
1。原文<value>org.springframework.web.servlet.view.JstlView</value>出分了3行写,但我在Tomcat4下运行时好像连前后的空格都一起识别了,导致找不到这个类,不能正常初始化,改为紧凑格式就没事了。
2。
<property name="commandClass">
<value>com.maxway.action.LoginInfo</value>
</property>
这里相当于Struts中的Formbean,不过不需要继承任何东西,非常简单的get/set就可以了,很不错。
5。写逻辑处理单元
本例中就是验证单元了。
1。继承org.springframework.web.servlet.mvc.SimpleFormController
需要重载onSubmit,相当于Struts的execute
有两种方式
protected ModelAndView onSubmit(Object cmd,BindException ex)
或
protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,Object cmd,BindException ex)
后者优先级高,如果同时存在则执行后者。
Dispatcher从HttpServletRequestDispatcher,将对传入的HttpServletRequest进行封装,形成请求数据对象,即传入的object。
2。返回处理结果也有两种方式:
1、返回一个ModelAndView对象
public ModelAndView(String viewname)
返回界面无需通过结果数据集进行填充。
public ModelAndView(String viewname, Map model)
返回界面由指定的结果数据集加以填充。可以看到,结果数据集采用了Map接口实现的数据类型。其中包含了返回结果中的各个数据单元。关于结果数据集在界面中的填充操作,可参见下面关于返回界面的描述。
上面这两个版本的构造子中,通过viewname指定了表示层资源。
另外,我们也可以通过传递View对象指定表示层资源。
public ModelAndView(View view)
public ModelAndView(View view, Map model)
2、在带有HttpServletRequest参数的onSubmit方法实现中,通
过HttpServletRequest/HttpServletResponse完成forward/redirect功
能,这两种途径可以达到同样的效果。
6。页面显示
可以直接使用 ModelAndView中的Map
附:UML图
================================
spring有一个自带的MVC教程,step by step,由简单到复杂,好像很不错。
spring有个好处就是,spring由多个模块组成,我们可以只使用其中一部分功能,spring也提供了几中jar包的格式,spring.jar是包含所有spring功能的包,还有其他的各模块的单独的包。
其实spring的mvc和struts还是比较相似的,毕竟MVC也就是这么回事,但某写方面spring的mvc框架做的还是比Struts的要好一些,比如类似formbean的功能。spring没有自己的taglib库,不过看起来jstl这个taglib也比较好用的样子。
spring的mvc只是其众多功能的一小部分。
本文很多内容是从xiaxin的文档中摘下来的,勉强算是笔记吧。