拦截器(interceptor)概念
拦截器是动态拦截action调用的对象,类似于servlet中的过滤器。在执行action中的业务逻辑处理方法之前,struts会首先执行struts.xml中引用的拦截器。烂拦截器是struts2中的中一个重要的特性,struts2框架大多是核心都是围绕拦截器来实现的:避免表单重复提交,类型转换,登录验证,文件上传等。
struts2工作流程图
拦截器小结
拦截器也是一种类,类中有一个方法,但是该类可以自动调用,在执行action之前或者之后。拦截器首次实现了AOP的变成思想,是一种可插拔式的编程方式,拦截器也是方法调用的一种改进,方法可以在系统开启前就开始执行了。
如何创建一个自定义的拦截器
1.自定义一个类实现interceptor接口,重写intercept方法
public class LoginInterceptor implements Interceptor {
@Override
public void destroy() {
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
//获取当前访问Action的URL
String actionName = invocation.getProxy().getActionName();
//如果当前访问Action的URL是"loginAction_login"表示此时还没有Sesion,需要放行
if(!"studentAction_login".equals(actionName)){
//从Session中获取当前用户对象
Student stu = SessionContextUitl.getStu();
//如果Session不存在,跳转到登录页面
if(stu==null){
return "login";
}
}
return invocation.invoke();//放行
}
}
2.配置struts.xml中参数