这篇笔记记录了struts2框架常用的配置属性,供开发时随时查阅。
我们使用struts2框架时,需要编写自己的配置文件,除此之外,框架本身通过默认的配置文件提供默认的配置。
struts2框架会按照以下顺序加载配置文件:
注意:struts2的配置文件是按照顺序加载的,后面的配置会覆盖前面的配置,达到用户修改默认配置的目的。
struts2预定义了一些常量,我们可以在自定义的struts.properties或struts.xml中覆盖修改。
action,,
即请求xxx.action
或xxx
都会被对应配置的action处理true
,开发阶段建议关闭false
,开发阶段建议打开一个例子:
<?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>
<package name="p1" extends="struts-default" namespace="/test">
<action name="hello" class="com.gacfox.action.HelloAction" method="hello">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
struts2中,控制器Action可以通过package
在配置文件中进行分包,这样做的好处是结构清晰。
这里重点介绍一个namespace的用法。我们的项目通常可以划分为几个模块,比如BBS有用户模块,论坛模块等,这些模块可以用package进行组织,用户的请求URL可以通过namespace进行组织。例如划分为:
<package namespace="/user" ...>...</package>
<package namespace="/forum" ...>...</package>
注意,struts2中,action的name
属性是不可以出现斜线的,比如<action name="/user/hello">
在struts2中是没有这种写法的,/user
应该定义在namespace中。
除此之外,namespace还有一个搜索路径的问题,比如namespace="/user"
,假如用户请求的是/user/a/b/c/xxx.action
,struts2会一层层的进行namespace匹配,先查找/user/a/b/c
,发现没有这个namespace,再查找/user/a/b
,/user/a
,/user
找到该命名空间,存在指定的action,因此匹配xxx.action
请求。也就是说,用户请求/user/a/b/c/xxx.action
,也能正确访问到/user/xxx.action
。struts2的这种复杂机制其实非常鸡肋,尤其是多个、多级namespace存在的情况下,我们实际开发中尽量不要把自己搞晕,合理划分namespace。
action对应一个用户对struts2控制器的请求,一个配置文件中的action元素对应Action
类的一个方法。
.action
或无后缀,注意该属性必须在package中唯一ActionSupport
类,它默认返回successexecute()
如果应用的功能非常复杂,struts.xml
会变得非常巨大,按照模块将配置文件分开,结构比较清晰。分割的配置文件可以通过以下代码引入主配置文件struts.xml
。
<struts>
<include file="xxx.xml"></include>
</struts>