1、<struts-config>
元素
<struts-cofnig> 元素是 Struts 配置文件的根元素。<struts-config> 元素有 8 个子元素。在
Struts 配置文件中,必须按照它的 DTD 指定的先后顺序来配置 <struts-config> 元素的各个子元素,如果颠倒了这些子元素在配置文件中的顺序,在 Struts 应用启动时就会生成 XML 解析错误。
它的DTD定义如下:
1 |
<!ELEMENT struts-config( |
2 |
data-sources?,form-beans?,global-exception?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*) |
3 |
)> |
配置时要按照上面的顺序。
2、 <form-beans> 元素
元素包含零个或多个 <form-bean> 子元素。每个 <form-bean> 元素又包含多个属性。
属性 | 描述 |
className | 指定和 <form-bean> 元素对应的配置类,默认值为 org.apache.struts.config.FormBeanConfig 。如果在这里设置自定义的类,该类必须扩展 FormBeanConfig 类 |
name | 指定该 ActionForm Bean 的唯一标识符,整个 Struts 框架用该标识符来引用这个 bean 。该属性是必需的。 |
type | 指定 ActionForm 类的完整类名(类的包名也包含在内),该属性是必需的 |
1 |
< form-beans > |
2 |
< form-bean name = "HelloForm" type = "com.yourcompany.struts.form.HelloForm" /> |
3 |
</ form-beans > |
如果配置动态 ActionForm Bean ,还必须配置 <form-bean> 元素的 <form-property> 子元素。 <form-property> 元素用来指定表单字段,它有四个属性。
属性 | 描述 |
className | 指定和 <form-property> 元素对应的配置类,默认值为 org.apache.struts.config.FormPropertyConfig |
initial | 以字符串的形式设置表单字段的初始值。如果没有设置该属性,则基本类型的表单字段的默认值为 0 ,对象类型的表单字段的默认值为 null |
name | 指定表单字段的名字。该属性是必需的 |
type | 指定表单字段的类型。如果表单资源为 Java 类,必须给出完整的类名。该属性是必需的。 |
1 |
< form-beans > |
2 |
< form-bean name = "HelloForm" type = "com.yourcompany.struts.form.HelloForm" /> |
3 |
< form-bean name = "userForm" type = "org.apache.struts.DynaActionForm" > |
4 |
< form-property name = "firstName" type = "java.long.String" ></ form-property > |
5 |
< form-property name = "lastName" type = "java.long.String" ></ form-property > |
6 |
< form-property name = "age" type = "java.lang.Integer" initial = "18" ></ form-property > |
7 |
</ form-bean > |
8 |
</ form-beans > |
3、<global-exceptions> 元素
元素可以包含零个或者多个 <exception> 元素。 <exception> 元素用来设置 Java 异常和异常处理类 org.apache.struts.action.ExceptionHandler 之间的映射。
属性 | 描述 |
className | 指定和 <exception> 元素对应的配置类。默认值为 org.apache.struts.config.ExceptionConfig |
handler | 指定异常处理类。默认值为 org.apache.struts.action.ExceptionHandler |
key | 指定在 Resource Bundle 中描述该异常的消息 key |
path | 指定当异常发生时的转发路径 |
scope | 指定 ActionMessages 实例的存放范围,可选值包括 request 和 session ,此项的默认值为 request |
type | 指定所需处理的异常类的名字。此项是必需的 |
bundle | 指定 Resource Bundle |
1 |
< STRONG >< global-exception > |
2 |
< exception |
3 |
key = "global.error.invalidlogin" |
4 |
path = "/security/signin.jsp" |
5 |
scope = "request" |
6 |
type = "netstore.framework.exception.InvalidLoginException" |
7 |
/>
|
8 |
</ global-exception > </ STRONG > |
4、 <global-forwards> 元素
元素由零个或者多个 <forward> 元素组成。 <forward> 元素用于把一个逻辑名映射到特定的 URL 。通过这种方式, Action 类或者 JSP 文件无需要指定实际的 URL ,只要指定逻辑名就能实现请求转发或者重定向,这可是减弱控制组件和视图组件之间的耦合,并且有助于维护 JSP 文件。
属性 | 描述 |
className | 和 <forward> 元素对应的配置类,默认值为 org.apache.struts.action.ActionForard |
contextRelative | 如果此项为 true ,表示当 path 属性以“ / ”开头时,给出的是相对于当前上下文的 URL 。此项的默认值为 false |
name | 转发路径的逻辑名。此项是必需的 |
path | 指定转发或重定向的 URL 。此项是必需的,必需以“ / ”开头。当 contextRelative 属性为 false 时,表示 URL 路径相对于当前应用 (application-relative) ;当 contextRelative 属性为 true 时,表示 URL 路径相对于当前上下文 (context-relative) |
redirect | 当此项为 true 时,表示执行重定向操作;当此项为 false 时,表示执行请求转发操作。此项默认值为 false |
例如:
1 |
< global-forwards > |
2 |
< forward name = "forward1" path = "/Action1.do" ></ forward > |
3 |
< forward name = "forward2" path = "/JSP2.jsp" ></ forward > |
4 |
</ global-forwards >< SPAN style = "FONT-FAMILY: SimSun" > </ SPAN > |
如果JSP1.jsp把请求转发给Action1可以<html:link forward="forward1">/或者 <logic:forward name="forward1"/>
如果Action1的excecute()方法把请求转发给JSP2.jsp的话可以这样:return(mapping.findForward("forward2"));
5、<action-mappings> 元素
Action 类的映射。
子元素代表全局的请求转发。在不同位置配置 <exception> 和 <forward> 元素的语法和属性是一样的。
属性 | 描述 |
attribute | 设置和 Action 关联的 ActionForm Bean 在 request 或 session 范围内的属性 key 。例如,假定 Form Bean 存在于 request 范围内,并且此项为“ myBean ”,那么 request.getAttribute(“MyBean”) 就可以返回该 Bean 的实例。此项为可选项。 |
className | 和 <action> 元素对应的配置元素。默认值为 org.apache.struts.action.ActionMapping |
forward | 指定转发的 URL 路径 |
include | 指定包含的 URL 路径 |
input | 指定包含输入表单的 URL 路径。当表单验证失败时,将把请求转发到该 URL |
name | 指定和该 Action 关联的 ActionForm Bean 的名字。该名字必需在 <form-bean> 元素中定义过。此项是可选项 |
path | 指定访问 Action 的路径,它以“ / ”开头,没有扩展名 |
parameter | 指定 Action 的配置参数。在 Action 类的 execute() 方法中,可以调用 ActionMapping 对象的 getParameter() 方法来读取该配置参数 |
roles | 指定允许调用该 Action 的安全角色。多个角色之间以逗号隔开。在处理请求时, RequestProcessor 会根据该配置项来决定用户是否有调用 Action 的权限 |
scope | 指定 ActionForm Bean 的存在范围,可选值为 request 和 session 。默认值为 session |
type | 指定 Action 类的完整类名 |
unknown | 如果此项为 true ,表示可以处理用户发出的所有无效的 Action URL 。默认值为 false |
validate | 指定是否要先调用 ActionForm Bean 的 validate() 方法。默认值为 true |
提示: <action> 元素的 forward 、 include 和 type 属性相互排斥,也就是说只能设置其中的一项。 forward 属性的作用和 org.apache.struts.actions.ForwardAction
类相同。 Include 属性的作用和 org.apache.struts.actions.IncludeAction 类相同。
如果在 <action> 元素中定义了局部的 <forward> 元素,它的优先级别高于全局的 <forward> 元素。
例如:
01 |
< action-mappings > |
02 |
<!-- input 验证失败时的转发路径 --> |
03 |
<!-- path请求访问的Action的路径 --> |
04 |
<!-- <forward>定义请求转发的路径 --> |
05 |
<!-- path指明调用者(JSP)能通过中心控制器ActionServlet找到该Action --> |
06 |
< action |
07 |
path = "/HelloWorld" |
08 |
type = "com.yourcompany.struts.action.HelloAction" |
09 |
name = "HelloForm" |
10 |
scope = "request" |
11 |
validate = "true" |
12 |
input = "/hello.jsp" > |
13 |
< forward name = "SayHello" path = "/hello.jsp" /> |
14 |
</ action > |
15 |
</ action-mapping > |
工作原理:
这段代码表明,如果用户的请求的URI为"HelloWord.do",那么Struts框架会把请求转发给Hello.Action;与HelloAction关联的表单为:HelloForm,它位于request范围。Struts框架会首先在配置文件中检索匹配的<form-bean>元素
1 |
< form-beans > |
2 |
< form-bean name = "HelloForm" type = "com.yourcompany.struts.form.HelloForm" /> |
3 |
</ form-beans > |
再把请求转发给HelloAction之前,先会调用HelloForm的validate()方法,如果表单验证失败则把请求转发给<action>元素的
input属性指定的hello.jsp文件。
对应的hello.jsp文件如下:
1 |
< html:form action = "/HelloWorld.do" focus = "userName" > |
2 |
< bean:message key = "hello.jsp.promt.person" /> |
3 |
< html:text property = "userName" maxlength = "16" size = "16" ></ html:text > |
4 |
< html:submit property = "submit" value = "Submit" ></ html:submit > |
5 |
< html:reset ></ html:reset > |
6 |
</ html:form > |
6、<controller> 元素
属性 | 描述 |
bufferSize | 指定上载文件的输入缓冲的大小。该属性为可选项,默认值为 4096 。 |
className | 指定和 <controller> 元素对应的配置类。默认值为 org.apache.struts.config.ControllerConfig 。 |
contentType | 指定响应结果的内容类型和字符编码。该属性为可选项,默认值为 text/html 。如果在 Action 和 JSP 网页中也设置了内容类型和字符编码,将会覆盖该设置 |
locale | 指定是否把 Locale 对象保存到当前用户的 Session 中。默认值为 false |
processorClass | 指定负责处理请求的 Java 类的完整类名。默认值为 org.apache.struts.action.RequestProcessor 。如果把此项设置为自定义的类,那么应该保持该类扩展了 org.apache.struts.action.RequestProcessor 类 |
tempDir | 指定处理文件上传的临时目录。如果此项没有设置,将采用 Servlet 容器为 Web 应用分配的临时工作目录 |
nochache | 如果为 true ,在响应结果中将加入特定的头参数: Pragma , Cache-Control 和 Expires ,防止页面被存储在客户浏览器的缓存中。默认值为 false |
如果应用包含多个子应用,可以在每个子应用的 Struts 配置文件中配置 <controller> 元素。这样,尽管这些子应用共享同一个 ActionServlet 对象,但是它们可以使用不同的 RequestProcessor 类。
1 |
< controller contentType = "tex/html" ; charset = "UTF-8" |
2 |
locale = "true" |
3 |
processClass = "CustomRequestProcessor" |
4 |
/> |
7、 <message-resources> 元素
属性 | 描述 |
className | 和 <message-resources> 元素对应的配置类。默认值为 org.apache.struts.config.MessageResourcesConfig |
factory | 指定消息资源的工厂类。默认值为 org.apache.struts.util.PropertyMessageResourcesFactory 类 |
key | 指定 Resource Bundle 存放在 ServletContext 对象中时采用的属性 key 。默认值为由 Globals.MESSAGES_KEY 定义的字符串常量。只允许有一个 Resource Bundle 采用默认的属性 key |
null | 指定 MessageResources 类如何处理未知的消息 key 。如果此项为 true ,将返回空字符串。如果此项为 false ,将返回类似“ ???global.label.missing??? ”的字符串。该属性为可选项,默认值为 true |
parameter | 指定 Resource Bundle 的消息资源文件名。 |
许多 Struts 客户化标签都通过 bundle 属性来指定 Resource Bundle ,标签的 bundle 属性和 <message-resources> 元素的 key 属性匹配。
如:<bean:message key="hello.jsp.page.hello"/>调用
<bean:message key="hello.jsp.page.hello" bundle="images">指定bundle
<message-resources parameter="com.yourcompany.struts.ApplicationResources1" />配置
<message-resources parameter="com.yourcompany.struts.ApplicationResources2" key="images" />配置
hello.jsp.page.hello=Hello com.yourcompany.struts.ApplicationResources1.2定义