包配置:
在包配置中可以使用抽象包,即该包不包含Action定义,可被其他包继承。设定package的abstract=”true”.
包配置的 extends指定该包继承于其他包,可以继承其他包中的Action定义、拦截器定义等。
默认Action和拦截器
在xml中最后定义,当action没有配置时,执行的Action,使用fault-action-ref 指定.,如用于将页面转向到出错、主页、登录页面
<default-action-ref name="simpleAction" />
<action name="simpleAction" class="util.SimpleAction">
<result></result>
</action>
使用default-interceptor-ref指定默认的拦截器
拦截器配置
作用: 进行权限控制(检查用户是否是登陆用户,是否有足够的权限);跟踪日志(每个浏览者请求的action);性能瓶颈(记录每个action的开始和结束时间,多使用 timer拦截器实现,使用timer需要修改loogger的级别为info)
使用通配符:
在struts.xml的配置中,可以在name定义通配符,在 class , method ,result字段中使用通配符。
当在class中使用通配符代表不同类相同的功能,如配置部分的物理链路和虚链路的更新、删除等;当在method中使用通配符代表同一类中不同的功能,如gotoCreate和gotoUpdate可以使用通配符;当在result中出现代表根据参数完成相应的转向,这里不仅支持通配符,如 {1}.jsp,还支持ONGL变量${result}.jsp
格式为: * 代表参数变量,可以在一个<action>指定多个,引用时使用 {1} {2} 完成引用,实例如下:
<action name=”*Action”class=”lee.{0}Action” method=”{0}”>
<result type=”redirect-action”>${result}Action
</action>
{0} 代表引用前面出现的所有* {1} 代表引用第一个出现的*
常见的处理结果
Plaintext:当在页面上输出源代码时
Redirect:和dispatcher相比,是完成重定向
Redirect-action:功能类似于redirect,不过redirect完成的资源(jsp)的重定向,而redirect-action完成到action的定向,可以指定两个参数:actionName和namespace,可以重定向到不同包的Action。
全局结果:定义在多个action中会用到的结果,使用 global-results中配置result完成定义。
Action中传入参数
可以在struts.xml中配置Action中属性的值,在Action元素中配置:<paramname=”属性名”>值</param>
声明式异常
使用异常并实现异常处理和代码的解耦。
需要1)配置exception的拦截器,默认已配置。2)使用 exception-mapping元素 和参数 exception(映射的异常类,如javax.sql.SQLException),result(要映射的资源结果,如”error”)完成配置。
可以分为1)全局声明异常,在 元素global-exception-mappings中定义;2)局部声明异常,在action中定义。
实现方式: 1) 在Action中使用throws newSQLException(“查询字符串错误”) 抛出异常。 2)在struts.xml中配置 <exception-mapping exception=”javax.sql.SQLException” result=”error”><result name=”error”>error.jsp</result> 3)在error.jsp中<s:propertyvalue=”exception”> 输出异常对象,类似于java中的SQLException对象, <s:property value=”exceptionStack”/> 输出异常的堆栈。
实例如下:
<!-- 全局性的通用跳转页面 -->
<!-- 全局性的异常映射 -->
<global-results>
<resultname="login">/login.jsp</result>
<resultname="error">/common/error.jsp</result>
</global-results>
<global-exception-mappings>
<!-- Action抛出Exception异常时,转入名为error的结果,这一项要放在最后 -->
<exception-mappingexception="java.lang.Exception" result="error" />
</global-exception-mappings>