实例讲解DispatchAction和LookupDispatchAction

简介:
注意:以下两个例子在调试的过程中用的是同一个form和struts-config.xml,在调试的过程中DispatchAction是不用资源文件ApplicationResources.properties的,而LookupDispatchAction是要用到ApplicationResources.properties
先来说说DispatchAction,网上的许多例子都是和超链接来做的,其实用DispatchAction用按钮也是可以实现的,来看例子吧!
UserManagement.jsp
< %@ taglib  uri ="http://struts.apache.org/tags-logic"  prefix ="logic"% > 
< %@taglib  prefix ="c"  uri ="http://java.sun.com/jsp/jstl/core"% > 
< html > 
   < head > 
     < title >DispatchAction Example - viralpatel.net </title> 
   </head> 
   < body > 
     < h2 > 
      User Management (DispatchAction Example) 
     </h2> 
     < font  color ="black" > < h3 > 
        用struts标签的方法 
       </h3>  </font> 
     < html:form  action ="/user"  method ="post" > 
       < html:text  property ="userName"  /> 
       < html:submit  property ="method"  value ="create"  /> 
       < html:submit  property ="method"  value ="delete"  /> 
     </html:form> 
     < font  color ="black" > < h3 > 
        不用struts标签的方法 
       </h3>  </font> 
     < form  action ="/struts_action_test/user.do"  method ="post" > 
       < input  type ="text"  name ="userName" /> 
       < input  type ="submit"  name ="method"  value ="create" /> 
       < input  type ="submit"  name ="method"  value ="delete" /> 
     </form> 
     < font  color ="blue" > < h3 > 
        ${message } 
       </h3>  </font> 现有以下用户: 
     < c:forEach  var ="numArray"  items ="${num}" > 
       < table > 
         < tr > 
           < td > 
             < c:out  value ="${numArray}"  /> 
           </td> 
         </tr> 
       </table> 
     </c:forEach> 
   </body> 
</html>
UserManagementAction
package com.zgxr.struts; 

import java.lang.reflect.Array; 
import java.util.ArrayList; 
import java.util.List; 

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; 

public  class UserManagementAction  extends DispatchAction { 
   // 用于存放添加的用户 
  List list =  new ArrayList(); 
   public ActionForward create(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response) 
       throws Exception { 
    LoginActionForm loginActionForm = (LoginActionForm) form; 
     // 将新添加的用户放入list 
    list.add(loginActionForm.getUserName()); 
    request.setAttribute( "message""User created successfully" +  ":" 
        +  "当前用户数量为:" + list.size()); 
     
    request.setAttribute( "num", list); 
     return mapping.findForward( "success"); 
  } 

   public ActionForward delete(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response) 
       throws Exception { 
    LoginActionForm loginActionForm = (LoginActionForm) form; 
     //将提交上来的用户从List中删除 
    list.remove(loginActionForm.getUserName()); 
    request.setAttribute( "message""User deleted successfully" +  ":" 
        +  "当前用户数量为:" + list.size()); 
    request.setAttribute( "num", list); 
     return mapping.findForward( "success"); 
  } 

}
LoginActionForm:
package com.zgxr.struts; 

import org.apache.struts.action.ActionForm; 

public  class LoginActionForm  extends ActionForm { 
   // 定义两个变量,这两个值与页面上的html:text的property的值相对应 
   private  int numOne; 
   private  int numTwo; 
   private String userName; 

   public String getUserName() { 
     return userName; 
  } 

   public  void setUserName(String userName) { 
     this.userName = userName; 
  } 

   public  int getNumOne() { 
     return numOne; 
  } 

   public  void setNumOne( int numOne) { 
     this.numOne = numOne; 
  } 

   public  int getNumTwo() { 
     return numTwo; 
  } 

