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文件
1》配置struts的ActionServlet
2》配置
它用来指定ActionServlet可以处理那些URL
注意
3》声明ActionServlet的初始化参数
初始化参数用来对Servlet的运行时环境进行初始配置。子元素
为ActionServlet配置了初始化参数config,config参数是配置struts的ActionServlet专有的,它用来设置struts配置文件的相对路径。
4》配置欢迎文件清单
5》配置错误处理
当错误发生时,如果struts框架不能处理这种错误,就把错误抛给Web容器,在默认情况下,web容器会向用户浏览器直接返回原始的错误信息,如果想避免直接让用户看到原始错误信息,可以在Web应用的发布描述文件中配置
/common/500.jsp表示当前Web应用目录下的common目录下500.jsp文件
也可以在
RuntimeException或Error
ServletException或它的子类
IOException或它的子类
6》配置struts标签库
struts框架提供了一些使用的客户化的标签库,如果在实际的应用中使用了这些标签库,那必须在Web应用发布描述文件中配置它们,配置元素
2为struts应用配置struts-config.xml文件
文档类型定义(DTD,Document Type Definition)对xml文档的格式做了定义。每个xml都有自己的DTD。
aciton-mapping?,controller?,message-resources*,plug-in*)
,:AND,要求严格遵从顺序要求。
+:出现一次或多次。
*:出现零次或多次。
?:可选,不出现或出现一次。
():一组要共同匹配的表达式。
|:OR,或。
必须按照DTD指定的先后顺序来配置
1》
name,指定该ActionForm Bean的唯一标识符,该属性必须
type,指定ActionForm类的完整类名,该属性必须。
2》
key,指定在Resource Bundle(即:资源文件)中描述该异常的消息key
path,指定当异常发生是的转发路径
scope,指定ActionMessage实力的存放范围。可选值为request,session。
type,指定所需处理的异常类的名字,此项必须
bundle,指定Resoure Bundle
path="/secutrity/signin.jsp"
scope="request"
type="netstore.framework.exception.InvalidaLoginExdeption"/>
3》
name,转发路径的逻辑名,此项是必需的。
path,指定转发或重定向的URL,此项是必须的,必须以/开头,表示URL路径相对于当前Web应用。
redirect,此项为true时,表示执行重定向操作。如果此项为false,表示执行执行请求转发操作。默认为false
重定向与请求转发的区别:
重定向的目标页面或servlet对象无法使用request获取用户提交的数据,但使用请求转发可以。
如果把请求转发给Action1,可以使用以下代码:
4》
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
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"/>
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》
bufferSize,指定上载文件的输入缓冲的大小,该属性可选,默认为4096
contentType,指定响应结果的内容类型和字符编码,该属性为可选。默认为text/html,如果在Action和JSP万也中也设置了内容类型和字符编码,将会覆盖该设置。
precessorClass,指定负责处理请求的java类的完整类名,默认为org.apache,struts.action.RequestProcessor
maxFileSize,指定在文件上传时的最大尺寸,可以是K,M,G作为单位,它的值只能是整数不能为小数。
nocache,告诉struts是否应该缓冲内容,nocache="true"将不缓冲内容。默认为true
contentType,指定默认的ContentType字段值,如果要发送的内容的默认格式是html,我们可以指定contentType的值为text/html.
例如:
6》
我们在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》
className,自定struts插件类,插件类必须实现org.apache.struts.action.PlugIn接口。如加载validator:
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()方法完成释放资源的任务。