浅谈struts.xml在SSH中的作用
2016-05-01 14:48
417 查看
struts.xml文件是整个Struts2框架的核心,主要负责管理Struts2框架的业务控制器Action。
struts.xml放在根目录下,jsp页面放在WEB-INFO下面的时候,外部是无法直接访问的,只能通过action跳转才能访问,安全性相对而言比较高,能够更好做权限控制,但是后期维护很麻烦,所以建议把jsp放在webContent下面,通过编写过滤器来防止直接访问,后期维护方便。
1.头文件,这部分规定了struts.xml文件的版本、编码格式和xml语法,是必须的。
2.<constant>标签
所有在struts.properties文件中定义的属性,都可以配置在struts.xml文件中。而在struts.xml中,是通过<constant>标签来进行配置的。
3.<package>标签
在Struts2框架中是通过包来管理action、result、interceptor、interceptor-stack等配置信息的。包属性如下:
name:包的名称。必须配置
extends:要继承的包,后面配置的是被继承的包的名称。可选
namespace:包的命名空间。可选
abstract:定义包为抽象的,也就是不能包含Action的定义。可选
由于包信息的获取是按照配置文件的先后顺序进行的,所以父包必须在子包之前被定义。通常我们配置struts.xml的时候,都继承一个名为“struts-default.xml”的包,这是struts2中内置的包,有时我们去继承json-default,比如:
4.<interceptors>标签
通过该标签可以向Struts2框架中注册拦截器或者拦截器栈,一般多用于自定义拦截器或拦截器栈的注册。该标签使用方法如下:
该标签用于设置包范围内的全局结果集。在多个Action返回相同逻辑视图的情况下,可以通过<global-results>标签统一配置这些物理视图所对应的逻辑视图。
这两个标签都是用来配置发生异常时对应的视图信息的,只不过一个是Action范围的,一个是包范围的,当同一类型异常在两个范围都被配置时,Action范围的优先级要高于包范围的优先级.这两个标签包含的属性也是一样的,exception用来指定异常类型,result指定发生异常时显示的视图信息,这里要配置为逻辑视图,这两个是必须的:
利用include标签,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用<include>标签引入其他配置文件。这样可以避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,使用方式如下:
导入Struts2核心支持包(struts2-core-2.3.14.jar、ognl-3.0.6.jar、xwork-core-2.3.14.jar、struts2-json-plugin-2.3.14.jar、javassist-3.15.0-GA.jar、commons-logging-1.1.1.jar、freemarker-2.3.19.jar、commons-lang3-3.1.jar、commons-io-2.0.1.jar、commons-fileupload-1.2.2.jar)
致此,SSH中第二个重要的配置文件struts.xml讲解完毕。
struts.xml放在根目录下,jsp页面放在WEB-INFO下面的时候,外部是无法直接访问的,只能通过action跳转才能访问,安全性相对而言比较高,能够更好做权限控制,但是后期维护很麻烦,所以建议把jsp放在webContent下面,通过编写过滤器来防止直接访问,后期维护方便。
1.头文件,这部分规定了struts.xml文件的版本、编码格式和xml语法,是必须的。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">其它的标签都要放在<struts></struts>这对标签内部。
2.<constant>标签
所有在struts.properties文件中定义的属性,都可以配置在struts.xml文件中。而在struts.xml中,是通过<constant>标签来进行配置的。
<!--支持动态方法的调用,使用这个设置后可以这样调用:action!method--> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <!--如果设置该属性为true则可以在应用出错时显示更多、更友好的出错提示,发布时要设置为false--> <constant name="struts.devMode" value="false" /> <!--指定struts2文件上传中整个请求内容允许的最大字节数--> <constant name="struts.multipart.maxSize" value="2097152000"/> <!--该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理--> <constant name="struts.action.extension" value="do"/> <!--该属性指定Struts 2应用所需要的国际化资源文件,如果有多份国际化资源文件,则多个资源文件的文件名以英文逗号(,)隔开--> <constant name="struts.custom.i18n.resources" value="format"></constant> <!--该属性指定上传文件的临时保存路径,该属性的默认值是javax.servlet.context.tempdir--> <constant name="struts.multipart.saveDir" value="/tmp"/>
3.<package>标签
在Struts2框架中是通过包来管理action、result、interceptor、interceptor-stack等配置信息的。包属性如下:
name:包的名称。必须配置
extends:要继承的包,后面配置的是被继承的包的名称。可选
namespace:包的命名空间。可选
abstract:定义包为抽象的,也就是不能包含Action的定义。可选
由于包信息的获取是按照配置文件的先后顺序进行的,所以父包必须在子包之前被定义。通常我们配置struts.xml的时候,都继承一个名为“struts-default.xml”的包,这是struts2中内置的包,有时我们去继承json-default,比如:
<package name="login" namespace="/login" extends="json-default"> <action name="loginAdmit" class="com.hanb.zhang.action.systemSet.LoginAction"> <result name="getUser" type="json"> <param name="includeProperties"> userList </param> </result> </action> </package>在上面的定义中,action的result的type为json,json plugin就可将action中定义为userList的field自动转换为json格式数据,并返回给js。其实,json-default也是继承自struts-default的,struts-plugin.xml中定义如下:
<struts> <package name="json-default" extends="struts-default"> <result-types> <result-type name="json" class="org.apache.struts2.json.JSONResult"/> </result-types> <interceptors> <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/> </interceptors> </package> </struts><package>中的namespace主要是针对大型项目中Action的管理,更重要的是解决Action重名问题,因为不在同一个命名空间的Action可以使用相同的Action名的,使用了namespace我们在js里如果想调用LoginAction下的checkLogin()方法时,就可以这样写动态方法调用的路径了:
var url=path+"/login/loginAdmit!checkLogin.do";Struts2中如果没有为某个包指定命名空间,该包使用默认的命名空间,默认的命名空间总是""。
4.<interceptors>标签
通过该标签可以向Struts2框架中注册拦截器或者拦截器栈,一般多用于自定义拦截器或拦截器栈的注册。该标签使用方法如下:
<package name="default" namespace="/" extends="struts-default"> <interceptors> <!-- 自定义拦截器 name指定自定义拦截器的引用名称 class 指定该拦截器的实现类(完整路径) --> <interceptor name="sessioncheck" class="com.hanb.zhang.interceptor.LoginInterceptor"/> <!-- 自定义拦截栈 name 指定自定义拦截栈的引用名称 --> <interceptor-stack name="myStack"> <!-- name为所要引用的拦截器的引用名称 刚才定义了一个name为 sessionCheck的拦截器,则引用就为 sessionCheck --> <interceptor-ref name="sessioncheck"></interceptor-ref> <!-- 每一个自定义的拦截栈都应该必须配上defaultStack拦截栈,该拦截栈是Struts2默认的拦截栈,里面封装了一组拦截器 --> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <!--该标签用来设置整个包范围内所有Action所要应用的默认拦截器信息--> <default-interceptor-ref name="myStack" /> </package>5.<global-results>标签
该标签用于设置包范围内的全局结果集。在多个Action返回相同逻辑视图的情况下,可以通过<global-results>标签统一配置这些物理视图所对应的逻辑视图。
<global-results> <result name="error">/error.jsp</result> <result name="timeout"> /error.jsp </result> <result name="login"> /error.jsp </result> </global-results>6.<exception-mapping> 和<global-exception-mappings>
这两个标签都是用来配置发生异常时对应的视图信息的,只不过一个是Action范围的,一个是包范围的,当同一类型异常在两个范围都被配置时,Action范围的优先级要高于包范围的优先级.这两个标签包含的属性也是一样的,exception用来指定异常类型,result指定发生异常时显示的视图信息,这里要配置为逻辑视图,这两个是必须的:
<global-exception-mappings> <exception-mapping exception="java.lang.Exception" result="error"/> </global-exception-mappings>7.<include>标签
利用include标签,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用<include>标签引入其他配置文件。这样可以避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,使用方式如下:
<include file="systemSet.xml"/>
导入Struts2核心支持包(struts2-core-2.3.14.jar、ognl-3.0.6.jar、xwork-core-2.3.14.jar、struts2-json-plugin-2.3.14.jar、javassist-3.15.0-GA.jar、commons-logging-1.1.1.jar、freemarker-2.3.19.jar、commons-lang3-3.1.jar、commons-io-2.0.1.jar、commons-fileupload-1.2.2.jar)
致此,SSH中第二个重要的配置文件struts.xml讲解完毕。
相关文章推荐
- JDK源码浅析之ArrayList类
- 回调函数透彻理解Java
- JAVA中数组的排序
- 正确实现用spring扫描自定义的annotation
- Java transient关键字的理解
- Java基础、面向对象总结
- Java核心知识点-路径获取
- JAVA设计模式之单例模式:内部静态类
- Java 高效并发
- java中通过索引求数组中的最值
- 应该具备的调试技能(java)
- 最大公约数和最小公倍数--java实现
- java中notify,wait,sleep
- Uninstall JDK rpm to reinstall
- JAVA中获取数组中的最值
- Java反编译
- java里面4种关于xml的解析方法
- java.lang.Class.forName(String name, boolean initialize, ClassLoader loader)方法
- 关于springmvc的流程
- java.lang.Class.forName(String name, boolean initialize, ClassLoader loader)方法