??xml version="1.0" encoding="utf-8" standalone="yes"?>
Web应用的发布描q文?web应用发布描述文g可以在应用开着?发布者和l装者之间传递配|信?Web容器在启动的时候从该文件中d配置信息,Ҏ它来装蝲和配|web应用.文cd定义DTD对XML文档的格式做了定?DTD吧XML文划分为元?属?实体每一UXML文都有独自的DTD文g.可以从网上下?<web-app>元素是web.xml的根元素,其他元素必须嵌入?lt;web-app>元素之内.要注意的是子元素也是有顺序的比如必须是首?lt;servlet>,然后<servlet-mapping>最?lt;taglib>.
?span lang="EN-US">Struts应用配置Web.xml文g:首先最重要的一步是配置ActionServlet,q个?lt;servlet>标签的servlet-name属性v一个名字叫action,然后用servlet-class属性指定ActionServlet的类.然后?lt;servlet-mapping>标签的servlet-name属性指定action,在用url-pattern指定接收范围?.do的请?不管应用中包含了多少子应?都只需要配|一个ActionServlet,cL出来应用中的不同的功?其实者就是不必要?因ؓServlet本n是多线E的,而且目前Struts只允讔R|一个ActionServlet.声明ActionServlet的初始化参数:<servlet>?lt;init-param>子元素用来配|Servlet的初始化参数.param-name讄config参数?param-value讄struts-config.xml的\径参数?
配置Ƣ迎使用清单:如果客户讉KWeb的时候值是讉K了WEB应用的根目录URL.没有具体的指定文?Web会自动调用Web的欢q文?<welcome-file-list>元素来配|的.通过其中?lt;welcome-file>Ƣ迎面</welcome-file>来配|?
配置错误处理:管Struts框架功能强大的错误处理机?但是不能保证处理所有的错误或者异?当错误发生时,如果框架不能处理q种错误,把错误抛弃给Web容器,在默认的情况下web容器会想客户端返回错误信?如果想避免让客户看到原始的错误信?可以在Web应用发布描述文g中配|?lt;error-page>元素.通过<error-code>404来定义错误的cd.然后通过<location>要处理错误的JSP面来对错误q行处理.q可以用<exception-type>来设|异?然后通过<location>来处理异常的JSP面来处理异?
配置Struts标签?q个和以前学到的JSP自定义标{?配置元素?lt;taglib>来配|?<taglib-uri>q个指定标签库的uri,cM起一个名U?<taglib-location>q个是标{ֺ的位|也是实际所在的路径.通过q样的方法引入一个标{ֺ,然后在前台JSP面可以通过自己定义的URI来调用标{?
Struts配置文g:struts-config.xml文g.首先研讨一下org.apache.struts.config?在struts应用启动的时候会把Struts配置文g信息d到内存中,q把它们存放在config包中相关的JavaBeancȝ实例?包中的每一个类都和struts配置文g中特定的配置元素对应,ModuleConfig在Struts框架中扮演了十分重要的角?它是整个config包的核心,在Strutsq行时来存放整个应用的配|信?如果有多个子应用都会有一个ModuleConfig对象,它和Struts文g根元素的<struts-config>对应.根元素中包含<form-bean><action><forward>{元?
<struts-config>元素:时Struts配置文g的根元素,和它对应的配|类ModuleConfigc?<struts-config>元素?个子元素.他们的DTD定义是data-sources?form-bean? global-exception?global-forwards?action-mapping?controller?message-resources?plug-in*在Struts配置文g?必须按照DTD指定的先手顺序来配置<struts-config>元素的各个子元素,如果颠倒了q些子元素的序,会生错?
<data-sources>元素:用来配置应用所需要的数据?数据源负责创建和特定的数据库的连?许多数据源采用连接池的机制实?以便提高数据库访问的性能.JAVA语言提供了javax.sql.DataSource接口,所有的数据源都必须实现q个接口.许多应用服务器和Web服务器都提供了数据源lg.很多数据库厂商也提供了数据源的实?<data-sources>元素包含多个<data-source>子元素永q配|特定的数据?他们可以包含多个<set-property>子元素用于设|数据源的各U属?配置了数据源以后,可以在ActioncM讉K数据?在Action中定义了getDataSource(HttpRequest)Ҏ,用于获取数据源对象的引用.然后可以利用DataSource对象调用getConnection获取一个连接对象对数据库进行操?在配|文件中声明多个数据源的时候需要ؓ每一个数据源分配唯一的Key?通过q个来表C特定的数据?获取特定的数据源的时候可以用dataSource = getDataSource(reqeust,”A?;
<form-beans>元素:用来配置多个ActionForm,包含一个或者N?lt;form-bean>子元?每个<form-bean>元素都包含多个属?className指定?lt;form-bean>匚w的类.name指定该ActionForm的唯一标识W?q个属性是必须的以后作为引用?type指定ActionFormcȝ完整cd,q个属性也是必ȝ.注意包名也要加上.<form-property>是指定动态的Form的元?以后会深入了?
<global-exception>元素:用于配置异常处理,元素可以包含一个或者多?lt;exception>元素,用来讄JAVA异常和异常处理类ExceptionHandler之间的映?className指定和元素对应的配置c?默认的不用动.handler指定异常处理c默认是ExceptionHandler.key指定在本地资源文件中异常的消息Key,path指定当前异常发生的时候{发的路径.scope指定ActionMessages实例存放的范?type指定需要处理异常类的名?必须?bundle指定Resource Bundle.
<global-forwards>元素:用来声明全局转发,元素可以有一个或者N?lt;forward>元素l成,用于把一个逻辑名映到特定的URL,通过q种ҎActioncL者JSP面无需指定URL,只要指定逻辑名称可以实现请求{发或者重定向.q样可以减少控制lg和视囄聚合.易于l护.className对应的配|类.contextRelative如果为true表示当path属性以/开头的时?l出的是对应的上下文URL默认是false.name转发路径的逻辑?必须?path转发或者重定向的URL,必须写必L?开?redirect讄为true的时候表C执行重定向操作,此项为false的时?表示执行h转发操作.重定向与h转发的区别以后就是重定向是把h生成应答l客L然后在重新发送给定向的URL,览器地址栏会有显C?而{发就是直接把h转发l本应用的另一个文?不生成应{所以客LIE没显C?
<action-mapping>元素:包含一个或者N?lt;action>元素,描述了从特定的请求\径到响应的Action的映??lt;action>元素中可以包含多?lt;exception>?lt;forward>子元?他们分别配置局部异常处理和局部{?attribute讄Action兌的ActionForm在request或者session范围内的key.是在request或者session׃n内的名称.className对应配置元素的类.默认的是ActionMapping.forward指定转发URL路径include指定包含URL路径.input指定包含表单的URL,当表单验证失败的时候发送的URL.name,指定和该Action兌的Form名字.该名字必L在form-bean中定义过?可写可不?path必须/开头的方位Action的\?parameter指定Action配置参数.在Action的execute()Ҏ中可以调用ActionMapping的getParameter()Ҏ来读取匹配的参数.roles指定允许调用该Action的安全角?多个角色之间逗号格开.scope指定Form的存在范?默认是session.tyep指定Action的完整类?unknown如果是true表示可以处理用户发出的所有的无效的ActionURL默认是false.validate指定是否调用ActionForm的validateҎ.
<controller>元素:用于配置ActionServlet.buffreSize指定上蝲文g的输入缓冲大?该属性ؓ可选默?096.className指定元素对应的配|类,ControllerConfig.然后是contentType指定响应l果内容cd和字W编?该属性ؓ可?默认是text/html如果在Action或者JSP|页也设|了cd内容,会覆盖这?locale指定是否把Locale对象保存到当前用Lsession中默认false.tempDir指定处理文g上蝲的时工作目?nochache如果是true在响应结果中加入特定的头参数.
<message-resources>元素:用来配置Resource Bundle.用于存放本地文本消息文g.className元素对应的配|类.MessageResourcesConfig.factory指定消息的工厂类.key指定文g存放的Servlet对象中采用的属性Key.null指定如何处理未知消息.parameter指定消息的文件名.
<plug-in>元素:用于配置Struts插g.
配置多应用模?span lang="EN-US">:所有的子应用都可以׃n同一个ActionServlet实例,但是每个子应用都有单独的配置文g.把应用划分ؓ多个子应用模?首先为每个应用创建单独的Struts配置文g,在web.xml的ActionServlet配置代码中添加几个子应用信息.采用<forward>元素来实现应用之间的切换.
Digesterlg:是一个Apache的另一个开源代码项?当Struts被初始化的时?首先会读取ƈ解析配置文g,框架采用Digesterlg来且襉K|文?然后创徏config包中的对?者对象用于存N|信?
其实配置文g不难,只要都理其中的原理就OK?真正实际的项目开发中,采用的工具例如Eclipsepd,提供了相应的插g,在创Z个Struts工程的时候配|文件的标签都是自动生成?而我们只需要往里面填写属性就OK? (|友们的支持,是我l箋写技术文章的动力!)