[Struts2] 配置文件struts.xml和web.xml详解

 配置文件struts.xml和web.xml。

其实要使Struts2可以工作,配置很简单,套模板就好了。而且基本与版本无关。

如,只要struts2需要的基本jar包已经引入,那么直接配置一下web.xml和struts.xml文件。

web.xml中包含:


        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    
        struts2
        /*
    
此处web.xml的简单加载struts2核心驱动(过滤器),没有其它配置。
然后添加一个struts.xml到源码的根目录下:






    

    
	
 只要满足以上格式即可。

好了,现在具体来说一说xml文件的配置项具体含义。

首先,web.xml


        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
定义filter,此处加载struts2过滤器。


        struts2
        /*
定义web服务器通知项,即,符合“/*”的URL请求都交给命名为“struts2”的过滤器(即,org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)处理。

web.xml配置以上两个属性节点就可以加载struts2框架了。

然后,struts.xml,这个配置项比较多。

形如:

 

配置是否在每次HTTP请求到达时都重新加载资源文件,看到“i18n”我以为是编码或者国际化配置呢,默认为false,生产阶段也就需要false。设置为true之后,web服务器(tomcat)会缓存,启动是会抛出“couldn't clear tomcat cache”。

 

开发阶段配置,在web服务器出错时会尽量打印出来,一样也是生产阶段设置为false,避免后台结构被人发现。


 配置文件修改后是否自动重新部署到服务器,开发阶段需要设置为true,否则需要不时重启服务器。


 加载国际化配置文件,多个配置文件则用“,”隔开。


 默认请求后缀,多个使用","隔开。


指定Web应用的默认编码集,相当于调用 HttpServletRequest的setCharacterEncoding方法。

 

设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭,方便调试。

 

指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration,开发者可以自定义配置文件管理器,该类要实现Configuration接口,可以自动加载struts2配置文件。

 

该属性设置Struts 2是否允许在Action名中使用斜线,该属性的默认值是false。如果开发者希望允许在Action名中使用斜线,则可设置该属性为true,尽可能不配置这个,很麻烦。

 

该属性指定视图标签默认的视图主题,该属性的默认值是xhtml,可以为simple,xhtml或ajax。

 

该属性指定视图主题所需要模板文件的位置,该属性的默认值是template,即默认加载template路径下的模板文件。

 

该属性指定模板文件的后缀,该属性的默认属性值是ftl。该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、 Velocity和JSP模板,模板使用即可,一本就是ftl后缀,没有什么影响。

 

该属性指定Web应用所在的监听端口。该属性通常没有太大的用处,只是当Struts 2需要生成URL时(例如Url标签),该属性才提供Web应用的默认端口,此处的端口和web服务器的端口不一样,但是不冲突,不在同一级别,不用担心,后台服务太多可以这样配置,但是不是集群大概也用不到了。

 

该属性指定Struts 2生成URL时是否包含请求参数。该属性接受none、get和all三个属性值,分别对应于不包含、仅包含GET类型请求参数和包含全部请求参数。

 

对于某些Java EE服务器,不支持HttpServlet Request调用getParameterMap()方法,此时可以设置该属性值为true来解决该问题。该属性的默认值是false。对于 WebLogic、Orion和OC4J服务器,通常应该设置该属性为true。

 

默认的国际化地区信息。

 

multipart请求信息的最大尺寸(文件上传用,该属性指定Struts 2文件上传中整个请求内容允许的最大字节数)。

 

该属性指定处理 MIME-type multipart/form-data,文件上传(cos、pell、jakarta)专为multipart请求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口(文件上传用)。


 

定义视图资源的根目录

此配置之后,所有访问都需要全路径。


大概就是以上的简单配置,哇,太多了。还有一些可能到网站关闭那天也用不到的配置,就没有列出来了。


然后,

在Struts2框架中是通过包来管理action、result、interceptorinterceptor-stack等配置信息的。



name: package的标示符,唯一标记一个package。

namespace:命名空间,影响访问的action请求路径,如namespace="/user",package下有login,register等action,那么访问login时需要/user/login来访问。

Struts2中如果没有为某个包指定命名空间,该包使用默认的命名空间,默认的命名空间总是""。

extends:继承,需要继承struts的struts-default。当一个包通过配置extends属性继承了另一个包的时候,该包将会继承父包中所有的配置,包括action、result、interceptor等。

由于包信息的获取是按照配置文件的先后顺序进行的,所以父包必须在子包之前被定义。

还有一个abstract属性,用于声明package属性为抽象包,然后其它package继承此package即可。




action:

name: 请求名称,加上namespace就是请求路径。

method: 接到请求后执行的方法,默认执行execute(此处表示没有method属性)。

class: 处理方法所在的类,默认为Action(如果没有配置此属性)。

还有一个不常用的属性,converter,Action的类型转换器。

result:

name: Action返回结果,默认为SUCCESS("success").

type: 返回的类型,默认为dispatcher。


action中可以使用通配符。

请求通配符和返回结果均可使用,如,


/{2}_page.jsp

假如请求为,user_UserAction_login(不考虑namespace),其中 action中{1} 为UserAction,{2}为login,此请求会执行com.gopain.UserAction$userlogin().如果返回值为”type_login“,则会跳转到login_page.jsp页面。

此处只是举例,站点不宜这样配置请求。但是对于action的name配置很实用,不要奢望一个action配置完整个站点(虽然也可以实现,而且对于访问没有太多影响),十分不利于管理。


再列几个常用配置:

 
当我们在配置Action的时候,如果没有为某个Action指定具体的class值时,系统将自动引用标签中所指定的类。在Struts2框架中,系统默认的class为ActionSupport,该配置我们可以在xwork的核心包下的xwork-default.xml文件中找到。

如果在请求一个没有定义过的Action资源时,系统就会抛出404错误。这种错误不可避免,但这样的页面并不友好。我们可以使用<default-action-ref>来指定一个默认的Action,如果系统没有找到指定的Action,就会指定来调用这个默认的Action。


该标签用来设置整个包范围内所有Action所要应用的默认拦截器信息。事实上我们的包继承了struts-default包以后,使用的是Struts的默认设置。我们可以在struts-default.xml中找到相关配置:

在实际开发过程中,如果我们有特殊的需求是可以改变默认拦截器配置的。当时一旦更改这个配置,“defaultStack”将不再被引用,需要手动追加。


具体配置项很多,用到再追加也可以。

你可能感兴趣的:(Struts2)