当前位置:首页 > 技术 > 正文内容

Struts2 中请求映射到 Action 的配置机制

访客 技术 2026年6月23日 3

基于 XML 配置的请求路由 在 Struts2 框架中,通过 <action> 元素将客户端的请求路径映射到具体的业务逻辑类(Action)及其方法。配置示例如下:

<struts>
    <package name="main" extends="struts-default">
        <action name="login" class="com.example.action.LoginProcessor" method="execute">
            <result name="success">/views/success.jsp</result>
            <result name="error">/views/error.jsp</result>
        </action>
    </package>
</struts>
  • name 属性定义了请求的名称,对应 URL 中的 action 名称。
  • class 指定处理请求的 Java 类全限定名。
  • method 表示该类中具体执行的方法。

Package 包的配置要素 <package> 用于组织一组相关的 Action,其关键属性包括:

  • name:包的唯一标识,建议与模块或功能对应。
  • namespace:URL 路径前缀,如设置为 /admin,则访问路径为 http://localhost:8080/app/admin/login.action
  • extends:继承自父包,通常为 struts-default,以获取默认行为。
  • abstract:设为 true 时,该包不能包含具体 Action,仅用于共享配置。

请求匹配流程解析 当访问地址为 http://localhost:8080/app/section/module/login.action 时,系统按以下顺序查找对应的 Action:

  1. 优先检查当前命名空间路径下的包是否存在(如 /section/module)。
  2. 若存在,则在其内部查找名为 login 的 Action。
  3. 若未找到,向上一级路径(如 /section)继续搜索,直至根命名空间 /
  4. 若仍无匹配,抛出异常或触发默认动作。

动态方法调用(DMC)实现多方法支持 使用通配符可避免为每个方法单独定义 Action。例如:

<package name="user" namespace="/api" extends="struts-default">
    <action name="user_*" class="com.example.action.UserAction" method="{1}">
        <result name="success">/results/success.jsp</result>
        <result name="fail">/results/failure.jsp</result>
    </action>
</package>

此时:

  • 请求 /api/user_add.action 会调用 UserAction 类中的 add() 方法。
  • 请求 /api/user_delete.action 对应 delete() 方法。
  • {1} 表示通配符捕获的部分,用于动态指定方法名。

通配符处理所有未明确定义的请求 可通过全局通配符拦截所有未知请求,自动返回同名页面:

<package name="fallback" namespace="/" extends="struts-default">
    <action name="*" >
        <result>/WEB-INF/pages/{1}.jsp</result>
    </action>
</package>

此配置适用于所有未在其他地方声明的请求,例如:

  • 访问 /about.action → 显示 /WEB-INF/pages/about.jsp
  • 只有当某个 Action 已显式定义时,才会优先执行其配置。

设置默认入口点 若用户访问未明确指定的 Action,系统可自动跳转至预设的默认 Action:

<package name="default" namespace="/" extends="struts-default">
    <default-action-ref name="home"/>
    <action name="home">
        <result>/welcome.jsp</result>
    </action>
</package>

当访问根路径(如 /app/)且无具体 Action 时,将自动导向 home Action。

修改请求后缀 可通过常量调整 Action 的扩展名,适应不同项目需求:

<constant name="struts.action.extension" value="do,action,html"/>

支持单个或多个后缀,如:

  • login.dosubmit.actionview.html 均可被识别。

配置文件编码 确保配置文件读取时使用正确的字符集:

<constant name="struts.i18n.encoding" value="UTF-8"/>

防止中文乱码问题。

引入多个配置文件 大型项目中可拆分配置文件,便于维护:

<struts>
    <include file="security.xml" />
    <include file="user-config.xml" />
</struts>

每个被引用的文件(如 security.xml)需独立存在并符合 Struts2 格式。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。