跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Struts2 核心配置文件详解

Struts2 配置涉及 Web 容器与框架内部两部分。核心在于 web.xml 的过滤器设置,以及 struts.properties 和 struts.xml 等文件的层级管理。通过继承默认包 struts-default 可复用拦截器与结果类型,利用常量覆盖机制调整全局行为。掌握加载顺序与通配符匹配能显著提升配置效率与维护性。

星星泡饭发布于 2025/1/18更新于 2026/10/2390 浏览
Struts2 核心配置文件详解

Struts2 配置文件详解

Struts2 的配置体系主要可以分为两大部分:Web 容器层面的配置(web.xml)和框架内部的配置。框架内部又细分为执行环境的全局配置以及具体组件的配置。

1. Web.xml 配置

在 Struts2 中,核心控制器是一个过滤器。早期版本(2.0.x)使用的是 FilterDispatcher,但从 2.1 开始统一为 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。这是整个 Web 应用的基础入口,必须在 web.xml 中注册。

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

对于基础应用,上述配置已足够。剩下的工作就是配置全局环境和组件细节,比如 Action 映射、拦截器等。

2. struts.properties 文件

这个文件用于覆盖框架的默认行为。虽然默认情况下不需要修改,但了解它的机制很有必要。

Struts2 启动时会先加载 jar 包内的 default.properties,然后查找项目中的 struts.properties。如果存在后者,则优先使用其中的配置覆盖前者。如果没有自定义文件,则完全采用默认值。

例如,default.properties 中定义了默认的请求后缀和编码:

# 默认请求后缀
struts.action.extension=action,,
# 默认编码
struts.i18n.encoding=UTF-8

我们可以在项目的 src 根目录下新建 struts.properties 来覆盖这些设置:

## 激活重新载入国际化文件的功能
struts.i18n.reload=true
## 修改请求后缀为 action 或者 do
struts.action.extension=action,do
## 打开开发者模式,修改配置后无需重启服务器
struts.devMode=true

注意:该文件编译后会位于 /WEB-INF/classes 下。

3. 核心 XML 配置文件

除了属性文件,Struts2 还依赖几个关键的 XML 文件:

  • struts-default.xml:存放在 struts2-core 包内,系统启动时自动加载。它定义了类型转换、拦截器、结果类型等核心组件。我们的业务配置通常继承自这里定义的 struts-default 包。
  • struts-plugin.xml:用于加载第三方插件。当 classpath 中存在包含此文件的 jar 包时,框架会自动识别并加载。
  • struts.xml:这是开发者最熟悉的文件,存放具体的 Action 配置、拦截器栈定义以及常量覆盖。文件名不可更改。

3.1 在 struts.xml 中覆盖全局配置

除了使用 struts.properties,我们也可以直接在 struts.xml 中使用 <constant> 标签来覆盖默认属性:

<struts>
    <!-- 覆盖 default.properties 中的配置 -->
    <constant name="struts.action.extension" value="do" />
    
    <package name="com.wq" extends="struts-default">
        <action name="login" class="com.wq.web.action.LoginAction">
            <result name="success">/welcome.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>

3.2 模块化拆分

随着项目扩大,struts.xml 会变得臃肿。我们可以利用 <include> 标签将其拆分为多个模块文件,提高可读性。

例如,在 struts.xml 中引入 struts-hello.xml:

<struts>
    <include file="struts-hello.xml" />
    <!-- 其他配置 -->
</struts>

4. 配置文件加载顺序

理解加载顺序有助于排查配置冲突问题。根据源码分析,大致顺序如下:

  1. default.properties:Jar 包内的全局默认配置。
  2. struts-default.xml:加载默认组件(拦截器、转换器)。
  3. struts-plugin.xml:加载插件配置。
  4. struts.xml:加载自定义组件及常量。
  5. struts.properties:自定义全局属性。若与 xml 中的常量冲突,通常以 properties 为准(视具体版本而定,建议保持单一来源)。

5. Package 与 Action 配置

在 struts.xml 中,Package 是管理 Action 和拦截器的基本单元。

  • name:必填,包的标识符,用于被其他包引用。
  • extends:可选,指定父包。大多数情况下应继承 struts-default,以便复用内置功能。
  • abstract:可选,标记为抽象包,不能直接包含 Action。

Action 映射

Action 本身不生成响应,而是返回逻辑视图名称,由 <result> 映射到物理资源。

<action name="login" class="com.wq.web.action.LoginAction">
    <!-- 默认 result name 为 success -->
    <result>/welcome.jsp</result>
    <result name="error">/error.jsp</result>
</action>

通配符匹配

为了减少重复配置,可以使用通配符。例如 SearchUser_* 可以匹配所有以 SearchUser_ 开头的请求。

<package name="cn.ouuo.action" extends="struts-default">
    <action name="SearchUser_*" class="searchAction" method="{1}">
        <result name="listResult">/listResult.jsp</result>
        <result name="success">/success.jsp</result>
    </action>
</package>

在这个例子中,访问 http://localhost:8080/ouuo/SearchUser_Manager.action 时,{1} 会捕获 Manager 并调用 searchAction 类中的 manager() 方法。这种动态映射方式在处理大量相似业务时非常高效。

目录

  1. Struts2 配置文件详解
  2. 1. Web.xml 配置
  3. 2. struts.properties 文件
  4. 默认请求后缀
  5. 默认编码
  6. 激活重新载入国际化文件的功能
  7. 修改请求后缀为 action 或者 do
  8. 打开开发者模式,修改配置后无需重启服务器
  9. 3. 核心 XML 配置文件
  10. 3.1 在 struts.xml 中覆盖全局配置
  11. 3.2 模块化拆分
  12. 4. 配置文件加载顺序
  13. 5. Package 与 Action 配置
  14. Action 映射
  15. 通配符匹配

更多推荐文章

查看全部
  • 人工智能与数据分析的关系及 Python Pandas 快速入门
  • Stable Diffusion 原理详解(附代码实现)
  • CANN 技术栈解析:Python、C++ 及算子开发选型指南
  • 飞牛 NAS 更换网络环境后 IP 无法访问的解决方法
  • Docker Logs 命令:从基础到高级日志管理
  • 算法:位运算详解及常用技巧 (& ^ ~ -n n-1)
  • RISC-V 智能家居中控系统开发实战:硬件、固件与通信全链路
  • 人工智能行业产品经理薪资分析与能力要求
  • C++ 协程深度解析:从内部机制到实用场景
  • 数据结构:二叉树基础概念与堆实现详解
  • Linux 进程间通信:命名管道(FIFO)实战与原理
  • SQLyog 13.1.1 安装步骤与 MySQL 连接配置指南
  • 民用无人机新规 2026 年 5 月实施:实名登记与激活要求详解
  • 基于 Java 的药店药品进销存与在线问诊管理系统设计与实现
  • Golang 后端性能优化手册:高级优化技巧
  • Java JDK 21 安装与环境配置指南
  • IDA Pro MCP:用 AI 驱动逆向分析实战
  • 基于 Z-Image 与 ComfyUI 的国产 AIGC 图像生成生态构建
  • C# 业务异常处理:BusException 类设计与使用
  • Python 结合 Neo4j 构建知识图谱实战指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online