Spring MVC笔记

原创 2005年02月27日 23:03:00
尝试按照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
 <servlet>
  <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>
DispatcherServlet根据Config.xml来调度,将请求分发给各个逻辑处理单元,相当于Struts中的ActionServlet。
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>
 <!--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>
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图

================================
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的文档中摘下来的,勉强算是笔记吧。

相关文章推荐

spring mvc学习笔记

  • 2015年09月17日 15:40
  • 30KB
  • 下载

【实践笔记】Spring MVC中Restful API使用 Swagger2 构建

【实践笔记】Spring MVC中Restful API使用 Swagger2 构建
  • Zhaky
  • Zhaky
  • 2017年03月22日 11:37
  • 2830

Spring MVC 学习笔记(一)

(* 笔记内容均来自 尚硅谷 佟刚老师的视频,例子是在学习中照着敲的) 内容概要 • 1.SpringMVC概述 • 2.SpringMVC的HelloWorld • 3.使用@RequestMapp...

Spring MVC 学习笔记11 —— 后端返回json格式数据

Spring MVC 返回json数据
  • sonictl
  • sonictl
  • 2014年11月25日 11:21
  • 1746

Spring MVC 学习笔记 json格式的输入和输出

Spring mvc处理json需要使用jackson的类库,因此为支持json格式的输入输出需要先修改pom.xml增加jackson包的引用 json --> ...

Spring MVC springmvc学习笔记--json--返回json的日期格式问题

来自: http://www.cnblogs.com/woshimrf/p/5189435.html(一)输出json数据 springmvc中使用jackson-mapper-asl即可进行jso...

【笔记】Spring MVC学习指南(三)SpringMVC介绍

第三章,主要使用SpringMVC来实现第二章的小程序,进而通过对比体现SpringMVC的好处 先来看目录结构,可以看出原先自定义的Controller接口已经删除,取而代之的会是Spring自...

Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录
  • sonictl
  • sonictl
  • 2014年11月20日 14:52
  • 827

Java 学习笔记11:Spring MVC 中的基于注解的 Controller

终于来到了基于注解的 Spring MVC 了。之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响应请求。实...
  • initphp
  • initphp
  • 2012年11月28日 10:45
  • 2470

【笔记】Spring MVC学习指南(十一)上传文件

第十一章,上传文件 我就不说以前一直觉得上传和下载是很神奇又厉害的技术了。。。 Add Product Form @import url(""); A...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring MVC笔记
举报原因:
原因补充:

(最多只允许输入30个字)