您的位置:首页 > 编程语言 > Java开发

浅谈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语法,是必须的。

<?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讲解完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: