您好,登录后才能下订单哦!
在java项目中如何使用Struts2拦截器?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
1、拦截器是什么?
拦截器相当于过滤器:就是将不想要的去掉,想要的留下。拦截器抽象出一部分代码可以用来完善原来的action。同时可以减轻代码冗余,提高重用率。通俗地讲就是一张网,过滤掉不需要的沙子,留下水。
2、拦截器的作用:
拦截器可以构成特定的功能。比如权限认证、日志记录和登陆判断。
3、拦截器的原理:
其每一个Action请求都在拦截器中,每一个action可以将操作转交给下面的拦截器,也可以直接退出到界面上。
4、定义拦截器:
(1)自定义一个实现Interceptor接口(不过我初学者一般直接实现框架中的Interceptor)
(2)在struts.xml中注册定义的拦截器
(3)可以需要的action中引用拦截器
Interceptor接口声明了三个方法
public interface Interceptor extends Serializable { void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception; }
Init方法是在action作用之前调用,就是开始给烂机器的初始化操作。
Destory方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。
interceptor方法是拦截器的主要操作。如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。
现在对用户登录进行拦截,代码如下:
public String intercept(ActionInvocation invocation) throws Exception { System.out.println("在action执行之前"); ActionContext actionContext=invocation.getInvocationContext(); Map<String,Object> session=actionContext.getSession(); Object currentUser=session.get("currentUser"); String result=null; if(currentUser!=null){ result=invocation.invoke(); }else{ HttpServletRequest request=(HttpServletRequest)invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST); request.setAttribute("error", "请先登录"); result="error"; } System.out.println("result+"+result); System.out.println("在action执行之后"); return result; }
注册拦截器:
<interceptors> <interceptor name="myInterceptor" class="com.fangchao.interceptor.MyInterceptor"></interceptor> <interceptor name="loginInterceptor" class="com.fangchao.interceptor.LoginInterceptor"></interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="loginInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors>
上述代码中的interceptor-stack是个拦截器栈。到目前为止,就是在下面引用时,比较方便。一般来讲,每个action都会使用defaultStack。
拦截器参数:
配置参数:
有两种配置方式:
<interceptor-ref name="validation"> <param name="excludeMethods">myValidationExcudeMethod</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">myWorkflowExcludeMethod</param> </interceptor-ref>
或者
<interceptor-ref name="defaultStack"> <param name="validation.excludeMethods">myValidationExcludeMethod</param> <param name="workflow.excludeMethods">myWorkflowExcludeMethod</param> </interceptor-ref>
看完上述内容,你们掌握在java项目中如何使用Struts2拦截器的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。