   public  void setNumTwo( int numTwo) { 
     this.numTwo = numTwo; 
  } 

}
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 > 
   < form-beans > 
     < form-bean  name ="loginActionForm" 
       type ="com.zgxr.struts.LoginActionForm" > 
     </ form-bean > 
   </ form-beans > 
   < action-mappings > 
     < action  path ="/user"  parameter ="method"  name ="loginActionForm" 
       type ="com.zgxr.struts.UserManagementAction" > 
       < forward  name ="success"  path ="/UserManagement.jsp"  /> 
       < forward  name ="failure"  path ="/UserManagement.jsp"  /> 
     </ action > 

     < action  path ="/test"  name ="loginActionForm"  scope ="request" 
       parameter ="action"  type ="com.zgxr.struts.TestAction" 
       input ="/operation.jsp" > 
       < forward  name ="success"  path ="/operation.jsp"  /> 
       < forward  name ="failure"  path ="/operation.jsp"  /> 
     </ action > 
   </ action-mappings > 
   < message-resources  parameter ="ApplicationResources"  /> 
</ struts-config >
好了把以上这些拷下来试试吧,下面我们来看看LookupDispatchAction
operation.jsp
%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
< %@ taglib  uri ="http://struts.apache.org/tags-html"  prefix ="html"% > 
< %@ taglib  prefix ="bean"  uri ="http://struts.apache.org/tags-bean"% > 

< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > 
< html > 
   < head > 
     < title >LookupDispatchAction Example - viralpatel.net </title> 
   </head> 
   < body > 
     < h2 > 
      User Management (LookupDispatch Action Example) 
     </h2> 
                            用struts标签的方法 
     < html:form  action ="/test"  method ="post" > 
       < html:text  property ="numOne" /> 
       < html:text  property ="numTwo" /> 
       < html:submit  property ="action" > 
         < bean:message     key ="button.sum" /> 
       </html:submit> 
       < html:submit  property ="action" > 
         < bean:message  key ="button.minus" /> 
       </html:submit> 
       < html:submit  property ="action" > 
         < bean:message  key ="button.multiply" /> 
       </html:submit> 
       < html:submit  property ="action" > 
         < bean:message  key ="button.divide" /> 
       </html:submit> 
     </html:form> 
                             不用struts标签的方法 
                             < form  name ="loginActionForm"  method ="post" action="/struts_action_test/test.do > 
       < input  type ="text"  name ="numOne" /> 
       < input  type ="text"  name ="numTwo" /> 
       < input  type ="submit"  name ="action"  value ="sum" /> 
       < input  type ="submit"  name ="action"  value ="minus" > 
       < input  type ="submit"  name ="action"  value ="multiply" /> 
       < input  type ="submit"  name ="action"  value ="divide" /> 
     </form> 
   </body> 
</html>
TestAction:
package com.zgxr.struts; 

import java.util.HashMap; 
import java.util.Map; 

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.LookupDispatchAction; 

public  class TestAction  extends LookupDispatchAction { 

  @Override 
   //用于关联按键和方法 
   protected Map getKeyMethodMap() { 
    Map map =  new HashMap(); 
     //如果按钮标题的key为button.sum. 则提交该按钮时对应sum方法 
    map.put( "button.sum""sum"); 
     //如果按钮标题的key为button.minus. 则提交该按钮时对应minus方法 
    map.put( "button.minus""minus"); 
     //如果按钮标题的key为button.multiply. 则提交该按钮时对应multiply方法 
    map.put( "button.multiply""multiply"); 
     //如果按钮标题的key为button.divide. 则提交该按钮时对应divide方法 
    map.put( "button.divide""divide"); 
     return map; 
  } 

   public ActionForward sum(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response) 
       throws Exception { 
     //将form转变成提交时用到的loginActonForm 
    LoginActionForm loginActionForm = (LoginActionForm) form; 
     //计算加法 
     int num = loginActionForm.getNumOne() + loginActionForm.getNumTwo(); 
    request.setAttribute( "action", num); 
     return mapping.findForward( "success"); 
  } 

   public ActionForward minus(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response) 
       throws Exception { 
     //将form转变成提交时用到的loginActonForm 
    LoginActionForm loginActionForm = (LoginActionForm) form; 
     //计算减法 
     int num = loginActionForm.getNumOne() - loginActionForm.getNumTwo(); 
    request.setAttribute( "action", num); 
     return mapping.findForward( "success"); 
  } 

