Struts2自学入门(四)——简单拦截器
2016-09-18 22:42
531 查看
</pre>拦截器的作用:<p></p><p></p><pre id="best-content-873952657" accuse="aContent" class="best-text mb-10" style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: 'Microsoft YaHei', arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word; line-height: 29px; color: rgb(51, 51, 51); min-height: 55px; background-color: rgb(255, 255, 255);"><span style="font-size:14px;"><span style="white-space:pre"> </span>拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 </span>
一、拦截器预定义
在package标签下定义:
<interceptors> <interceptor name="MyInterceptor" class="com.java1234.interceptor.MyInterceptor"></interceptor> <interceptor name="LoginInterceptor" class="com.java1234.interceptor.LoginInterceptor"></interceptor> </interceptors>class指向自己写的拦截器类:
二、拦截器类
public class LoginInterceptor implements Interceptor { @Override public void destroy() { // TODO Auto-generated method stub System.out.println("MyInterceptor destroy"); } @Override public void init() { // TODO Auto-generated method stub System.out.println("MyInterceptor init"); } @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("在Action执行之前"); <pre name="code" class="java"> 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("在Action执行之后");return result;}
需要继承 com.opensymphony.xwork2.interceptor.Interceptor; 其中destory是销毁方法,init是初始化方法, intercept是主要的执行方法 :
<span style="white-space:pre"> </span>ActionContext actionContext=invocation.getInvocationContext(); Map<String,Object> session = actionContext.getSession();在Struts2里通过 ActionContext可以获得Session 如上。
<span style="white-space:pre"> </span>result=invocation.invoke();
表示Action继续往下执行并获得其返回参数。返回参数可以在拦截器类里进行修改,执行不同的返回结果。
三、在Action里配置拦截器
要想把自己写的拦截器配置给Action 如下:
<action name="hello" class="com.java1234.action.HelloWorldAction" > <result name="success">success.jsp</result> <interceptor-ref name="MyInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action>
其中:defaultStack 是Struts自带的缺省拦截器。拦截器是按从上往下顺序执行。
像登录拦截器这种使用频繁的可以设置成全局的拦截器栈 如下:
<span style="white-space:pre"> </span><interceptors>
<span style="white-space:pre"> </span><interceptor-stack name="myStack">
<interceptor-ref name="LoginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<span style="white-space:pre"> </span><default-interceptor-ref name="myStack"></default-interceptor-ref>
如果某个Action不需要使用这个全局的拦截器栈可以在Action里加入默认拦截器
<interceptor-ref name="defaultStack"></interceptor-ref> 这样一来Action就会执行自己的拦截器而不会执行全局的。
而且需要使用到全局拦截器的 如下就可以使用:
<action name="girl" class="com.java1234.action.GirlAction" >
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- spring aop 无法代理父类方法 的解决方法
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序