配置异常
异常映射是能够用来处理Action中抛出的异常,其核心思想是在Action执行期间抛出的异常自动捕获,交给预先设定的result,在struts2中使用exception-mapping来影射异常,映射分全局和局部映射。按照博客文章struts2的配置-1所讲的程序基础上,演示这个例子。
首先配置struts.xml信息,建立异常映射。
<action name="login"class="www.gongqingkui.cn.LoginAction">
<exception-mappingresult="exception"exception="java.lang.Exception"></exception-mapping>
<resultname="exception">/Exception.jsp</result>
</action>
可以看出,loginAction程序中的异常一旦被捕获,将会传递到名为exception的result中去,显示Exception.jsp页面。而LoginAction则需要抛出异常,如下所示:
if(condiction){
thrownew SQLException("Sql Error");
}
这里抛出的异常是SQLException,属于Exception的子类,所以没问题。执行时显示Exception.jsp页面信息。
Struts2框架支持的视图资源类型:action执行完成后,返回一个字符串,这个字符串对应视图资源的逻辑名,利用action内配置的result资源可以将结果呈献给用户。result常用的有dispatcher(默认),redirect和redirect-action等类型。其中redirect相当于执行HttpServletResponse的sendRedirect方法,这个方法并不能带着action,所以重定向后原来的action实例不能再使用。Redirect-action则是带action来跳转的,他的actionName属性指示了要跳转到的action,这个跳转视图资源类型是推荐使用的。
使用Map类型的request,session和application方法为:
Map<String,Object> a =(Map<String,Object>)ActionContext.getContext().get("request");
a.put("userLevel", "user");
变量可以存储到三个不同类型的数据中去,在jsp显示页面中使用相应方法session.getAttribute取出显示。Request、session、application都是Map类型的,必须通过ActionContext来提取。
拦截器
拦截器由ActionProxy调用,在Action执行前执行,所有拦截器调用完成后,再由拦截器的ActionInvocation执行相应方法的invoke方法。在Action执行完成后,反序执行拦截器。自定义拦截器时需要继承AbstractInterceptor这个抽象类,这个抽象类实现了Interceptor接口中的方法。
验证器
ActionSupport类实现了Validateable接口,但是对于validate方法只是一个空实现,所以我们需要重写validate方法。验证需要使用配置文件,配置文件放在和action同一个目录下,命名规则为ActionName-AliasName-validation.xml。
参考文献
1. Struts2的配置-1
3. 理解Struts
4. Struts的简单使用