Struts层的功能开发 需要分4个步骤
1 开发Struts核心流程代码 包括AddressForm.java AddressAction.java及配置
2 开发JSP页面原型 包括数据列表页面address.jsp 增加页面address_add.jsp 修改页面address_edit.jsp并进行页面文字的国际化和样式修饰
3 增加表单效验功能 主要修改增加页面address_add.jsp 修改页面address_edit.jsp 表单类AddressForm.java
4 调用AddressDAO.java操作数据库 修改AddressAction.java调用AdressDAO.java中的函数 进行数据库的关联
Struts开发第一步
开发Struts核心流程代码
[1]新建并配置表单类AddressForm.java:配置元素 并开发AdressForm.java表单类
在增加或修改一个联系人对象时 需要一个表单来保存各个字段的数据 因此我们需要新建一个表单类AddressForm.java 该类中定义了与联系人表Address中的字段相对象的变量 并为每一个变量添加getter/setter函数
然后再struts-config.xml中添加一个 命名为addressForm 指向上面新建的表单类com.demo.struts.forms.AddressForm.java
- <form-bean name="addressForm"
- type="com.demo.struts.forms.LoginForm">
- </form-bean>
[2]在struts-config.xml中添加请求代理:配置
元素 并委托给Spring进行管理
对于通讯录模块 我们添加如下三个映射请求配置
列表页请求 address.do
新增请求 address_add.do
修改请求 address_edit.do
其中 type属性为org.springframework.web.struts.DelegatingActionProxy 表示将Struts的Action请求委托给Spring进行管理
- <action path="/address" parameter="method" name="pageForm" scope="request"
- type="org.springframework.web.struts.DelegatingActionProxy">
- <forward name="list" path="/address.jsp" />
- </action>
- <action path="/address_add" parameter="method" name="addressForm" scope="request"
- type="org.springframework.web.struts.DelegatingActionProxy"
- input="/address_add.jsp">
- <forward name="list" path="/address.jsp" />
- <forward name="add" path="/address_add.jsp" />
- </action>
- <action path="/address_edit" parameter="method" name="addressForm" scope="request"
- type="org.springframework.web.struts.DelegatingActionProxy"
- input="/address_edit.jsp">
- <forward name="list" path="/address.jsp" />
- <forward name="edit" path="/address_edit.jsp" />
- </action>
都有一个属性parameter 值为method 表示在Action类中 将使用method指向的参数作为执行函数的入口
都包含了子元素 用以指定可能的返回页面地址 这些地址将会在AddressAction.java类被引用
address_add.do address_edit.do的那么属性为上卖弄配置的表单组件addressForm 表示这两个请求需要使用该表单组件保存页面数据
[3]在applicationContext.xml中添加请求代理 配置与
相匹配的元素 接收Struts的委托
上一节中配置的3个
元素使用了org.springframework.web.struts.DelegatingActionProxy来委托给Spring进行管理 因此我们需要在applicationContext.xml中添加请求的代理配置组件 与的path属性想对应 需要添加如下3个请求代理
列表页请求 address.do
新增请求 address_add.do
修改请求 address_edit.do
其中的class书香均指向com.demo.struts.actions.AddressAction 表示由该类来处理请求 并为每一个注入addressDAO对象 该对象在Hibernate层开发中已经穿件并进行了配置
- </bean>
- <bean name="/address"
- class="com.demo.struts.actions.AddressAction">
- <property name="addressDAO">
- <ref local="addressDAO" />
- </property>
- </bean>
- <bean name="/address_add"
- class="com.demo.struts.actions.AddressAction">
- <property name="addressDAO">
- <ref local="addressDAO" />
- </property>
- </bean>
- <bean name="/address_edit"
- class="com.demo.struts.actions.AddressAction">
- <property name="addressDAO">
- <ref local="addressDAO" />
- </property>
- </bean>
[4]在applicationContext.xml中添加日志拦截 为请求地址添加日志拦截器
在Spring的applicationContext.xml中我们曾配置了日志拦截器 器拦截的目标是通过请求地址进行匹配拦截 现在新增加了3个关于通讯录模块的请求地址 因此我们需要对这3个地址的请求进行拦截 我们只需要在loggingAutoProxy组件中添加三行地址即可
- <!-- 配置拦截器 -->
- <bean name="logger" class="com.demo.spring.aop.LoggingInterceptor" />
- <!-- 配置拦截器代理 -->
- <bean name="loggingAutoProxy"
- class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
- <property name="beanNames">
- <list>
- <value>/login</value>
- <value>/register</value>
- <value>/address</value>
- <value>/address_add</value>
- <value>/address_edit</value>
- </list>
- </property>
- <property name="interceptorNames">
- <list>
- <value>logger</value>
- </list>
- </property>
- </bean>
[5]开发AdressAction.java原型功能:设计AdressAction.java的请求处理函数 这里的函数现在还只是空架子 只能够进行页面的流转 没有实际的功能 目的是为了在下一节开发完JSP页面后能够进行页面的流转
现在已经在struts-config.xml中配置3个请求地址 并子啊applicationContext.xml中配置了请求代理 这里的请求会通过class属性找到Action类com.demo.struts.actions.AddressAction 该类才是真正处理用户请求的地方
新建类com.demo.struts.actions.AddressAction.java 该类继承自Struts的鸡肋DispatcherAction 并为该类添加两个变量 AddressDAO类型变量addressDAO 日志记录器变量log
该类继承自DispatcherAction 而且在struts-config.xml的
配置中都指定了属性parameter=“method” 因此我们将在AddressAction.java 类中使用method指定的参数名作为函数的入口 不在限定于execute() 函数了 当然 method的参数值需要在后面的JSP页面中指定 我们先预设如下几种页面的请求函数 list add insert edit update delete
我们先编写这6个函数的代码 实现简单的功能 只是查找
中子元素定义的转发别名 返回ActionForword的对象即可 这只是最基础的流转代码 我们称之为原型
- package com.demo.struts.actions;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.log4j.Logger;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.action.ActionForward;
- import org.apache.struts.action.ActionMapping;
- import org.apache.struts.actions.DispatchAction;
- import com.demo.hibernate.dao.AddressDAO;
- import com.demo.struts.util.Constants;
- public class AddressAction extends DispatchAction {
- protected AddressDAO addressDAO;
- Logger log = Logger.getLogger(this.getClass());
- public AddressDAO getAddressDAO() {
- return addressDAO;
- }
- public void setAddressDAO(AddressDAO addressDAO) {
- this.addressDAO = addressDAO;
- }
-
- public ActionForward list(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- ActionForward forward = mapping.findForward(Constants.LIST_KEY);
- return (forward);
- }
- public ActionForward add(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- ActionForward forward = mapping.findForward(Constants.ADD_KEY);
- return (forward);
- }
- public ActionForward insert(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- ActionForward forword = mapping.findForward(Constants.ADD_KEY);
- return (forword);
- }
- public ActionForward edit(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- return mapping.findForward(Constants.EDIT_KEY);
- }
- public ActionForward update(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- ActionForward forward = mapping.findForward(Constants.LIST_KEY);
- return (forward);
- }
- public ActionForward delete(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- return mapping.findForward(Constants.LIST_KEY);
- }
- }
在常量类Constants.java中添加Key值
- package com.demo.struts.util;
- public class Constants {
- public final static String USERNAME_KEY = "username";
- public final static String SUCCESS_KEY = "success";
- public final static String FAILURE_KEY = "failure";
- public final static String LOGOUT_KEY = "logout";
- public final static String LIST_KEY = "list";
- public final static String ADD_KEY = "add";
- public final static String EDIT_KEY = "edit";
- }
阅读(2454) | 评论(0) | 转发(0) |