首先配置WebContent/WEB-INF文件夹下的web.xml
<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> ====>/*表示所有的url都被struts过滤器解析,可以改为/*.action,/*.do等
</filter-mapping>
简单的web.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>
现在开始配置struts.xml
首先配置文件头:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
然后配置根目录
<struts>
常用子标签:
1、<include>
作用:引入其他配置文件
<include file="test.xml"/>
2、<constant> 详解请参考:https://ceoajun.iteye.com/blog/1442479
作用:改变struts的默认行为
设置匹配/*.action的请求都由struts2处理
<constant name="struts.action.extension" value="action"/>
指定编码集为utf-8
<constant name="struts.i19n.encoding" value="utf-8" />
设置浏览器是否缓存静态内容,默认true,建议开发阶段关闭
<constant name="struts.server.static.browserCache" value="false"/>
当struts配置文件修改后,是否自动重载该文件,默认false,建议开发阶段开启
<constant name="struts.configuration.xml.reload" value="true" />
开启开发者模式,方便查看错误信息
<constant name="struts.devMode" value="true"/>
设置multipart请求信息的最大字节数
<constant name="struts.multipart.maxSize" value="1024000000"/>
设置支持动态方法调用
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
允许标签中使用表达式语法
<constant name="struts.tag.altSyntax" value="true"/>
3、<pacgage>
作用:管理action、result、interceptor、interceptor-stack等信息
属性:
name:package的名称,具有唯一性
extends:继承父package的名称
abstract:设置package为抽象的,抽象不能定义action,默认为false
namespace:package命名空间,影响访问url的地址
子标签:
a、<interceptors>
定义拦截器
<interceptor name="timer" class="com.dsb.test.interceptor.timer" />
<interceptor name="logger" class="com.dsb.test.interceptor.logger" />
定义拦截器栈
<interceptor-stack name="mystack">
<interceptor-ref name="timer" />
<interceptor-ref name="logger" />
</interceptor-stack>
</interceptors>
b、<default-interceptor-ref>
如果action中引用了其他的拦截器,默认的拦截器将无效
<default-interceptor-ref name="mystack"></default-interceptor-ref>
c、<global-results>
全局results配置
<global-results>
<result name="input">/error.jsp</result>
</global-results>
d、<action>
<action name="login" class="com.dsb.test.action.LoginAction">
引用拦截器
<interceptor-ref name="timer"></interceptor-ref>
返回结果
<result name="success" type="dispatcher">success.jsp</result>
type:详情请参考:https://www.cnblogs.com/wkrbky/p/5889328.html
A、dispatcher,默认类型,用于转发到服务器上的servlet、jsp、html等页面(通常处理jsp)
B、chain,用来处理action链(可以传递自身的参数)
C、redirect,重定向到一个url
D、redirectAction,重定向到action
带参结果
<result name="success" type="redirectAction>
<param name="actionName">login</param> ====>跳转的action页面(必填)
<param name="suerId">${userId}</param> ====>传递的参数名(需在原Action中生成get/set方法)
<param name="password">${pssword}</param>
</result>
</action>
</struts>
以下是简单的struts.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 所有匹配*.action的请求都由struts2处理 -->
<constant name="struts.action.extension" value="action" />
<!-- 是否启用开发模式 -->
<constant name="struts.devMode" value="true" />
<!-- struts配置文件改动后,是否重新加载 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 设置浏览器是否缓存静态内容 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
<constant name="struts.i18n.reload" value="true" />
<!-- 文件上传最大值 -->
<constant name="struts.multipart.maxSize" value="104857600" />
<!-- 让struts2支持动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- Action名称中是否还是用斜线 -->
<constant name="struts.enable.SlashesInActionNames" value="false" />
<!-- 允许标签中使用表达式语法 -->
<constant name="struts.tag.altSyntax" value="true" />
<!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
<constant name="struts.dispatcher.parametersWorkaround" value="false" />
<package name="basePackage" extends="struts-default">
<package name="com.dsb.test.struts2" extends="struts-default" namespace="/test">
<interceptors>
<!-- 定义拦截器
name:拦截器名称
class:拦截器类路径
-->
<interceptor name="timer" class="com.dsb.test.struts2.interceptor.timer"></interceptor>
<interceptor name="logger" class="com.dsb.test.struts2.interceptor.logger"></interceptor>
<!-- 定义拦截器栈 -->
<interceptor-stack name="mystack">
<interceptor-ref name="timer"></interceptor-ref>
<interceptor-ref name="logger"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定义默认的拦截器 每个Action都会自动引用
如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
<default-interceptor-ref name="mystack"></default-interceptor-ref>
<!-- 全局results配置 -->
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
name:action名称
class: 对应的类的路径
method: 调用Action中的方法名
-->
<action name="hello" class="com.kay.struts2.Action.LoginAction">
<!-- 引用拦截器
name:拦截器名称或拦截器栈名称
-->
<interceptor-ref name="timer"></interceptor-ref>
<!-- 节点配置
name : result名称 和Action中返回的值相同
type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
-->
<result name="success" type="dispatcher">/talk.jsp</result>
<!-- 参数设置
name:对应Action中的get/set方法
-->
<result name="success" type="redirectAction>
<param name="actionName">login</param> ====>跳转的action页面(必填)
<param name="suerId">${userId}</param> ====>传递的参数名(需在原Action中生成get/set方法)
<param name="password">${pssword}</param>
</result>
</action>
</package>
</package>
</struts>
本文是参考一下两位大佬的详解而写的
https://ceoajun.iteye.com/blog/1442479
https://www.cnblogs.com/wkrbky/p/5889328.html