配置文件详解

这篇笔记记录了struts2框架常用的配置属性,供开发时随时查阅。

struts2的配置文件

我们使用struts2框架时,需要编写自己的配置文件,除此之外,框架本身通过默认的配置文件提供默认的配置。

struts2框架会按照以下顺序加载配置文件:

  • default.properties 在struts2-core-xxx/org/apache/struts2下
  • struts-default.xml 在struts2-core-xxx下
  • struts-plugin.xml 在struts2插件jar包下
  • struts.xml 用户自定义
  • struts.properties 用户自定义
  • web.xml 用户自定义

注意:struts2的配置文件是按照顺序加载的,后面的配置会覆盖前面的配置,达到用户修改默认配置的目的。

常用的struts2配置常量

struts2预定义了一些常量,我们可以在自定义的struts.properties或struts.xml中覆盖修改。

  • struts.i18n.encoding 默认为UTF-8
  • struts.action.extension action请求后缀,默认值为action,,即请求xxx.actionxxx都会被对应配置的action处理
  • struts.serve.static.browserCache 设置浏览器是否缓存静态内容,默认true,开发阶段建议关闭
  • struts.configuration.xml.reload 配置文件修改后是否自动重新加载,默认false,开发阶段建议打开
  • struts.devMode 开发模式下打开可以输出更详细的错误信息

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>
    <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>

package元素

struts2中,控制器Action可以通过package在配置文件中进行分包,这样做的好处是结构清晰。

  • name package的名字,值是任意的,但是建议取一个有意义的名字
  • extends 一个package配置可以继承另一个package配置,值是package的名字
  • namespace 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元素

action对应一个用户对struts2控制器的请求,一个配置文件中的action元素对应Action类的一个方法。

  • name 用户请求的名称,struts2默认后缀是.action或无后缀,注意该属性必须在package中唯一
  • class action对应动作类的全名,如果不配置该属性,默认值是ActionSupport类,它默认返回success
  • method 指定动作类的动作方法,默认值是execute()

多配置文件

如果应用的功能非常复杂,struts.xml会变得非常巨大,按照模块将配置文件分开,结构比较清晰。分割的配置文件可以通过以下代码引入主配置文件struts.xml

<struts>
  <include file="xxx.xml"></include>
</struts>
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap