struts2自定义拦截器的创建方式
1.struts2自定义创建方式一
拦截器的的生命周期是随着程序的开始而创建 随着程序的结束而销毁
public class MyIntercept1 implements Interceptor{
// 声明周期方法
// 拦截器的初始化方法
@Override
public void init() {
// TODO Auto-generated method stub
}
// 拦截方法
@Override
public String intercept(ActionInvocation arg0)
throws Exception {
// TODO Auto-generated method stub
return null;
}
// 销毁方法
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
2.struts2自定义拦截器创建方式二
public class Myintercept2 extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation arg0)
throws Exception {
// TODO Auto-generated method stub
return null;
}
}
3.struts2自定义拦截器创建方式三(常用方式)
public class MyIntercept3 extends MethodFilterInterceptor{
// 拦截方法
@Override
protected String doIntercept(ActionInvocation invocation)
throws Exception {
// 前处理
System.out.println("前处理");
// 放行方法
// 所有拦截器都执行完毕后
// 会拿到一个字符串 这个字符串就是action类执行完毕后 返回的字符创
String result = invocation.invoke();
// 后处理
System.out.println("后处理");
return result;
}
}
struts2自定义拦截器的配置
1.struts2自定义拦截器和全局异常处理的配置
<?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>
<package name="inner" namespace="/" extends="struts-default">
<!-- 注册拦截器 -->
<interceptors>
<!-- 注册自己定义的拦截器 -->
<interceptor name="MyIntercept"
class="com.xxx.intercept.MyIntercept"></interceptor>
<!-- 注册拦截器栈 -->
<interceptor-stack name="myStack">
<!-- 除了引用自己的拦截器 还要使用系统默认的拦截器 -->
<!-- 建议:先放自己的拦截器 在放系统的拦截器
自己写的拦截器 可能会用到系统的拦截器封装好的功能
-->
<!-- 引入自己的拦截器 -->
<interceptor-ref name="MyIntercept">
<!-- 设置不想拦截的方法 用逗号隔开多个方法 -->
<param name="excludeMethods">add,update</param>
</interceptor-ref>
<!-- 引入系统的拦截器栈 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 设置默认执行的拦截器栈是哪个 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<!-- 设置全局的拦截器返回结果 进行跳转设置 -->
<global-results>
<result name="tologin" type="redirect">/hello.jsp</result>
</global-results>
<!-- 配置全局异常处理 映射 -->
<global-exception-mappings>
<!-- exception 异常错误类型(全类名) -->
<!-- result 出现异常 返回的结果字符串 -->
<!-- action 可以根据这个异常的结果 跳转一个页面 -->
<exception-mapping result="error"
exception="java.lang.RuntimeException"></exception-mapping>
</global-exception-mappings>
<action name="Demo01Action_*"
class="com.xxx.intercept.Demo01Action" method="{1}">
<result name="success">/hello.jsp</result>
<!-- 配置一个异常处理 要跳转的页面 -->
<result name="error">/hello.jsp</result>
</action>
<package>
</struts>
struts2拦截器实现登录检查
1.创建自定义拦截器
public class MyInterceptor extends MethodFilterInterceptor{
@Override
protected String doIntercept(ActionInvocation invocation)
throws Exception {
// 根据session域中 是否存放了User对象
// 来判断 用户是否登录了
Object object = ActionContext.getContext().getSession().get("user");
if (object == null) {
// 没登录 重定向到登录页面
return "tologin";
} else {
// 登录了放行
return invocation.invoke();
}
}
}
2.在登录页面(login.jsp)显示登录失败的信息
<!-- 引入struts标签库 -->
<%@ taglib uri="/struts-tags" prefix="s" %>
<!-- 显示错误信息 -->
<!-- 获取异常信息 message
相当于调用了getMessage()方法 -->
<font color="red">
<s:property value="exception.message"/>
</font>
<!-- 查看值栈标签 -->
<s:debug></s:debug>