url:https://blog.csdn.net/gopain/article/details/40790523
https://blog.csdn.net/qq_17864929/article/details/48140165
配置文件struts.xml和web.xml。
其实要使Struts2可以工作,配置很简单,套模板就好了。而且基本与版本无关。
如,只要struts2需要的基本jar包已经引入,那么直接配置一下web.xml和struts.xml文件。
web.xml中包含:
此处web.xml的简单加载struts2核心驱动(过滤器),没有其它配置。
然后添加一个struts.xml到源码的根目录下:
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
只要满足以上格式即可。
好了,现在具体来说一说xml文件的配置项具体含义。
首先,web.xml
定义filter,此处加载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、interceptor、interceptor-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中可以使用通配符。
请求通配符和返回结果均可使用,如,
假如请求为,user_UserAction_login(不考虑namespace),其中 action中{1} 为UserAction,{2}为login,此请求会执行com.gopain.UserAction$userlogin().如果返回值为”type_login“,则会跳转到login_page.jsp页面。
此处只是举例,站点不宜这样配置请求。但是对于action的name配置很实用,不要奢望一个action配置完整个站点(虽然也可以实现,而且对于访问没有太多影响),十分不利于管理。
再列几个常用配置:
当我们在配置Action的时候,如果没有为某个Action指定具体的class值时,系统将自动引用
如果在请求一个没有定义过的Action资源时,系统就会抛出404错误。这种错误不可避免,但这样的页面并不友好。我们可以使用
该标签用来设置整个包范围内所有Action所要应用的默认拦截器信息。事实上我们的包继承了struts-default包以后,使用的是Struts的默认设置。我们可以在struts-default.xml中找到相关配置:
在实际开发过程中,如果我们有特殊的需求是可以改变默认拦截器配置的。当时一旦更改这个配置,“defaultStack”将不再被引用,需要手动追加。
具体配置项很多,用到再追加也可以。