Struts2自学入门(四)——简单拦截器

17 篇文章 0 订阅
11 篇文章 0 订阅

</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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值