1、拦截器的作用
2、怎样定义拦截器?
3、怎样注册拦截器?
4、怎样使用拦截器?
下面我们通过上面的问题来做进一步的讨论:
1、拦截器的作用:在struts2种,其核心的功能之一就是拦截器,拦截器可以用来进行AOP编程,比如权限管理、判断用户有没有登陆等等。
2、定义拦截器:
1、创建一个类,实现com.opensymphony.xwork2.interceptor.Interceptor接口,并覆写里面的intercept方法。
2、这里我拿判断用户是否登陆来做例子,这里的内容主要是判断用户有没有登陆,
//先获取到session里面的user
Object user=ServletActionContext.getRequest().getSession().getAttribute("user");
//判断user是否为空
if(user==null){
//为空,转向登陆页面
return "login";
}else{
//不为空,转向主页
return invocation.invoke();
这里的invocation.invoke()
代表struts.xml文件中相关action对应的类所指定方法的返回值。实际上等价于 String result=invocation.invoke()
.
3、注册拦截器:
1、在对应要拦截的包中注册,其实就是给这个拦截器定义一个名字。代码如下:
<interceptors>
<interceptor name="myInterceptor" class="cn.ansel.interceptor.interceptorImpl"></interceptor>
<interceptor-stack name="myDefaultInceptor">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
那为什么还要写interceptor-stack
呢?因为struts2里面有很多默认使用的拦截器,如果用户有自己定义的拦截器,那么默认的就不起作用了,但是我们自己定义的就只有1个拦截器,那么struts中的其他核心拦截器我们就用不了了,所以我们要把默认的拦截器也加进来,把他们“捆”在一起。
4、使用拦截器:确保以上的步骤无误之后,就是使用拦截器了。
1、在要拦截的action中,定义拦截器的“参照“
2、这个参照,是指上面捆起来的整个包,而不是单单自己定义的拦截器。
代码如下:
<interceptor-ref name="myDefaultInceptor"></interceptor-ref>
以上,就是自定义拦截器的步骤,欢迎纠错和补充!