Struts2之拦截器
---恢复内容开始---
.拦截器底层原理:
1.aop思想
2.责任链模式
.aop思想:
如果你学过spring 或者动态代理 可能会知道 aop是面向切面编程 其实是一种横向抽取的模式 简单来说就是在不改变原来代码的情况下进行扩展功能。你自己可以去了解一下aop。
.责任链模式:
责任链模式中有多个操作,有添加、修改、删除三个操作
每个操作要执行都会执行一个类似放行的操作。例如,首先执行添加操作 添加操作执行完后 执行类似放行的操作。再去执行修改操作 修改操作执行完后 放行。再去执行删除操作 删除操作执行完后 再去执行action中的方法
建立拦截器
1. 写一个类来继承MethodFilterInterceptor类
2.重写类里面的方法 在方法里面写你的功能
3.在struts.xml中配置拦截器
在这里呢 写一个登陆的拦截器
1 class LoginFilter extends MethodFilterInterceptor{
protected String doIntercept(ActionInvocation invocation) throws Exception{
Object obj = ServletActionContext.getRequest().getSession().getAttribute("");
if(obj != null){
//执行放行
return invocation.invoke();
}else{
//不是登录状态 可以在这输出错误信息
}
}
}
在struts.xml中配置拦截器
在package中声明拦截器
<interceptors>
<interceptor name="loginintercept" class="拦截器全路径">
</interceptor>
</interceptors>
在action中配置拦截器
1 <interceptor-ref name="loginintercept"></interceptor-ref>
在这里有个几个问题需要注意
1.当你在action中配置了自定义的拦截器后 struts2中默认的拦截器就不会执行 而我们又会用到那些默认的拦截器 例如Modeldriven等 所以我们要在action中重新配置一下那些默认的拦截器 在你查看源代码时会看到很多拦截器我们一个一个配置可以但太麻烦 所以这样配置就行
在action中配置默认拦截器
<interceptor-ref name="defaultStack"></interceptor-ref>
2.在action中我们会执行很多的方法 拦截器会对所有的方法进行拦截 可以通过配置的方式让某些方法不在拦截
1 <interceptor-ref name="loginintercept"> <param name="excludeMethods">不拦截的方法</param> </interceptor-ref>
3.还有一个问题就是在你登陆的时候 登录成功会有一个页面嵌套的情况出现 在页面的form标签里写个上一下代码
target="_parent"
以上代码不容易 希望朋友们勿喷 有什么问题私信我 三克油
想学小程序和Python私我 QQ:3275724538