   public ActionForward multiply(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response) 
       throws Exception { 
     //将form转变成提交时用到的loginActonForm 
    LoginActionForm loginActionForm = (LoginActionForm) form; 
     //计算乘法 
     int num = loginActionForm.getNumOne() * loginActionForm.getNumTwo(); 
    request.setAttribute( "action", num); 
     return mapping.findForward( "success"); 
  } 

   public ActionForward divide(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response) 
       throws Exception { 
     //将form转变成提交时用到的loginActonForm 
    LoginActionForm loginActionForm = (LoginActionForm) form; 
     //计算除法 
     int num = loginActionForm.getNumOne() / loginActionForm.getNumTwo(); 
    request.setAttribute( "action", num); 
     return mapping.findForward( "success"); 
  } 
}
ApplicationResources.properties
button.sum=sum 
button.minus=minus 
button.multiply=multiply 
button.divide=divide
好了就这么多了哦忘了web.xml了
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 >application </ param-name > 
       < param-value >ApplicationResources </ param-value > 
     </ init-param > 
     < 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 >/UserManagement.jsp </ welcome-file > 
   </ welcome-file-list > 
</ web-app >

大家要注意了在不用struts标签的时候,form提交的路径要注意具体见以上代码



本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/360059,如需转载请自行联系原作者

相关文章
|
11月前
|
Python
使用 Pandas 库时,如何处理数据的重复值?
在使用Pandas处理数据重复值时,需要根据具体的数据特点和分析需求,选择合适的方法来确保数据的准确性和唯一性。
694 64
|
存储 安全 API
oss服务器端加密(Server-Side Encryption Configuration)
阿里云OSS提供服务器端加密(SSE),确保静态数据安全。支持SSE-KMS,使用KMS托管CMK加密。数据上传时自动加密,下载时自动解密。用户可设置Bucket默认加密或在上传时指定加密选项。适用于高度保护数据场景,如敏感个人信息和企业关键信息。兼容多种部署形态,特定特性地域可用。此功能简化了加密处理,增强了云端数据安全性。
587 1
|
12月前
|
数据采集 机器学习/深度学习 自然语言处理
数据清洗与过滤
【10月更文挑战第6天】数据清洗与过滤
198 1
|
8月前
|
Cloud Native API 微服务
微服务引擎 MSE 及云原生 API 网关 2025 年 1 月产品动态
微服务引擎 MSE 及云原生 API 网关 2025 年 1 月产品动态。
178 87
|
10月前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
281 15
|
11月前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
2353 3
|
XML 前端开发 Android开发
Android经典实战之Kotlin中实现圆角图片和圆形图片
本文介绍两种实现圆角图像视图的方法。第一种是通过自定义Kotlin `AppCompatImageView`,重写`onDraw`方法使用`Canvas`和`Path`进行圆角剪裁。第二种利用Android Material库中的`ShapeableImageView`,简单配置即可实现圆角效果。两种方法均易于实现且提供动态调整圆角半径的功能。
270 0
|
监控 安全 数据安全/隐私保护
确保数据安全与隐私保护的数据治理最佳实践
【8月更文第13天】随着数据成为企业最重要的资产之一,数据安全和隐私保护变得至关重要。本文将探讨数据治理中的一些最佳实践,并提供具体的代码示例来说明如何实施这些策略。
2361 4
|
Java 应用服务中间件
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
2624 1
|
存储 负载均衡 Dubbo
Zookeeper的常见面试题(全)
目录前言1. Zookeeper的了解2. ZAB协议 / 主从节点的同步了解3. 多少种部署方式4. 通知机制5. 集群节点的个数6. 节点的类型有什么7. 集群安装的特点8. 选举机制是如何的 前言 主要理顺zookeeper的相关知识点以及面试常被问及的知识点 基础知识可看我之前的文章 Zookeeper从入门到精通(全) 1. Zookeeper的了解 zookeeper主要是文件系统(存储数据)和通知机制(进行通知信息) 它是一个为分布式应用提供一致性服务的软件 具体都有哪些些功能 统一命名服务
479 1
Zookeeper的常见面试题(全)