Struts应用采用两个基于XML的配置文件来配置应用.分别为web.xml和struts-config.xml. web.xml适用于所有的Java Web应用,是Web应用的发布描述文件,在Java Servlet规范中对它做了定义.struts-config.xml文件是Struts应用专有的配置文件.
为Struts应用配置web.xml文件
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Struts Examples Application</display-name>
<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- Default -->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/common/404.jsp</location>
</error-page>
</web-app>
1. 配置Struts的ActionServlet
在web.xml中配置ActionServlet有两个步骤.第一步是用<servlet>元素来声明ActionServlet.在<servlet>子元素中,经常会用到<servlet-name>,<servlet-class>和<init-param>等,例如
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
这里应当注意的是,<servlet>元素中的<servlet-name>必须同<servlet-mapping>元素中的<servlet-name>保持一致.<url-pattern>属性为”*.do”,表明ActionServlet负责处理所有以”*.do”扩展名结尾的URL.<init-param>子元素用于配置Servlet初始化参数.例如,以上代码为ActionServlet配置了初始化参数config,config参数是配置Struts的ActionServlet专有的,它用来设置Struts配置文件的相对路径.
2. 配置欢迎文件清单
<welcome-file-list>元素可以包含多个<welcome-file>子元素,当Web容器调用Web应用的欢迎文件时,首先寻找第一个<welcome-file>指定的文件,如果文件存在,将把这个文件返回给客户;如果不存在,Web容器将依次寻找下一个欢迎文件,直到找到为止,如果<welcome-file-list>元素中指定的所有文件都不存在,服务器将向客户端返回”HTTP 404 Not Found”的错误信息.注意,不能在<welcome-file-list>元素中配置Servlet映射,因此不能直接把Struts的Action作为欢迎页面.
3. 配置错误处理
当错误发生时,如果Struts框架不能处理这种错误,就会把错误抛给Web容器.在默认情况下,Web容器会向用户浏览器直接返回原始的错误信息.如果想避免直接让用户看到原始的错误信息,可以在Web应用的发布描述文件(web.xml)中配置<error-page>元素.也可以为Web容器捕或的Java异常配置<error-page>元素,这时候需要设置<exception-type>子元素,它用于指定Java异常类.web容器可能捕获如下异常:
RuntimeException 或 Error
ServletException 或其子类
IOException 或其子类
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/common/system-error.jsp</location>
</error-page>
需要注意的是,在<exception-type>元素中声明的Java异常类必需是以上所列举的情况之一.
4. 配置Struts标签库
Struts框架提供了一些实用的客户化标签库.如果在应用中使用了这些标签库,那么必须在Web应用发布描述文件中配置他们.
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
Struts配置文件
Struts框架在启动时会读入其配置文件,根据配置文件来创建和配置各种Struts组件.在Struts1.1中加入了org.apache.struts.config包,在Struts启动时,会把Struts配置文件中的配置信息读入到内存中,并把它们存放在config包中相关JavaBean类的事例中,org.apache.struts.config包中的每一个类都和Struts配置文件中特定的配置元素对应,例如,<action>元素和ActionMaping类对应,<forword>元素和ActionForward类对应.由于一个<action>元素可以包含多个<forward>子元素,因此,ActionMapping类和ActionForward类之间存在一对多的关联关系.
1. <struts-config>元素
<struts-config>元素是Struts配置文件的根元素,和它对应的配置类为org.apache.struts.config.ModuleConfig类.<struts-config>元素有8个子元素.注意在配置文件中必须按照DTD指定的先后顺序来配置<struts-config>元素的各个子元素,如果颠倒了这些子元素在配置文件中的顺序,在Struts应用启动时抛出XML解析错误.
2. <data-source>元素
<data-source>元素用来配置应用所需要的数据源.数据源负责建立和特定数据库的连接,许多数据源采用连接池机制实现,以便提高数据库访问性能.下面的代码演示了如何在Struts配置文件中配置数据源
<data-sources>
<!-- 为数据源分配唯一的key值,通过该值来标识特定的数据源 --> <data-source key="dbcp.mysql.ds"
type="org.apache.commons.dbcp.BasicDataSource">
<!-- 初始化时建立连接条数 -->
<set-property property="initialSize" value="1" />
<!-- 最大可建立连接条数 -->
<set-property property="maxActive " value="10" />
<set-property property="username" value="root" />
<set-property property="password" value="" />
<!--
<set-property property="driverClassName"
value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
-->
<!-- 连接数据库所依赖的库文件 -->
<set-property property="driverClassName"
value="com.mysql.jdbc.Driver" />
<!-- 为此数据源添加描述文字 -->
<set-property property="description" value="" />
<!--
<set-property property="url"
value="jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=pubjobs" />
-->
<set-property property="url"
value="jdbc:mysql://127.0.0.1:3306/test" />
<!-- 是否自动提交 -->
<set-property property="defaultAutoCommit" value="true" />
<!-- 连接是否为只读 -->
<set-property property="defaultReadOnly" value="false" />
<!-- 最大响应时间 -->
<set-property property="maxWait " value="15" />
</data-source>
</data-sources>
要使以上配置的数据源正常工作,要注意以下几点
1. 下载commons-dbcp-1.2.x http://jakarta.apache.org/commons/dbcp/ 注意添加dbcp运行时依赖库
2. 加载连接数据库所依赖的库文件
3. 注意用户名,密码,数据库的url地址及驱动类全名
用以下方法可以得到数据源
public ActionForward execute(ActiomMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
………………………..
DataSource ds = getDataSource(rquest);
Connection con = ds.getConnection();
……………………….
}
3. <form-beans>元素
<form-beans>元素来配置多个ActionForm Bean.<form-bean>元素包含零个或多个<from-bea n>子元素.<form-bean>元素主要属性如下
Ø className 指定和<form-bean>元素对应的配置类,默认值为org.apache.struts.config. FormBeanConfig.如果在这里设置自定义的类,该类必须扩展FormBeanConfig类
Ø name 指定该ActionForm Bean 的唯一标识符,整个Struts框架用该标识来引用这个bean,该属性是必须的.
Ø type 指定ActionForm类的完整类名,该属性是必须的.
注意,在配置<form-bean>元素的type属性时,必须给出ActionForm类的完整类名,即应该把类的包名也包含在内,如下所示.
<form-beans type="org.apache.struts.webapp.examples.CustomFormBean">
<form-bean name="example"
type="org.apache.struts.webapp.examples.CustomFormBean">
</form-bean>
</form-beans>
如果配置动态ActionForm Bean, 还必须配置<form-bean>元素的<form-property>子元素,<form-property>元素用来指定表单字段,它有四个属性,如下所示.
Ø className 指定和<form-property>元素对应的配置类,默认值为org.apache.struts.config. FormPropertyConfig
Ø initial 以自符串的形式设置表单字段的初始值,如果没有设置该属性,则基本类型的表单字段的默认值为0,对象类型的表单字段的默认值为null
Ø name 指定表单字段的名字,该属性是必须的.
Ø type 指定表单字段的类型.如果表单字段为本Java类,必须给出完整类名.该属性是必须的.
<form-bean name=”example”
type=”org.apache.struts.action.DynaActionForm”>
<form-property name=”example” type=”java.lang.String” />
</form-bean>
在Action中获取动态ActionForm Bean
public ActionForward execute(ActiomMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
………………………..
DynaActionForm dynaForm = (DynaActionForm) form;
String example = dynaForm.get(“example”);
……………………….
}
4. <global-exceptions>元素
<global-exceptions>元素用于配置异常处理,包含零个或者多个<exception>元素.
<global-exception>元素用来设置Java异常和异常处理类 org.apache.struts.action. ExceptionHandler之间的映射.如下对<exception>元素的属性做了说明.
Ø className 指定和<exception>元素对应的配置类.默认值为 org.apache.struts.config. ExceptionConfig
Ø hander 指定异常处理类.默认值为org.apache.struts.action.ExceptionHandler
Ø key 指定Resource Bundle中描述该异常的消息Key
Ø path 指定当异常发生时的转发路径
Ø scope 指定ActionMessages实例的存放范围,可选值包扩request和session.默认值 为request
Ø type 指定所需处理的异常类的名字.此项是必须的
Ø bundle 指定Resource Bundle
5. <global-forwards>元素
<global-forwards>元素用来声明全局的关系转发.<global-forwards>元素由零个或多个<forward>子元素组成.<forward>元素用于把一个逻辑名映射到特定的URL.通过这种方式,Action类或者JSP文件无需指定实际的URL,只要指定逻辑名就能实现请求转发或者重定向,这可以减弱控制组件和视图组件之间的耦合,并且有助于维护JSP文件.
Ø className 和<forward>元素对应的配置类,默认值为org.apache.struts.action. ActionForward
Ø contextRelative 如果此项为true,表示当path属性以”/”开头时,给出的是相对于当前上下文的URL.默认值为false.
Ø name 转发路径的逻辑名.次项是必须的.
Ø path 指定转发或重定向的URI.此项是必需的.必须以”/”开头.当contextRelative属性为false时,表示URI路径相对于当前应用;当contextRelative属性为true时,表示URI路径相对于当前上下文.
Ø redirect 当此项为true时,表示执行重定向操作;当此项为false时,表示执行请求转发操作.
6. <action-mapping>元素
<action-mapping>元素包含零个或者多个<action>元素.<action>元素描述了从特定的请求路径到相应的Action类的映射.在<action>元素可以包含多个<exception>和<forward>子元素,它们分别配置局部的异常处理及请求转发仅被当前的Action所访问.<action>元素常用属性如下
Ø attribute 设置和Action关联的ActionForm Bean在request或session范围内的属性key,例如,名为”myBean”的FormBean存在于request范围内,那么request. getAttribute(“myBean”)就可以返回该Bean的实例.此项可选.
Ø className 和<action>元素对应的配置类.默认值为org.apache.struts.action. ActionMapping
Ø forward 指定转发的URL路径
Ø include 指定包含的URL路径
Ø intput 指定包含输入表单的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.action.ForwardAction类相同,include属性的作用和org.apache.struts.action.IncludeAction类相同
7. <controller>元素
<controller>元素用于配置ActionServlet.以下对<controller>元素的属性做了描述
Ø bufferSize 指定上载文件的输入缓冲的大小.该属性为可选项,默认为4096
Ø className 指定和<controller>元素对应的配置类.默认值为org.apache.struts.config. ControllerConfig.
Ø contentType 指定响应结果的内容类型和字符编码.该属性为可选项,默认值为test/html.如果在Action和JSP网页中也设置了内容类型和字符编码,将会覆盖设置.
Ø locale 指定是否把Local对象保存到当前用户的Session中.默认为false
Ø processorClass 指定负责处理请求的Java类的完整类名.默认值为org.apache.struts.action. RequestProcessor类
Ø tempDir 指定处理文件上载的临时工作目录.如果此项没有设置,将采用Servlet容器为Web应用分配的临时工作目录
Ø nochache 如果为true,在响应结果中将加入特定的头参数:Paragme,Cache-Control,和Expires,防止页面被存储在客户浏览器的缓寸中,默认值为false.
8. <message-resource>元素
<message-resources>元素用来配置Resource Bundle,Resource Bundle用于存放本地化消息文本,<message-resource>元素的属性如下
Ø className 和<message-resources>元素对应的配置类.默认值为org.aplache.struts.config. MessageResourcesConfig
Ø factory 指定消息资源的工厂类.默认值为org.apache.struts.util. PropertyMessageResourcesFactory类
Ø key 指定Resourcer Bundle存放在ServletContext对象中时采用的属性key.默认值为由Globals.MESSAGES_KEY定义的字符串常量,只允许有一个Resource Bundle采用默认的属性key.
Ø null 指定MessageResources类如何处理未知的消息key.如果此项为true,将返回空字符串.如果此项为false,将返回类似”???global.lable.missing???”的字符串.该属性可选,默认值为true.
Ø parameter 指定Resource Bundle的消息资源文件名.
9. <plug-in>元素
<plug-in>元素用于配置Struts插件.<plug-in>元素的属性如下
<className> 指定Struts插件类. 插件类必须实现org.apache.struts.action.PlugIn接口
<plug-in>元素可以包含零个或多个<set-property>子元素.以下是<plug-in>元素的配置代码示例.
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/org/apache/struts/validator/validator-rules.xml,
/WEB-INF/validator/validation.xml,
/WEB-INF/validator/validation-bundles.xml,
/WEB-INF/validator/validation-i18nVariables.xml,
/WEB-INF/validator/validation-type.xml,
/WEB-INF/validator/validation-validwhen.xml" />
<set-property property="stopOnFirstError" value="true" />
</plug-in>