Struts.xml是Struts2框架的核心配置文件,框架运行时会自动加载该文件读取相关配置,决定请求的处理流程、结果跳转规则等内容,掌握它的编写方法是使用Struts2开发的基础。

Struts.xml基础结构
一个标准的Struts.xml文件首先需要声明XML文档的版本和编码,然后引入Struts2框架的DTD约束,保证配置文件的语法符合框架要求。基础结构如下:
<?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>
核心配置标签说明
constant标签
constant标签用于配置Struts2框架的全局常量,比如开发模式、编码格式、后缀名等。常用配置示例如下:
<struts>
<!-- 开启开发模式,修改配置后无需重启服务器 -->
<constant name="struts.devMode" value="true" />
<!-- 设置默认编码为UTF-8 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 设置action请求的后缀为.action -->
<constant name="struts.action.extension" value="action" />
</struts>
package标签
package标签用于管理一组相关的action配置,类似Java中的包概念,可以避免action名称冲突。它的常用属性如下:
- name:包的名称,必须唯一,其他包可以通过该名称继承当前包
- extends:指定当前包继承的父包,一般继承struts-default包,获得Struts2默认的功能支持
- namespace:命名空间,用于区分不同包下的同名action,访问路径会拼接该命名空间
package配置示例:
<struts>
<package name="userPackage" extends="struts-default" namespace="/user">
<!-- 该包下的action配置 -->
</package>
</struts>
action标签
action标签用于配置请求对应的处理类和方法,是Struts.xml中最核心的配置项。常用属性如下:
| 属性名 | 作用 |
|---|---|
| name | action的名称,访问路径为namespace+"/"+name |
| class | 处理请求的动作类的全限定名,如果不配置则使用默认的动作类 |
| method | 动作类中处理请求的方法名,默认为execute方法 |
action配置示例,假设有一个处理用户登录的请求:
<package name="userPackage" extends="struts-default" namespace="/user">
<!-- 配置登录action,对应UserAction类的login方法 -->
<action name="login" class="com.example.action.UserAction" method="login">
<!-- 结果配置 -->
</action>
</package>
对应的UserAction类代码结构如下:
package com.example.action;
public class UserAction {
private String username;
private String password;
// 登录处理方法
public String login() {
if ("admin".equals(username) && "123456".equals(password)) {
return "success";
}
return "error";
}
// getter和setter方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
result标签
result标签用于配置action处理请求后的结果跳转,放在action标签内部。常用属性如下:
- name:结果名称,对应action方法返回的字符串,默认为success
- type:结果类型,默认为dispatcher,即请求转发到JSP页面,还可以配置redirect(重定向)、redirectAction(重定向到action)等
result配置示例,完善上面的登录action配置:
<action name="login" class="com.example.action.UserAction" method="login">
<!-- 登录成功,转发到success.jsp页面 -->
<result name="success" type="dispatcher">/success.jsp</result>
<!-- 登录失败,重定向到login.jsp页面 -->
<result name="error" type="redirect">/login.jsp</result>
</action>
拦截器配置
Struts2的拦截器可以在action执行前后做一些通用处理,比如权限校验、日志记录等。首先需要在package中定义拦截器和拦截器栈,然后引用到action中。
拦截器配置示例:
<package name="userPackage" extends="struts-default" namespace="/user">
<!-- 定义拦截器 -->
<interceptors>
<interceptor name="loginCheck" class="com.example.interceptor.LoginCheckInterceptor" />
<!-- 定义拦截器栈,包含默认拦截器和自定义拦截器 -->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="loginCheck" />
</interceptor-stack>
</interceptors>
<action name="login" class="com.example.action.UserAction" method="login">
<result name="success">/success.jsp</result>
<result name="error">/login.jsp</result>
<!-- 引用自定义拦截器栈 -->
<interceptor-ref name="myStack" />
</action>
</package>
配置注意事项
编写Struts.xml时需要注意几个常见问题:一是DTD版本要和使用的Struts2版本匹配,避免语法校验错误;二是action的class路径要写全限定名,否则框架找不到对应的处理类;三是result的路径要写对,相对路径是相对于web应用的根目录。如果配置后请求无法访问,可以开启struts.devMode常量,查看框架输出的错误信息快速定位问题。
Struts2Struts_xmlxml_configaction配置修改时间:2026-06-17 02:42:41