我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Struts2下怎么配置Action

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Struts2下怎么配置Action

本篇内容主要讲解“Struts2下怎么配置Action”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Struts2下怎么配置Action”吧!

Action基本配置

Struts 2使用package包来组织Action,在struts.xml中通过使用package下的action元素来配置Action。在配置Action时,需要指定action元素的name和class属性。

  1. name属性:指定Action的名字,即指明该Action所处理的请求的URL,例如,若name属性值为login,则请求该Action的URL是login.action

  2. class属性:指定Action的实现类,该属性不是必须的,如果没有指定class属性的值,则默认使用ActionSupport类。

Action基本配置代码如下:

<package name="default" namespace="/" extends="struts-default">  <action name="example" class="com.example.struts.action.expAction"></package>

Action只是一个逻辑控制器,不直接对用户请求生成任何相应。因此,Action处理完用户请求后需要将指定的视图资源呈现给用户,即配置Action时,应该配置逻辑视图和物理视图资源之间的映射。

配置逻辑视图和物理视图之间的映射关系是通过<result>元素来定义的,每个<result>元素定义逻辑视图和物理视图之间的一个映射:

<package name="default" namespace="/" extends="struts-default">  <action name="example" class="com.example.struts.action.expAction">  <result name = "success">/success.jsp</result>  <result name = "error">/error</result></package>

动态方法调用

有时一个Action内需要包含多个控制处理逻辑。例如,对于同一个表单,当用户通过不同的提交按钮进行提交时,系统需要使用Action的不同方法进行处理用户请求,此时就需要让Action中包含多个控制处理逻辑。

Struts 2框架允许一个Action中包含多个处理逻辑。在Struts 2中请求一个Action中的不同处理逻辑方法的方式成为DMI(Dynamic Method Invocation,动态方法调用),其请求格式如下:

(ActionName)!(methodName).action
  1. ActionName是Action的名字,即struts.xml中配置的Action的name属性值;

  2. methodName是Action实现类中处理逻辑的方法名。

动态方法调用示例

//访问product中的edit()方法product!edit.action

