文档库 最新最全的文档下载
当前位置:文档库 › 4详细配置struts应用

4详细配置struts应用

struts应用采用两个基于xml的配置文件来配置应用,这两个配置文件为web.xml和struts-config.xml。web.xml适用于所有的java web应用,它是Web应用的发布描述文件,对于struts应用,在web.xml文件中除了配置java web应用的常规信息,还应该配置和struts相关的特殊信息。

struts-config.xml文件是struts应用专有的配置文件。

1为struts应用配置web.xml文件
...作为web.xml的根元素,元素必须出现在元素的前面,元素必须出现在元素的前面,必须在元素的前面。(这些顺序要严格遵守,否则启动会出错)

1》配置struts的ActionServlet

action
org.apache.struts.action.ActionServlet

元素用来定义Servlet的名称,元素用来指定Servlet的完整类名。

2》配置元素
它用来指定ActionServlet可以处理那些URL

action
*.do

注意元素中的子元素必须和元素中的子元素匹配。
属性为*.do,表明ActionServlet负责处理以*.do扩展名结尾的URL。

3》声明ActionServlet的初始化参数
初始化参数用来对Servlet的运行时环境进行初始配置。子元素定义在....元素中.

config
/WEB-INF/struts-config.xml

为ActionServlet配置了初始化参数config,config参数是配置struts的ActionServlet专有的,它用来设置struts配置文件的相对路径。

4》配置欢迎文件清单
元素用来设置欢迎文件清单。

welcome.jsp
index.jsp


5》配置错误处理
当错误发生时,如果struts框架不能处理这种错误,就把错误抛给Web容器,在默认情况下,web容器会向用户浏览器直接返回原始的错误信息,如果想避免直接让用户看到原始错误信息,可以在Web应用的发布描述文件中配置元素。如:

404
/common/404.jsp


500
/common/500.jsp

/common/500.jsp表示当前Web应用目录下的common目录下500.jsp文件

也可以在元素中为Web容器捕获java异常,这时需要设置。Web容器可能捕获如下异常:
RuntimeException或Error
ServletException或它的子类
IOException或它的子类

javax.servlet.ServletException


/common/system_error.jsp



java.io.IOException
/common/system_ioerror.jsp


6》配置struts标签库
struts框架提供了一些使用的客户化的标签库,如果在实际的应用中使用了这些标签库,那必须在Web应用发布描述文件中配置它们,配置元素

/tags/struts-bean
/WEB-INF/struts-bean.tld



2为struts应用配置struts-config.xml文件
文档类型定义(DTD,Document Type Definition)对xml文档的格式做了定义。每个xml都有自己的DTD。
是struts-config.xml文件的根元素,该元素有8个子元素,它的DTD定义如下:
aciton-mapping?,controller?,message-resources*,plug-in*)
,:AND,要求严格遵从顺序要求。
+:出现一次或多次。
*:出现零次或多次。
?:可选,不出现或出现一次。
():一组要共同匹配的表达式。
|:OR,或。
必须按照DTD指定的先后顺序来配置元素的各个子元素。如果颠倒顺序,启动apache加载struts会出错。

1》元素
元素用来配置多个ActionForm Bean,元素包含另个或多个子元素。的主要属性:
name,指定该ActionForm Bean的唯一标识符,该属性必须
type,指定ActionForm类的完整类名,该属性必须。

type="app.InputForm"/>


2》元素
元素用于配置异常处理,元素可以包含零个或多个元素。 元素的属性:
key,指定在Resource Bundle(即:资源文件)中描述该异常的消息key
path,指定当异常发生是的转发路径
scope,指定ActionMessage实力的存放范围。可选值为request,session。
type,指定所需处理的异常类的名字,此项必须
bundle,指定Resoure Bundle

key="global.error.invalidlogin"
path="/secutrity/signin.jsp"
scope="request"
type="netstore.framework.exception.InvalidaLoginExdeption"/>


3》元素
元素用来声明全局的转发关系。元素由零个或多个元素组成。元素用于把一个逻辑名映射到特定的URL,通过这种发放,Action类或JSP文件无需指定实际的URL,只要逻辑名就能实现请求转发或重定向。元素的属性:
name,转发路径的逻辑名,此项是必需的。
path,指定转发或重定向的URL,此项是必须的,必须以/开头,表示URL路径相对于当前Web应用。

redirect,此项为true时,表示执行重定向操作。如果此项为false,表示执行执行请求转发操作。默认为false

重定向与请求转发的区别:
重定向的目标页面或servlet对象无法使用request获取用户提交的数据,但使用请求转发可以。





如果把请求转发给Action1,可以使用以下代码:


4》元素
元素包含零个或多个元素,元素描述了从特定的请求路径到相应的Action类的映射。在元素中可以包含多个子元素,它们的是配置局部的异常处理及请求转发仅被当前的Action所访问,和全局的相比,语法是一样的。对于当前的元素来说,局部的元素的优先级别高于全局的元素。元素的属性:

attribute,设置和Action关联的ActionForm Bean在request或session范围内的属性key。例如,假定Form Bean存在于request范围内,并且此项设为"myBean",那么request.getAttribute("myBean")就可以返回该Bean的实例。

forward,指定转发的URL路径,是action的属性并非它的子元素

include,指定包含的URL路径,是action的属性并非它的子元素

input,指定包含输入表单的URL路径,当表单验证失败时,将把请求转发到该URL。

name,指定和该Action关联的ActionForm Bean的名字,改名字必须在元素中定义过,可选

