Struts2框架的运行依赖struts.xml配置文件来定义请求处理逻辑、页面跳转规则以及框架的基础行为,同时核心控制器的正确配置是框架能够正常拦截请求的前提。理解这两部分的配置逻辑是上手Struts2开发的基础。

struts.xml基础结构
struts.xml的根标签是<struts>,所有配置内容都需要放在这个标签内部。基础的struts.xml文件结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 配置内容写在这里 -->
</struts>
struts.xml常用配置项
常量配置
通过<constant>标签可以修改Struts2框架的默认行为,常见的常量配置如下:
- struts.i18n.encoding:设置请求和响应的编码,通常设置为UTF-8避免中文乱码
- struts.devMode:开发模式开关,开启后修改配置文件会自动重载,方便调试
- struts.action.extension:指定Struts2处理的请求后缀,默认是action,可修改为其他值
常量配置示例:
<struts>
<!-- 设置编码为UTF-8 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 开启开发模式 -->
<constant name="struts.devMode" value="true"/>
<!-- 处理后缀为action和do的请求 -->
<constant name="struts.action.extension" value="action,do"/>
</struts>
包配置
Struts2通过<package>标签对配置进行分组管理,包可以继承其他包复用配置。<package>标签的核心属性如下:
| 属性名 | 作用 |
|---|---|
| name | 包的唯一标识,必填 |
| extends | 继承的父包,通常继承struts-default获取默认拦截器栈 |
| namespace | 包的命名空间,用于区分不同包下的同名action |
包配置示例:
<struts>
<package name="default" extends="struts-default" namespace="/">
<!-- 该包下的action配置 -->
</package>
</struts>
Action配置
<action>标签用于映射请求路径和处理类,核心属性如下:
- name:请求路径的名称,和namespace组合成完整请求路径
- class:处理请求的动作类全路径
- method:动作类中处理请求的方法名,默认是execute
Action配置示例:
<struts>
<package name="default" extends="struts-default" namespace="/">
<!-- 请求/user/login.action会调用com.example.UserAction的login方法 -->
<action name="login" class="com.example.UserAction" method="login">
<!-- 结果配置 -->
</action>
</package>
</struts>
结果配置
通过<result>标签定义Action执行后的页面跳转规则,核心属性如下:
- name:结果标识,和Action方法的返回值对应,默认是success
- type:结果类型,默认是dispatcher转发到JSP页面,还有redirect重定向、chain转发到另一个Action等类型
结果配置示例:
<struts>
<package name="default" extends="struts-default" namespace="/">
<action name="login" class="com.example.UserAction" method="login">
<!-- 返回success时转发到success.jsp -->
<result name="success">/success.jsp</result>
<!-- 返回error时重定向到login.jsp -->
<result name="error" type="redirect">/login.jsp</result>
</action>
</package>
</struts>
Struts2核心控制器配置
Struts2的核心控制器是StrutsPrepareAndExecuteFilter,需要在web.xml中进行配置,让框架能够拦截符合规则的请求。配置步骤如下:
web.xml中配置过滤器
核心控制器本质是一个过滤器,配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- 配置Struts2核心控制器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<!-- 拦截所有请求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
配置注意事项
- 过滤器类名需要和Struts2版本对应,2.5版本之前的核心过滤器类名不同,需要注意版本差异
- <url-pattern>通常配置为/*,保证所有符合struts.action.extension后缀的请求都能被拦截
- 如果项目中有其他过滤器,需要注意过滤器的执行顺序,Struts2核心过滤器一般放在最后
常见配置问题排查
配置过程中如果遇到问题,可以从以下几个方面排查:
检查struts.xml的DTD声明是否和Struts2版本匹配,版本不匹配会导致配置文件解析失败。
检查action的class路径是否正确,包名和类名拼写错误会导致找不到处理类。
检查核心过滤器的配置是否正确,特别是<url-pattern>是否覆盖了需要处理的请求。
下面是一个完整的struts.xml配置示例,包含上述所有常用配置项:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 常量配置 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.devMode" value="true"/>
<constant name="struts.action.extension" value="action"/>
<!-- 包配置 -->
<package name="user" extends="struts-default" namespace="/user">
<!-- Action配置 -->
<action name="login" class="com.example.UserAction" method="login">
<!-- 结果配置 -->
<result name="success">/user/success.jsp</result>
<result name="error">/user/login.jsp</result>
</action>
<action name="register" class="com.example.UserAction" method="register">
<result name="success">/user/register_success.jsp</result>
</action>
</package>
</struts>
Struts2struts.xml核心控制器配置指南修改时间:2026-07-12 16:51:36