Struts中的DispatchAction

Struts中的DispatchAction类似于Struts2中的动态方法调用

下面请看示例代码

首先是web.xml文件

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>patternConfig.jsp</welcome-file> </welcome-file-list> </web-app>

然后是用于测试Struts的模式匹配的页面patternConfig.jsp

<%@ page language="java" pageEncoding="UTF-8"%> <h2>Struts的模式匹配</h2> <br/><br/> <input type="button" value="添加用户" οnclick="javascript:window.location='pattern/add.do?command=add';"/> <br/><br/><br/> <input type="button" value="删除用户" οnclick="javascript:window.location='pattern/del.do?command=del';"/> <br/><br/><br/> <input type="button" value="修改用户" οnclick="javascript:window.location='pattern/modify.do?command=modify';"/> <%-- =============================================================================================== 这里的command必须与struts-config.xml中<action/>标签的parameter属性的值相同 然后在command后面跟上PatternSuiteAction中的方法名 =============================================================================================== --%>

位于//WebRoot//pattern//下的add_success.jsp页面

<%@ page pageEncoding="UTF-8"%> <h1>add_success</h1>

位于//WebRoot//pattern//下的del_success.jsp页面

<%@ page pageEncoding="UTF-8"%> <h1>del_success</h1>

位于//WebRoot//pattern//下的modify_success.jsp页面

<%@ page pageEncoding="UTF-8"%> <h1>modify_success</h1>

然后是Struts1.x中的核心配置文件struts-config.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <action-mappings> <!-- 所有的【pattern/*.do】请求都将由PatternSuiteAction来处理,PatternSuiteAction类继承了DispatchAction类 --> <!-- 它将根据传入的command的值,分发到PatternSuiteAction中不同的方法进行处理 --> <!-- 如果没有传递command参数,将触发调用PatternSuiteAction的unspecified()方法 --> <!-- 利用这一特性,我们可以覆写unspecified()以实现某种特殊功能 --> <action path="/pattern/*" type="com.jadyer.struts.action.PatternSuiteAction" parameter="command"> <!-- parameter属性可以接收传递时的参数。比如usermaint.do?command=del那么就会执行Action中的del()方法 --> <!-- parameter参数值不能是execute或perform,否则就会有安全问题了 --> <!-- 如果parameter值是execute,那么就会覆盖掉DispatchAction中的execute()方法,所以它的值不能是execute --> <!-- 而且parameter的值也不能是perform,因为在Struts以前的版本中,它不叫execute()方法,而叫perform()方法 --> <!-- *************************************************************************************** --> <!-- 另外它会自动将前台请求中,比如【pattern/add.do?comm...】里面的【add】取出 --> <!-- 放到<forward/>标签的path属性【/pattern/{1}_success.jsp】里的【{1}】中 --> <!-- 或者将【pattern/add.do?comm...】里面的【pattern/add】取出,放到【{0}】中 --> <!-- 这就是{1}和{0}的区别。所以我们也可以把path直接写成成【/{0}_success.jsp】 --> <forward name="success" path="/pattern/{1}_success.jsp"/> </action> </action-mappings> </struts-config> <!-- 通过这个例子,我们就可以知道:在Struts中提供了这种模式匹配的机制 --> <!-- 目的主要是减少配置量。但前提是要有个很好的约定,要有一个很好的命名 --> <!-- 如果命名不规范,就无法使用这种模式匹配了。也就是说==>约定优于配置 -->

最后是用到的Action类

package com.jadyer.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.DispatchAction; /** * Struts1.x中的DispatchAction很类似于Struts2中的动态方法调用 * @see ---------------------------------------------------------------------------------------------- * @see 关于Struts2的动态方法调用,请参考http://blog.csdn.net/jadyer/archive/2010/09/15/5884891.aspx * @see ---------------------------------------------------------------------------------------------- * @see DispatchAction能够节省Action数量,并且能够集中的处理CRUD方法 * @see DispatchAction所采用的原理就是:把以前的Action统一放到DispatchAction中用方法来表示 * @see 传递参数时,参数值要与DispatchAction的方法名一致。这样每次提交,就能找到相应方法来处理该请求 * @see 而且DispatchAction中的CRUD方法的参数要与execute()方法的参数一模一样 * @see ---------------------------------------------------------------------------------------------- * @see 另外也可以覆写DispatchAction中的execute()方法。但在覆写完之后,必须显式的用super调用execute方法 * @see 否则DispatchAction就会失效。因为DispatchAction的所有的调度工作,全都是在它的execute()方法中做的 * @see ---------------------------------------------------------------------------------------------- */ public class PatternSuiteAction extends DispatchAction { public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return mapping.findForward("success"); } public ActionForward del(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return mapping.findForward("success"); } public ActionForward modify(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return mapping.findForward("success"); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值