Spring MVC笔记

尝试按照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的文档中摘下来的,勉强算是笔记吧。
阅读更多
个人分类: Struts等框架学习
想对作者说点什么? 我来说一句

spring MVC笔记

2018年04月12日 757KB 下载

笔记-传智播客springMVC公开课

2018年01月28日 982KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