path,指定访问Action的路径,它以/开头

parameter,指定Action的配置参数,在Action的execute()方法中,可以调用ActionMapping对象的getParameter()方法获得配置参数

roles,指定允许调用Action的安全角色,多个角色之间以逗号隔开,在处理请求时,RequestPrecessor会根据该配置项来决定用户是否调用Action权限。

scope,指定ActionForm Bean的存在范围,可选为request和session,默认为session

type,指定Action类的完整类名

unKnown,如果此项为true,表示可以处理用户发出所有无效Action URL,默认为false。

validate,指定是否要先调用ActionForm Bean的validate()方法,默认为true
元素的forward,include和type属性相互排斥,只能设置其中一项。

path="/registration"
name="userRegistrationForm"
input="/userRegistration.jsp"
attribute="user"
scope="request"
validate="true"
type="https://www.wendangku.net/doc/083857217.html,erRegistrationAction">




d name="welcome" path="/welcome.jsp"/>
path="/userRegistration.jsp"
type="java.sql.SQLException"/>


*****************************
在一般情况下,actionForm是被存储在一定的scope中(request或session,通过action的scope属性来配置),当我们在配置时,指定name而不指定attribute,那么指定的name值就作为actionForm存储在scope中的key值,我们可以在action中通过httpServletRequest.getAttribute("指定的name属性值")来获得这个actionForm;当我们既配置了name又配置了attribute,那么actionForm存储在scope中的key值就采用attribute属性指定的值了,这时要通过httpServletRequest.getAttribute("指定的attribute属性值")来获得actionForm,此时通过httpServletRequest.getAttribute("指定的name属性值")是不能获得actionForm的。

所以,是否配置attribute属性就决定了actionForm存储在scope中的key值是采用name,还是采用attribute
****************************

5》元素
元素用于配置ActionServlet,元素的属性:
bufferSize,指定上载文件的输入缓冲的大小,该属性可选,默认为4096

contentType,指定响应结果的内容类型和字符编码,该属性为可选。默认为text/html,如果在Action和JSP万也中也设置了内容类型和字符编码,将会覆盖该设置。

precessorClass,指定负责处理请求的java类的完整类名,默认为org.apache,struts.action.RequestProcessor

元素的使用较少,主要用来覆盖一些默认的struts配置,下面是几个常用的struts设置:
maxFileSize,指定在文件上传时的最大尺寸,可以是K,M,G作为单位,它的值只能是整数不能为小数。

nocache,告诉struts是否应该缓冲内容,nocache="true"将不缓冲内容。默认为true

contentType,指定默认的ContentType字段值,如果要发送的内容的默认格式是html,我们可以指定contentType的值为text/html.
例如:

6》元素
元素用来配置Resource Bundle,Resource Bundle用于存放本地化消息文本。例如:
parameter="cn.hxex.tutorial.MessageResources"/>
元素还有一个key属性用于在标签时必速要使用bundle属性指定这个可以找到.properties资源文件。
我们在cn/hxex/tutorial目录下放入MessageResources_en.propertie和MessageResources_zh.properties
两个文件,而在配置文件中只需写上cn.hxex.tutorial.MessageResources,系统会自动根据中英文还寻找相应的文件。因为不同的语言用下划线加上代码来区分如:_zh,_en,_fr
中文、英文、法文的属性文件。这三个属性文

件的文件名如下:
中文:MessageResources_zh.properties
英文:MessageResources_en.properties
法文:MessageResources_fr.properties

由于语言还可以继续细分,如中文可以分为简体和繁体,英文也可以分为不同国家或地区的英文,如爱尔兰、澳大利亚等。因此,对于更细化的语言,可以在属性文件后面再加一个代表国家或地区的后缀,如application_zh_TW.properties代表中国台湾所使用的繁体中文,application_en_AU.properties代表澳大利亚英文。Struts在寻找属性文件时,会首先查找带有国家或地区后缀的属性文件,如果这类文件不存在,会继续查找只有语言后缀的属性文件,如果还不存在,最后会读取默认属性文件,也就是application.properties的内容。假设我们在“语言首选项”中选择了“中文(台湾) [zh-tw]”,那么读取文件的顺序(从最左边开始,如果文件不存在,依次读取右边的文件)如下:
application_zh_TW.properties > application_zh.properties > application.properties
如果选择的语言是“中文 [zh]”,那么就直接从application_zh.properties开始读取。
***********
在建立属性文件时要注意,后缀的连接符为下划线( _ ),而不能用减号( - )


代表语言的后缀(如zh、fr、en等)必须小写,而代表国家或地区的后缀(如CN、TW、AU等)必须大写。如写成application_ZH_tw.properties是不正确的。
**********

7》元素,用于配置struts插件,它的属性:
className,自定struts插件类,插件类必须实现org.apache.struts.action.PlugIn接口。如加载validator:

value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xaml"/>


Struts实际上就是一个java类,它在struts应用启动时被初始化,在应用关闭时被销毁。任何作为插件的java类都应该实现org.apache.struts.action.PlugIn接口,PlugIn接口包括两个方法:
public interface Plugin{
public void init(ActionServlet servlet,ApplicationConfig config)throws ServletException;

public void destroy();
}
struts框架调用每个插件类的init()方法进行初始化,在插件的初始化阶段,可以完成以下初始化操作。当应用被关闭时,struts框架就会调用每个插件类的destroy()方法完成释放资源的任务。














相关文档