struts2的通配符使用以及路径问题浅析

Struts2框架中使用通配符调用Action方法的详细指南 Struts2框架是一个开源的MVC(Model-View-Controller)框架,用于开发基于Java EE的Web应用程序。它起源于Apache基金会,并基于WebWork框架。Struts2框架将业务逻辑层和表示层分离,使开发者可以专注于业务逻辑的实现,而无需担心表示层的问题。在Struts2框架中,Action是处理业务逻辑的核心组件。其接口定义了必须实现的方法,主要是execute(),这是在Struts2中所有Action类的入口点。除了execute() 阅读详情

相信大家一定学习过国际化,熟悉国际化的同学们可能都知道占位符。那么在struts2中,也有类似这种的体现,那就是通配符。下面就来看看它的使用吧~

使用通配符定义action

源代码

<package name="itcast" namespace="/test" extends="struts-default">
	<action name="helloworld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
		<result name="success">/WEB-INF/page/hello.jsp</result>
	</action>
</package>


<package name="itcast" namespace="/test" extends="struts-default">
	<action name="helloworld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
		<result name="success">/WEB-INF/page/hello.jsp</result>
	</action>
</package>
public class HelloWorldAction{
	private String message;
	....
	public String execute() throws Exception{
		this.message = "我的第一个struts2应用";
		return "success";
	}
	
	public String other() throws Exception{
		this.message = "第二个方法";
		return "success";
	}
}

补充:
       要访问other()方法,可以通过这样的URL访问:http://localhost:8080/(项目名)/test/helloworld_other.action

其他:   

  • 使用通配符,将配置量降到最低
  • 不过,一定要遵守"约定优于配置"的原则
