1 搭建Spring开发环境
2 Spring配置web.xml 启用Spring的请求接收器DispatcherServlet
- <web-app>
- <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/applicationContext.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>Dispatcher</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- </web-app>
在上面的配置中,所有以.do结尾的请求都会由名为Dispatcher的DispatcherServlet处理,该Servlet配置了初始化参数contextConfigLocation,设置IoC配置文件的名称为/WEB-INF/applicationContext.xml。如果不配置该参数,则它会读取默认的文件名/WEB-INF/Dispatcher-servlet.xml。通常习惯使用applicationContext.xml,也可以配置多个XML文件:
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/applicationContext.xml,
- /WEB-INF/part2.xml</param-value>
- </init-param>
在基于Struts+Spring的联合应用中,接收请求的Servlet是由Struts的ActionServlet来配置的,因此此时就不能够使用DispatcherServlet来接收请求了。为了在此时能够加载Spring的Bean配置,可以在web.xml中配置一个监听器,并通过指定XML文件名,如下所示:
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/applicationContext.xml</param-value>
- </context-param>
- <listener>
- <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
- </listener>
这样在Struts Action中可以按照下面的方式访问:
- WebApplicationContext wac=WebApplicationContextUtils.getWebApplicationContext(servletContext);
- UserDao udao=(UserDao)was.getBean("userdao");
3 编写输入表单页面input.jsp
含有表单的JSP页面 页面中含有多个HTML表单
- <form action="test.do" method="post">
- <input type="text" name="str1">
- <input type="text" name="str2">
- <input type="submit">
- </form>
该表单中包含了两个输入框,名称分别为"str1"和"str2",表单元素
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中有几个表单参数,该类中就必须有几个对应的同名属性
- package com.demo.spring.forms;
- public class TestForm {
-
- private String str1;
- private String str2;
-
- public String getStr1() {
- return str1;
- }
-
- public void setStr1(String str1) {
- this.str1 = str1;
- }
-
- public String getStr2() {
- return str2;
- }
- public void setStr2(String str2) {
- this.str2 = str2;
- }
- }
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,表示传递错误映射列表。
- package com.demo.spring.actions;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.validation.BindException;
- import org.springframework.web.servlet.ModelAndView;
- import org.springframework.web.servlet.mvc.SimpleFormController;
- import com.demo.spring.forms.TestForm;
- public class TestAction extends SimpleFormController
- {
- protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception
- {
- TestForm testForm = (TestForm) command;
- if (testForm.getStr1().equals("admin") && testForm.getStr2().equals("admin"))
- {
- request.getSession().setAttribute("str1", testForm.getStr1());
- request.getSession().setAttribute("str2", testForm.getStr2());
- return new ModelAndView(getSuccessView());
- } else
- {
- Map modle = errors.getModel();
- modle.put("testForm", testForm);
- return new ModelAndView(getFormView(), modle);
- }
- }
- }
7 配置JSP视图解析器
在TestAction中返回了ModelAndView后,会交给DispatcherServlet查找对应的页面,以上返回的页面为success.jsp和input.jsp,扩展名均为.jsp。为了能够解释JSP文件,我们需要在applicationContext.xml中配置一个视图解析器
applicationContext.xml配置
- <!--定义视图-->
- <bean id="viewResolver"
- class="org.springframework.web.servlet.view. InternalResourceViewResolver">
- <property name="viewClass">
- <value> org.springframework.web.servlet.view.InternalResourceView </value>
- </property>
- <!--JSP都放在/目录下-->
- <property name="prefix">
- <value>/</value>
- </property>
- <!--JSP页面的后缀都是.jsp-->
- <property name="suffix">
- <value>.jsp</value>
- </property>
- </bean>
org.springframework.web.servlet.view.InternalResourceViewResolver,并指定了3个属性。
viewClass:DispatcherServlet处理视图显示的类View。
prefix:页面地址的前缀,通配符"/"表示处理所有的路径下的JSP页面。
suffix:页面地址的后缀,".jsp"表示页面的扩展名。
8 编写返回JSP页面
在处理完成后,会返回到success.jsp或input.jsp页面,在该页面中显示处理的结果信息。
success.jsp页面负责显示Session中保存的两个变量。
- <table width="300" border="1">
- <tr>
- <td>str1=<%=(String) session.getAttribute("str1")%></td>
- </tr>
- <tr>
- <td>str2=<%=(String) session.getAttribute("str2")%></td>
- </tr>
- <tr> <td><a href="input.jsp">[Back]</a></td>
- </tr>
- </table>
上面的6步就是一次Spring请求的开发过程。在图34-5中,还有一个资源文件ApplicationResources,JSP文件和Controller类都会与该文件相关联,关联的内容分别如下。
JSP页面:使用Spring Bean标签读取资源文件进行页面显示的国际化,使用Spring HTML标签显示表单数据,显示Controller类中保存的错误信息。
Controller类:在逻辑验证时,保存错误信息,指向资源文件中的标签。
阅读(25426) | 评论(5) | 转发(2) |