productList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>商品列表</title></head><body>  <table border="1">    <tr>      <th>商品ID</th>      <th>商品名称</th>      <th>数量</th>      <th colspan="2">操作</th>    </tr>    <tr>      <td>1001</td>      <td>小米手机</td>      <td>128</td>      <td><a href="product!edit.action?productId=1001" rel="external nofollow" >编辑</a></td>      <td><a href="product!del.action?productId=1001" rel="external nofollow" >删除</a></td>    </tr>    <tr>      <td>1002</td>      <td>佳能相机</td>      <td>100</td>      <td><a href="product!edit.action?productId=1002" rel="external nofollow" >编辑</a></td>      <td><a href="product!del.action?productId=1002" rel="external nofollow" >删除</a></td>    </tr>  </table></body></html>```

上述代码中,商品列表中的每个商品使用超链接进行编辑、删除操作。超链接中href属性值采用动态方法调用的方式进行链接请求,并将产品ID作为参数传递给Action。

ProductAction.java代码如下:

package com.qst.chapter03.action;import com.opensymphony.xwork2.ActionSupport;public class ProductAction extends ActionSupport {  private int productId;  public int getProductId() {    return productId;  }  public void setProductId(int productId) {    this.productId = productId;  }  // 编辑商品  public String edit() {    System.out.println("编辑商品" + productId);    // ...省略一些编辑商品的业务    return "edit";  }  // 删除商品  public String del() {    System.out.println("删除商品" + productId);    // ...省略一些删除商品的业务    return "del";  }}

上述代码创建了两个业务方法edit()和del()方法。当用户单击不同的链接时,系统将交给对应的方法处理。

接下来编写edit.jsp和del.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>编辑商品</title></head><body>  ${param.productId}商品编辑</body></html>
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>删除商品</title></head><body>  ${param.productId}商品删除成功!</body></html>

在struts.xml中配置ProductAction代码如下所示:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC  "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>  <!-- 指定Struts2处于开发阶段,可以进行调试 -->  <constant name="struts.devMode" value="true" />  <constant name="struts.enable.DynamicMethodInvocation" value="true" />  <!-- Struts2的Action都必须配置在package里,此处使用默认package -->  <package name="default" namespace="/" extends="struts-default">    <!-- 定义一个名为user的Action,实现类为com.qst.chapter03.action.LoginAction -->    <action name="product" class="com.qst.chapter03.action.ProductAction">      <result name="edit">/edit.jsp</result>      <result name="del">/del.jsp</result>    </action>  </package></struts>

上述配置文件配置了常量struts.enable.DynamicMethodInvocation的值为true,这样Struts 2才会开启动态方法调用,否则默认不会开启动态方法调用。

使用method属性及通配符

除了动态方法调用之外,Struts 2还提供了另一种处理方法,即将Action处理类定义成多个逻辑Action。此时,在配置<action>元素时,需要指定name、class和method属性。这样就可以让Action调用指定方法,而不是execute()方法来处理用户请求。

例如可以将ProductAction类定义成两个逻辑Action,即将该类中的edit()和del()方法映射成不同的Action,示例代码如下:

<action name="editproduct" class="com.qst.chapter03.action.ProductAction" method = "edit">  <result name="edit">/edit.jsp</result></action><action name="delproduct" class="com.qst.chapter03.action.ProductAction" method = "del">  <result name="del">/del.jsp</result></action>

上述代码定义了editproduct和delproduct两个逻辑Action,这两个Action对应的处理类都是ProductAction,但处理逻辑不同。分别对应的是edit()和del()方法。

上面的这种方式虽然能够实现,但两个定义绝大部分是相同的,带来冗余问题。Struts 2还提供了通配符“ * ”来解决这个问题。利用通配符在定义Action的name属性时使用模式字符串(即用“ * ”代表一个或多个任意字符串),接下来就可以在class、method属性以及<result>子元素中使用{N}的形式代表前面第N个星号“ * ”所匹配的子串。

* 通配符

<struts>  <!-- 演示通配符的使用方法 -->  <package name="product" extends="struts-default">    <action name=" * product" class="com.qst.chapter03.action.ProductAction" method = "{1}">      <result name="edit">/edit.jsp</result>      <result name="del">/del.jsp</result>    </action>  </package></struts>

上述代码Action的name属性值为“ * product”,使用了通配符,此时定义的不是一个普通的Action,而是定义了一系列的逻辑Action,只要用户请求的URL符合“ * product.action”的模式,都可以通过ProductAction处理。此外,必须要指定method属性,method属性用于指定用户请求的方法。在method属性中使用表达式{1},代表该表达式就是name属性值中第一个“ * ”指代的值。通过上述配置规则可以达到与动态调用同样的运行效果。

此外Struts 2允许在class属性和method属性中同时使用表达式,例如:

复制代码 代码如下:


<action name = " *_* " class = "com.qst.chapter03,action.{1}Action" method = " {2} ">

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

到此,相信大家对“Struts2下怎么配置Action”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Struts2下怎么配置Action

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Struts2下怎么配置Action

本篇内容主要讲解“Struts2下怎么配置Action”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Struts2下怎么配置Action”吧!Action基本配置Struts 2使用packag
2023-05-31

Struts2的配置 struts.xml Action详解

在学习struts的时候,我们一定要掌握struts2的工作原理。只有当我们明确了在struts2框架的内部架构的实现过程,在配置整个struts 的框架时,可以很好的进行逻辑上的配置。接下来我就先简单的讲解下struts2的框架工作原理:
2023-05-31

怎么在struts2中利用注解对Action进行配置

怎么在struts2中利用注解对Action进行配置?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 使用注解来配置Action可以实现零配置,零配置将从基于纯X
2023-05-30

Struts2怎么配置多级文件下的jsp页面路径

这篇文章主要介绍“Struts2怎么配置多级文件下的jsp页面路径”,在日常操作中,相信很多人在Struts2怎么配置多级文件下的jsp页面路径问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Struts2怎么
2023-06-04

Linux下怎么配置JDK

这篇文章主要为大家展示了“Linux下怎么配置JDK”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下怎么配置JDK”这篇文章吧。JDK是 Java 语言的软件开发工具包,主要用于移动设
2023-06-28

Linux下怎么配置proftpd

这篇文章主要介绍了Linux下怎么配置proftpd,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。proftpd是一款开放源码的ftp服务器软件,它是原来世界范围使用最广泛的
2023-06-27

mysql下载后怎么配置

为了配置下载后的 mysql,需要完成以下步骤:下载 mysql 并安装;初始化 mysql;修改配置文件(更改 root 密码、设置连接参数);创建 mysqld 服务;启动 mysql;通过 mysql shell 连接到 mysql;
mysql下载后怎么配置
2024-04-05

Jmeter怎么下载配置使用

本篇内容介绍了“Jmeter怎么下载配置使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!jemter简介jmeter是apache公司基于
2023-06-21

VSCode下怎么配置C++环境

本篇内容介绍了“VSCode下怎么配置C++环境”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在代码的目录下的.vscode文件夹下创建la
2023-06-25

MAC中怎么下载配置PHPMyAdmin

今天小编给大家分享一下MAC中怎么下载配置PHPMyAdmin的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-02-13

Linux下怎么安装配置V2Ray

这篇文章主要介绍“Linux下怎么安装配置V2Ray”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux下怎么安装配置V2Ray”文章能帮助大家解决问题。Linux下安装v2Ray具体步骤修改权
2023-06-28

Linux下怎么配置静态IP

这篇文章将为大家详细讲解有关Linux下怎么配置静态IP,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。网络配置的配置文件在/etc/sysconfig/network-scripts/下,文件名前缀为if
2023-06-27

Linux下怎么安全配置apache

这篇文章主要介绍“Linux下怎么安全配置apache”,在日常操作中,相信很多人在Linux下怎么安全配置apache问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下怎么安全配置apache”的疑
2023-06-27

linux下mongodb怎么安装配置

在Linux下安装和配置MongoDB可以按照以下步骤进行:下载MongoDB的安装包:可以从MongoDB官方网站(https://www.mongodb.com/)下载适合你Linux版本的安装包。解压安装包:将下载的安装包解压到指定的
linux下mongodb怎么安装配置
2024-04-10

win10下怎么安装配置PHP

本篇内容介绍了“win10下怎么安装配置PHP”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!window10下PHP安装及配置下载首先去ph
2023-06-29

Linux下怎么配置vlan网卡

这篇文章主要介绍“Linux下怎么配置vlan网卡”,在日常操作中,相信很多人在Linux下怎么配置vlan网卡问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下怎么配置vlan网卡”的疑惑有所帮助!
2023-06-13

CentOS7下怎么快速配置MariaDB

本篇内容主要讲解“CentOS7下怎么快速配置MariaDB”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CentOS7下怎么快速配置MariaDB”吧!MariaDB数据库管理系统是 MySQ
2023-06-27

CentOS下怎么安装配置Jsoncpp

今天小编给大家分享一下CentOS下怎么安装配置Jsoncpp的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 安装执行命
2023-06-29

Ubuntu下怎么安装配置MariaDB

本篇内容主要讲解“Ubuntu下怎么安装配置MariaDB”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu下怎么安装配置MariaDB”吧!MariaDB数据库管理系统是 MySQL
2023-06-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录