Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11751
  • 博文数量: 1
  • 博客积分: 26
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 14:10
文章分类
文章存档

2012年(1)

我的朋友
最近访客

分类:

2012-01-04 14:20:37

原文地址:Spring MVC开发流程实例 作者:xueliangfei

 
1  搭建Spring开发环境
2  Spring配置web.xml  启用Spring的请求接收器DispatcherServlet
  1. <web-app>
  2.    <servlet>
  3.       <servlet-name>Dispatcher</servlet-name>
  4.       <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>
  5.       <init-param>
  6.        <param-name>contextConfigLocation</param-name>
  7.        <param-value>/WEB-INF/applicationContext.xml</param-value>
  8.       </init-param>
  9.       <load-on-startup>1</load-on-startup>
  10.    </servlet>
  11.    <servlet-mapping>
  12.       <servlet-name>Dispatcher</servlet-name>
  13.       <url-pattern>*.do</url-pattern>
  14.    </servlet-mapping>
  15. </web-app>

在上面的配置中,所有以.do结尾的请求都会由名为Dispatcher的DispatcherServlet处理,该Servlet配置了初始化参数contextConfigLocation,设置IoC配置文件的名称为/WEB-INF/applicationContext.xml。如果不配置该参数,则它会读取默认的文件名/WEB-INF/Dispatcher-servlet.xml。通常习惯使用applicationContext.xml,也可以配置多个XML文件:

 

  1. <init-param>
  2. <param-name>contextConfigLocation</param-name>
  3. <param-value>/WEB-INF/applicationContext.xml,
  4. /WEB-INF/part2.xml</param-value>
  5. </init-param>

在基于Struts+Spring的联合应用中,接收请求的Servlet是由Struts的ActionServlet来配置的,因此此时就不能够使用DispatcherServlet来接收请求了。为了在此时能够加载Spring的Bean配置,可以在web.xml中配置一个监听器,并通过指定XML文件名,如下所示:

  1. <context-param>
  2. <param-name>contextConfigLocation</param-name>
  3. <param-value>/WEB-INF/applicationContext.xml</param-value>
  4. </context-param>
  5. <listener>
  6. <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
  7. </listener>

这样在Struts Action中可以按照下面的方式访问:

 

  1. WebApplicationContext wac=WebApplicationContextUtils.getWebApplicationContext(servletContext);
  2. UserDao udao=(UserDao)was.getBean("userdao");

 

 
3  编写输入表单页面input.jsp
含有表单的JSP页面  页面中含有多个HTML表单 
  1. <form action="test.do" method="post">
  2. <input type="text" name="str1">
  3. <input type="text" name="str2">
  4. <input type="submit">
  5. </form>
 

该表单中包含了两个输入框,名称分别为"str1"和"str2",表单元素

的提交地址为Spring的响应地址,以".do"为扩展名。

4  配置处理器映射和处理器

applicationContext.xml的配置

  1. <!--定义映射-->
  2. <bean id="testMapping"
  3.     class="org.springframework.web.servlet.handler. SimpleUrlHandlerMapping">
  4.      <property name="mappings">
  5.       <props>
  6.         <prop key="/test.do">testAction</prop>
  7.       </props>
  8.      </property>
  9. </bean>
  10. <!---定义Action-->
  11. <bean id="testAction" class="com.demo.spring.actions.TestAction">
  12.      <property name="commandClass">
  13.       <value>com.demo.spring.forms.TestForm</value>
  14.       </property>
  15.         <!--指定失败要返回的页面-->
  16.         <property name="formView">
  17.            <value>input</value> </property>
  18.             <!--指定成功要返回的页面-->
  19.          <property name="successView">
  20.            <value>success</value>
  21.          </property>
  22. </bean>

这里配置了两个元素。

Mapping配置:表示可以接收input.jsp页面中表单的请求地址"/test.do"的请求,该请求交由testAction来处理。

Controller配置:配置了一个处理器元素testAction,负责处理"/test.do"的请求。该处理器配置了一个commandClass属性,指定了输入的表单类为com.demo.spring.forms.TestForm。

并指定了成功返回页面和失败返回页面,名称分别为successView和formView,该名称为TestAction类中的属性,这里即是利用了IoC来为TestAction注入了两个属性。

这两个返回对象指向的页面分别为success.jsp和input.jsp,在这里不需要指定JSP的扩展名。

5  编写Form类 com.demo.struts.forms.TestForm.java
 

当用户单击该页面的"提交"按钮时,会由DispatcherServlet接收该请求,DispatcherServlet会依次做如下的工作:

(1)根据applicationContext.xml中mappgin属性为"/test.do"的Mapping配置找到当前使用的表单类为com.demo.struts.forms.TestForm。

(2)从Request对象中取得input.jsp页面中输入的表单参数,分别与类com.demo.spring.forms. TestForm中的属性相对应。input.jsp中有几个表单参数,该类中就必须有几个对应的同名属性

  1. package com.demo.spring.forms;

  2. public class TestForm {
  3.     
  4.     private String str1;

  5.     private String str2;
  6.     
  7.     public String getStr1() {
  8.         return str1;
  9.     }
  10.     
  11.     public void setStr1(String str1) {
  12.         this.str1 = str1;
  13.     }
  14.     
  15.     public String getStr2() {
  16.         return str2;
  17.     }

  18.     public void setStr2(String str2) {
  19.         this.str2 = str2;
  20.     }
  21. }

3)然后传递给指定的Controller处理类com.demo.spring.actions.TestAction来处理。

6   编写处理器类 com.demo.spring.actions.TestAction.java

TestAcion类接收到处理任务后,默认使用onSubmit()函数来进行处理。在编写处理函数时,需要依次编写以下内容。

(1)该类继承自SimpleFormController,它提供了请求的入口函数onSubmit()、注入变量successView和formView,以及这两个变量的getter/setter函数。

(2)在函数中,首先通过强制类型转换,取得用户的表单对象testForm。

(3)然后实现业务逻辑。如果用户的输入参数str1和str2都为"admin",则将这两个变量保存在Session中,调用父类的getSuccessView()返回ModelAndView对象。如果两个参数不是"admin",则取得错误对象model,将testForm保存在modle中,然后返回一个ModelAndView对象,其中第一个参数为getFormView(),表示返回input.jsp页面,第二个参数为model,表示传递错误映射列表。

 

  1. package com.demo.spring.actions;
  2. import java.util.Map;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. import org.springframework.validation.BindException;
  6. import org.springframework.web.servlet.ModelAndView;
  7. import org.springframework.web.servlet.mvc.SimpleFormController;
  8. import com.demo.spring.forms.TestForm;
  9. public class TestAction extends SimpleFormController
  10. {
  11.    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception
  12.         {
  13.              TestForm testForm = (TestForm) command;
  14.                if (testForm.getStr1().equals("admin") && testForm.getStr2().equals("admin"))
  15.                   {
  16.                          request.getSession().setAttribute("str1", testForm.getStr1());
  17.                          request.getSession().setAttribute("str2", testForm.getStr2());
  18.                          return new ModelAndView(getSuccessView());
  19.                   } else
  20.                     {
  21.                          Map modle = errors.getModel();
  22.                          modle.put("testForm", testForm);
  23.                          return new ModelAndView(getFormView(), modle);
  24.                     }
  25.           }
  26. }

 

7  配置JSP视图解析器

在TestAction中返回了ModelAndView后,会交给DispatcherServlet查找对应的页面,以上返回的页面为success.jsp和input.jsp,扩展名均为.jsp。为了能够解释JSP文件,我们需要在applicationContext.xml中配置一个视图解析器

 applicationContext.xml配置

 

  1. <!--定义视图-->
  2. <bean id="viewResolver"
  3.     class="org.springframework.web.servlet.view. InternalResourceViewResolver">
  4.     <property name="viewClass">
  5.     <value> org.springframework.web.servlet.view.InternalResourceView </value>
  6.     </property>
  7.     <!--JSP都放在/目录下-->
  8.     <property name="prefix">
  9.     <value>/</value>
  10.     </property>
  11.     <!--JSP页面的后缀都是.jsp-->
  12.      <property name="suffix">
  13.      <value>.jsp</value>
  14.      </property>
  15. </bean>

org.springframework.web.servlet.view.InternalResourceViewResolver,并指定了3个属性。

viewClass:DispatcherServlet处理视图显示的类View。

prefix:页面地址的前缀,通配符"/"表示处理所有的路径下的JSP页面。

suffix:页面地址的后缀,".jsp"表示页面的扩展名。

8  编写返回JSP页面

在处理完成后,会返回到success.jsp或input.jsp页面,在该页面中显示处理的结果信息。

success.jsp页面负责显示Session中保存的两个变量。

  1. <table width="300" border="1">
  2. <tr>
  3. <td>str1=<%=(String) session.getAttribute("str1")%></td>
  4. </tr>
  5. <tr>
  6. <td>str2=<%=(String) session.getAttribute("str2")%></td>
  7. </tr>
  8. <tr> <td><a href="input.jsp">[Back]</a></td>
  9. </tr>
  10. </table>

上面的6步就是一次Spring请求的开发过程。在图34-5中,还有一个资源文件ApplicationResources,JSP文件和Controller类都会与该文件相关联,关联的内容分别如下。

JSP页面:使用Spring Bean标签读取资源文件进行页面显示的国际化,使用Spring HTML标签显示表单数据,显示Controller类中保存的错误信息。

Controller类:在逻辑验证时,保存错误信息,指向资源文件中的标签。

 

阅读(1640) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~