Struts 2 配置文件
本章将带大家了解 Struts 2 应用程序所需的基本配置。 在这里,我们将看到可以借助一些重要的配置文件(如 web.xml、struts.xml、strutsconfig.xml 和 struts.properties)来进行配置。
老实说,我们可以从使用 web.xml 和 struts.xml 配置文件开始工作(正如在上一章中已经看到的那样,我们的示例使用这两个文件工作)。 但是,我们还将解释其他配置文件。
web.xml 配置文件
web.xml 配置文件是一个 J2EE 配置文件,它决定了 servlet 容器如何处理 HTTP 请求的元素。 它不是严格意义上的 Struts2 配置文件,但它是需要配置才能使 Struts2 工作的文件。
如前所述,此文件为任何 Web 应用程序提供了一个入口点。 Struts2 应用程序的入口点将是部署描述符(web.xml)中定义的过滤器。 因此,我们将在 web.xml 中定义一个 FilterDispatcher
类的条目。 web.xml 文件需要在文件夹 Web/WEB-INF
下创建。
如果我们在没有模板或生成它的工具(如 IDEA 或 Maven2)的帮助下开始,这是我们需要配置的第一个配置文件。
以下是我们在上一个示例中使用的 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 2 过滤器映射到 /*
,而不是 /*.action
,这意味着所有 url 都将被 struts 过滤器解析。 我们将在阅读注解章节时介绍这一点。
注意:如果使用的 Struts 包 struts2-core.X.X.X.jar 为 2.1.3 或者更低版本,则使用 org.apache.struts2.dispatcher.FilterDispatcher。 如果使用的是 2.3.X 版本的,则用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。而我们在本教程中使用的是 2.5.X版本的。因此我们使用上面配置项。
struts.xml 配置文件
struts.xml 文件包含我们将在开发操作时修改的配置信息。 此文件可用于覆盖应用程序的默认设置,例如 struts.devMode = false
和属性文件中定义的其他设置。 该文件可以在文件夹 WEB-INF/classes 下创建。
让我们看看我们在上一章解释的 Hello World 示例中创建的 struts.xml 文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.jiyik.struts2.action.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
首先要注意的是 DOCTYPE
。 如我们的小示例所示,所有 struts 配置文件都需要具有正确的 doctype。 <struts>
是根标签元素,在它下面我们使用 <package>
标签声明不同的包。 这里 <package>
允许配置的分离和模块化。 当我们有一个大型项目并且项目分为不同的模块时,这非常有用。
例如,如果我们项目具有三个域 - business_application、customer_application 和 staff_application,那么我们可以创建三个包并将关联的操作存储在适当的包中。
package
标签具有以下属性
序号 | 属性 | 描述 |
---|---|---|
1 | name (required) | 包的唯一标识符 |
2 | extends | 这个包是从哪个包扩展而来的? 默认情况下,我们使用 struts-default 作为基础包。 |
3 | abstract | 如果标记为 true,则该软件包不可用于最终用户消费。 |
4 | namespace | 操作的唯一命名空间 |
应该使用 constant
标签以及 name 和 value 属性来覆盖 default.properties
中定义的以下任何属性,就像我们刚刚设置 struts.devMode
属性一样。设置 struts.devMode
属性允许我们在日志文件中查看更多调试消息。
我们定义 action 标签对应于我们想要访问的每个 URL,并且我们定义了一个带有 execute()
方法的类,每当我们访问相应的 URL 时都会访问该类。
结果确定执行操作后返回给浏览器的内容。从操作返回的字符串应该是结果的名称。结果按上述每个操作配置,或者作为“global”结果配置,可用于包中的每个操作。结果具有可选的 name 和 type 属性。默认名称值为“success”。
struts.xml 文件会随着时间的推移而变大,因此通过包来拆分它是一种模块化方法,但 Struts 提供了另一种模块化 struts.xml 文件的方法。我们可以将文件拆分为多个 xml 文件并按以下方式导入它们。
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="my-struts1.xml"/>
<include file="my-struts2.xml"/>
</struts>
我们没有涉及的另一个配置文件是 struts-default.xml。 该文件包含 Struts 的标准配置设置,我们不必为 99.99% 的项目触及这些设置。 出于这个原因,我们不会对此文件进行太多详细介绍。 如果有兴趣,请查看 struts2-core-2.5.30.jar 文件中的 default.properties 文件。
struts-config.xml 配置文件
struts-config.xml 配置文件是 Web 客户端中的 View 和 Model 组件之间的链接,但是对于 99.99% 的项目,我们不必触及这些设置。
配置文件基本上包含以下主要元素
序号 | 拦截器 | 描述 |
---|---|---|
1 | struts-config | 这是配置文件的根节点。 |
2 | form-beans | 这是我们将 ActionForm 子类映射到名称的地方。 在 strutsconfig.xml 文件的其余部分,甚至在 JSP 页面上,我们都使用此名称作为 ActionForm 的别名。 |
3 | global forwards | 此部分将 webapp 上的页面映射到名称。 我们可以使用此名称来引用实际页面。 这可以避免在网页上对 URL 进行硬编码。 |
4 | action-mappings | 这是声明表单处理程序的地方,它们也称为操作映射。 |
5 | controller | 本节配置 Struts 内部,在实际情况中很少使用。 |
6 | plug-in | 本节告诉 Struts 在哪里可以找到属性文件,其中包含提示和错误消息 |
以下是示例 struts-config.xml 文件
<?xml version = "1.0" Encoding = "ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
<struts-config>
<!-- ========== Form Bean Definitions ============ -->
<form-beans>
<form-bean name = "login" type = "test.struts.LoginForm" />
</form-beans>
<!-- ========== Global Forward Definitions ========= -->
<global-forwards>
</global-forwards>
<!-- ========== Action Mapping Definitions ======== -->
<action-mappings>
<action
path = "/login"
type = "test.struts.LoginAction" >
<forward name = "valid" path = "/jsp/MainMenu.jsp" />
<forward name = "invalid" path = "/jsp/LoginView.jsp" />
</action>
</action-mappings>
<!-- ========== Controller Definitions ======== -->
<controller contentType = "text/html;charset = UTF-8"
debug = "3" maxFileSize = "1.618M" locale = "true" nocache = "true"/>
</struts-config>
struts.properties 配置文件
此配置文件提供了一种更改框架默认行为的机制。 实际上,struts.properties
配置文件中包含的所有属性也可以在 web.xml 中使用 init-param
进行配置,也可以使用 struts.xml 配置文件中的 constant
标签进行配置。 但是,如果我们希望将这些东西分开并且更具体地使用 struts,那么可以在 WEB-INF/classes 文件夹下创建这个文件。
此文件中配置的值将覆盖 struts2-core-x.y.z.jar 发行版中包含的 default.properties 中配置的默认值。 我们可能会考虑使用 struts.properties 文件更改几个属性
### 当设置为 true 时,Struts 将对开发人员更加友好
struts.devMode = true
### 允许重新加载国际化文件
struts.i18n.reload = true
### 启用 XML 配置文件的重新加载
struts.configuration.xml.reload = true
### 设置服务器运行的端口
struts.url.http.port = 8080
这里任何以井号 (#)
开头的行都将被假定为注释,Struts 2 将忽略它。