<action name=“*” class=“com.ambow.struts2.action.{1}Action” method=“add”></action>
  • 同时,struts2还支持*/*的配置模式,在配置文件中<struts>节点下配置如下:
    
    
    <constant name="struts.enable.SlashesInActionNames" value="true"></constant>
    
    则以上配置可改写为:
    <action name=“*/*” class=“com.ambow.struts2.action.{1}Action” method=“{2}”></action>
    
    • 其中第一个“*”映射到具体的某个action类,第二个“*”映射到该类的方法。不过这里要注意的name=“*/*”,在为action取名时,默认情况下在名字中是不允许出现斜杠(/)的。如果想在名字中使用斜杠(/),就需要在struts.xml文件中通过指定:
      <constant name=“struts.enable.SlashesInActionNames” value=“true” />
      

      来打开这个功能。其实这样做还挺麻烦的,只要把action的name写成“*_*”就不存在斜杠问题了:

      如:
    <action name=“*_*” class=“com.ambow.struts2.action.{1}Action” method=“{2}”></action>
    
    Struts2中的路径问题
    1. Struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
    2. 虽然可以用redirect方式解决,但redirect方式并非必要。
    3. 解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextPath()方式来拿到webapp的路径)
    4. 或者指定basePath


    Struts2框架中的路径问题深入解析 Struts2作为一个广泛使用的Java Web应用程序框架,从其前身Struts1开始,已经发展成为了一个成熟且功能丰富的MVC(Model-View-Controller)框架。Struts2不仅继承了Struts1的稳定性和易用性,还引入了WebWork框架的先进特性,使得开发者能够更方便地构建可维护、可扩展的Web应用程序。从最初的版本到如今的稳定版,Struts2的演进伴随着IT技术的发展,满足了不断变化的业务需求和技术挑战。 阅读详情

    相关推荐

    武汉理工大学 python实验三

    请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾),如无解则输出`“Data Error!题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有。编写一个宝塔上的琉璃灯的小程序,计算并输出每层各有多少盏琉璃灯。,如果有多个解,则分行输出,每行一个解;

    2401_83472225的博客 5949

    struts2输出带有占位符的国际化信息

    index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getS...

    SYL269794967的博客 191

    10X Visium空间转录组学入门:从芯片结构到数据分析全流程解析(附避坑指南)

    本文全面解析10X Visium空间转录组学技术,从芯片物理结构、探针化学原理到湿实验全流程操作与避坑指南,并详细介绍了从FASTQ数据到空间可视化的核心分析流程。文章旨在帮助科研人员跨越从理论到实操的鸿沟,掌握从样本准备、文库构建到使用Space Ranger和Seurat进行数据分析与可视化的完整路径,为组织生物学研究提供清晰的实践指引。

    weixin_29306011的博客 163

    Struts2通配符详解

    Struts.xml<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEstrutsPUBLIC "-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//EN" "http://struts.apache.org/dtds/st...

    weixin_33971205的博客 264

    PostgreSQL+Citus分布式集群实战:从零搭建到性能调优

    本文详细介绍了如何从零开始搭建并优化PostgreSQL+Citus分布式数据库集群。内容涵盖集群规划、源码编译安装、Citus扩展部署、节点配置、分布式表创建以及核心性能调优策略,为应对海量数据增长提供了完整的部署指南和实战解决方案。

    oo7890的博客 626

    使用STC15F104W产生PWM脉冲

    最近的小项目中使用到了STC15F104W产生PWM脉冲

    yeats1989的专栏 1万+

    Struts2学习笔记(五):struts2通配符用法示例

    本文主要介绍struts2配置文件中通配符的用法。 先来看一个简单的需求,index.jsp中有四个链接。 add1 del1 add2 del2 按照之前的介绍,strut.xml文件中需要写四个对应的action来进行响应,随着项目规模的逐渐扩大,需要的action数量会急剧增加,这样会导致struts.xml文件就会非常庞大。在这种背景下,通配符应运而生。上面四个acti

    jiajia333666的博客 606

    【深度学习新浪潮】智能体在图像处理领域的技术突破与实践指南

    智能体正在重构图像处理的技术版图:从多智能体分工的"专业化协作",到多模态统一的"极简架构",再到工具增强的"实战能力",技术突破不断降低开发门槛并拓展应用边界。对于开发者而言,2025年的核心机遇在于结合具体场景选择成熟框架(如医疗用IteR-MRL、工业用NVIDIA NIM),通过微调与工具集成快速落地解决方案。随着硬件成本下降与开源生态完善,图像处理智能体将从当前的"高端场景赋能"走向"千行百业普及",真正成为数字世界的"视觉感知与操作核心"。

    专注:太空算力、AI infra、异构调度、大模型成本工程 438

    struts中3种情况通配符的使用方法 及 动态方法调用

    一、概念 应用可能有很多个action 声明,可把多个相似的映射关系简化为一个映射关系的机制 (多个Action类----一个action标签)      通配符映射规则: 一般使用“*” 匹配零个或多个字符,被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用。 {1} 匹配第一个子串, {2} 匹配第二个子串…以此类推。 若指定的动作不存在, Struts 将

    QC班长的博客 890

    【零基础入门unity游戏开发——unity通用篇12】导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

    导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

    向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 757

    毕设-YOLOv8-OBB 实现自有数据集缺陷旋转检测全过程记录

    这次项目让我深入理解了 YOLOv8-OBB 的原理和使用流程。步骤内容工具数据标注制作倾斜缺陷样本格式转换从 HBB 转换为 OBB模型训练使用 Ultralytics YOLOv8 OBBCLI 命令模型测试推理与结果可视化通过 OBB 模型,我的缺陷检测系统获得了更高的精度和鲁棒性。未来我打算继续优化数据增强方式,比如引入随机旋转、仿射变换等,让模型更适应不同角度的样本。

    FJN110的博客 446

    struts2中的constant详解

    struts.xml中的constant详解

    村口老张头的专栏 1483

    最新Python爬虫实战(入门爬虫篇)——案例7:电影网站电影数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

    本次案例通过Python爬虫技术,成功实现了对某电影网站Top250多页电影详细信息的批量爬取与Excel保存。代码采用模块化设计,包含分页请求构造、XPath+正则提取结构化信息、Excel数据持久化保存等完整流程。通过配置User-Agent等请求头信息,有效模拟浏览器行为以绕过豆瓣基础反爬策略。整个爬虫逻辑遵循"分页遍历 → 请求页面 → 解析HTML → 提取电影信息 → 保存到Excel"的标准流程,与主流静态网站爬取范式高度一致。

    努力让自己发光,对的人才能迎着光而来 11万+

    Struts2通配符和它的各种问题总结

    参考 https://blog.youkuaiyun.com/Holmofy/article/details/78387958 错误总结在后面 通配符的使用 <action name="The_*" class="action.{1}Action" method="{1}"> <result name="success"> <...

    茨时代べ 的博客 1294

    文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

    主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

    霍尼韦尔SoftMaster使用说明

    霍尼韦尔SoftMaster使用说明

    在struts1.2中的action路径内使用通配符

    在大型的struts应用中struts的action mapping的数量庞大始终为一个不好解决的问题,如果你有很多类似的action,可以通过增加通配符来将它们整合为一个action mapping。下面为一个例子:<action path="/Edit*" type="com.oreilly.strutsckbk.ch07.Edit{1}Ac

    shrek_xu的专栏 4792

    jre9下载 jdk9

    (Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

    Struts2通配符和它的各种坑

    Struts2和Servlet相比有几个牛逼的地方。对OGNL表达式的整合以及通配符的运用就是其中两个。 而J2EE标准中,与这两个对应的分别是JSP中EL表达式的运用,以及urlPattern中的通配符。 前面的一篇文章中,讲述了OGNL的使用(OGNL在功能上把EL秒成渣(~ ̄▽ ̄)~ )。 这篇文章就来说说Struts2中的通配符以及它的各种坑。 最基本的使用 1. *通配...

    优快云文章已停止维护,后续文章会在 https://blog.hufeifei.cn 持续更新 3022

    深度学习工具包 DeepLearningToolbox

    深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

    Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射

    Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射 struts2的关于method=“{1}"意思详解   name= "Login_* "   method= "{1} "   class= "mailreader2.Login "> 中Login_*带*是什么意思?method= "{1} "带{}这个是什么意

    4207

    Struts2使用通配符出现org.apache.struts2.dispatcher.Dispatcher - Could not find action or result的问题

    这个问题困扰了我很久,一开始以为是路径的万体,找了一天半发现不是路径的问题。下面是我的代码和解决办法:Action类:UsersAction.javapublic class UsersAction extends ActionSupport { private String email; private String pwd; private UsersService ...

    dq1996928的博客 4895

    struts2—使用通配符

    struts2的配置文件是 struts.xml 在这个配置文件里面可以使用通配符,其中的好处就是,大大减少了配置文件的内容。当然,相应付出的代价是可读性。 使用通配符的原则是 约定高于配置. 在项目中,我们有很多的命名规则是约定的...我们使用通配符那就必须有一个统一的约定.否则通配符将无法成立 看下面的例子. (1)先看我们的action配置     ion n

    andyLiuJava的专栏 481

    Struts2使用通配符完成方法和action的调用

    官网对struts2通配符使用的介绍: Wildcard Mappings <actionname="*_*"class="com.netshuai.action.{1}Action"method="{2}"><resultname="success">/{2}_{1}Success.jsp</result></action> 如上...

    weixin_30507481的博客 203

    Struts2中的path路径问题、动态方法调用、通配符

    路径问题: struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。 虽然可以用redirect方式解决,但redirect方式并非必要。 解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)或者使用myeclipse经常用的,指定basePath   动态方法调用: /

    fzjiangmin1984的专栏 803

    Struts2 使用通配符动态请求Action

     在以前的学习中,<action>元素的配置,都是用明确的配置,其name、class等属性都是一个明确的值。其实Struts2还支持class属性和method属性使用来自name属性的通配符。   1)接下来看看使用通配符的示例,如果我们使用以下<action>配置: <action name="personAction_*" c...

    135

    Struts2的访问路径二:使用通配符配置访问路径一

    好记性不如赖头…………接上文,使用通配符配置访问路径,上文中的大部分文件都不须要改动,只须要将struts.xml配置文件改动一下即可,改动内容如下:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2

    ckinghan58 学习工作分享空间 1953

    Struts2框架之Struts通配符与动态调用(以及常见错误)

    1、Struts通配符 我们先写一个小Demo,对于User定义增删改查四个action。 package cn.hestyle.web.action; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { //模拟增加用户 public Str...

    hestyle的博客 660
    上一篇: struts2基础(续)
    下一篇: powerDesigner palette 工具栏不见了,怎么找回
    Retror
    博客等级 码龄14年 16粉丝 35原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

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

    抵扣说明:

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

    余额充值