struts2拦截器


1.什么是拦截器组件,拦截器组件的作用

 

   拦截器组件,适合封装一些共通功能。
   可以采用配置方式,灵活使用,重复使用。
   Struts框架中提供了大量的拦截器组件,默认执行一个名为defaultStack的拦截器。
   拦截器可以将Action->Result包裹起来,在它们之前或之后追加处理逻辑。
   action请求-->拦截器1-->拦截器2-->Action-->Result-->拦截器2-->拦截器1-->响应
  
  


2.拦截器组件原理

 

  Struts2提供的拦截器不能满足需求,可以允许开发者自定义。自定义步骤如下:
 
  1)编写一个拦截器组件类
 
     要符合Interceptor接口标准,实现其定义的方法。
     也可继承extends  AbstractInterceptor  实现拦截器
    
    --ActionInvocation API的使用:
    
       Object action = in.getAction();
       ValueStack vs = in.getStack();
       ActionContext ac =in.getInvocationContext();
       in.invoke();
       in.invokeActionOnly();
     
    --intercept()方法返回值的作用
   
      当该方法执行了in.invoke(),该返回值无效。
      如果没有执行invoke(),返回的String标识,控制器会根据返回的标识寻找Result组件处理响应。
     
  2)将拦截器组件注册到Struts框架
 
    在struts.xml配置中,定义拦截器.定义格式如下:
     <interceptors>
        <interceptor name="标识符" class="拦截器实现类"/>
     </interceptors>
   
  3)拦截器使用
  
    --为某一个Action指定拦截器
    <action name="" class="">
        <interceptor-ref name="要引用的拦截器的标识符"/>
        //可以添加多个
        <interceptor-ref/>
     </action>
    --为当前package中所有Action指定默认拦截器
     <default-interceptor-ref name=""/>

   注意:当使用了自定义的拦截器后,默认的defaultStack不再执行,会破坏Struts原有机制,
      因此需要添加defaultStack的引用。

 

*3.拦截器组件的使用

 

  1)自定义拦截器组件(参考netctoss登录检查示例)
 
 *2)使用struts2框架的拦截器组件
 
   利用fileUpload拦截器实现文件上传功能
    --掌握fileUpload拦截器的使用方法
     提示:引入commons-io.jar开发包
    
   a.JSP页面表单属性设置
  
      method="post"
      enctype="multipart/form-data"
      <input type="file" name="xxx"/>
   
   b.Action组件
   
       private File xxx;
       private String xxxFileName;
       private String xxxContentType;
 
       public String execute(){
         //将临时文件xxx对象复制到目标位置
       }
     
    c.拦截器配置
   
       默认执行的defaultStack包含了fileUpload拦截器,所以可以不用配置。

  --fileUpload实现原理
 
  public class FileUploadInterceptor
  extends AbstractInterceptor{
    public String intercept(ActionInvocation in){
     //调用commons-fileupload.jar组件解析request信息
     //将解析出来的文件信息,以临时文件形式保存到Tomcat一个临时目录
     //将临时文件,源文件名,源文件类型给Action属性赋值
  in.invoke();//执行UploadAction.execute()
     //将临时文件移除
     }
   }

///


   
4.拦截器例子:
 


 /**
  * 登录检查拦截器
  * @author Administrator
  *
  */
 public class CheckLoginInterceptor
  extends  AbstractInterceptor{

  //拦截器主处理方法
  public String intercept(ActionInvocation in) throws Exception {
   
   //登录检查
   ActionContext ac = in.getInvocationContext();
   Map<String,Object> session = ac.getSession();
   //获取session中的用户信息
   Admin admin = (Admin)
    session.get(Constants.KEY_ADMIN);
   if(admin == null){//找不到用户信息
    //定位到登录页面
    return "login";//有效,将来去struts.xml中找result定义
   }
    in.invoke();//调用后面的Action-->Result功能
    return null;//因为执行了invoke,该返回值无效
   }

 }
// 
 
 
 
 
    

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值