`

struts2自带的的拦截器

阅读更多
在刚开始上struts2的时候,刀哥就提到在struts2里面servlet都没有了,采用的全是filter,也就是拦截器,今天终于学习到这东东了。

首先,在昨天的验证中,我们发现了有很多自动显示的错误信息,而我们是从来没有编写过的,这就是struts2自带的的拦截器帮我们完成了这些工作。其实关键之处在于struts.xml文件中,extends=“struts-default”这个属性。

那么如何自己编写一个拦截器呢?

有三种基本的实现方法:

1 implements Interceptor接口,需要实现init,destory,intercept方法,

在intercept方法里面调用arg0.invoke来拦截方法。

2.extends AbstractInterceptor,就只需要实现intercept方法,其他操作和方法1相同。

3.extends MethodFilterInterceptor,实现doIntercept方法,其他操作也相同。

那么2,3有什么区别呢?仅仅是继承不同的父类吗?

当然不是,MethodFilterInterceptor,当和他绑定的action里面有多个业务方法的时候,可以

通过配置来实现拦截哪几个或者,或者不拦截某些方法。这些都是配置文件里面的动作。

那么,接下来就说说配置文件的编写。

注意,配置需要在<action>前面编写

<interceptors>

  <interceptor name="method1" class="com.lovo.interceptor.MyInterceptor1"/>

</interceptors>

接下来在对应的action里面配置

<action ................>

  <interceptor-ref name="method1"/>

</action>

当然,如果一个action需要很多的interceptor,而这些interceptor在其他的action同样需要使用的话,

这样配置就显得太麻烦,那么我们就可以通过配置拦截器链来简化操作。

首先,定义链

<interceptor-stack name="MyStack">   

    <interceptor-ref name="method1"></interceptor-ref>
    <interceptor-ref name="method2"></interceptor-ref>
    <interceptor-ref name="method3">

      <!--这就是前面提到的不需要拦截的方法-->
      <param name="excludeMethods">myexecute</param>

      </interceptor-ref>

    <!-- 添加一个系统默认的拦截器链由此可见链可以嵌套-->
    <interceptor-ref name="defaultStack"></interceptor-ref> 

</interceptor-stack>
添加默认的链是因为我们自己写的拦截器,相当于会替换掉系统默认的拦截器链,但是我们前面是有验证的,所以要加上系统默认的链,就大功告成。



接下来再看下文件上传,已经简化到了很简单很简单的程度了,struts2已经自动的帮我们读了,我们做的就仅仅是写,也就是输出的操作了。用文字不好描述,粘一点核心代码。

public String execute() throws Exception {
        InputStream ins = null;
        OutputStream ous = null;
        String path = request.getRealPath("/upload");

        try{
        ins = new FileInputStream(myFile);
        ous = new FileOutputStream(path + "/" + myFileName);
        int b = 0;
        while((b = ins.read())!= -1){
            ous.write(b);
        }
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            ins.close();
            ous.close();
        }
        return super.execute();
    }
看,就是这样一个简单的输出操作就能完成我们需要的文件上传功能,当然,里面有一个问题是需要注意的,那就是文件名,因为struts2自动帮我们输入了我们选择的文件,那么为了它内部的解析,文件名就已经被修改了,如果我们不管他,最后上传上来的文件文件名就很显得太怪异了,所以,我们需要在提供一个 private属性,名字为private File myFile myFile+FileName,再提供get set方法,就能得到文件原先的名字了。
分享到:
评论

相关推荐

    Struts2自定义拦截器实现防止重复提交

    由于struts2标签的性能不好,项目组决定不使用,但是如果用struts2自带的拦截器防止重复提交又必须struts标签,所以只好自定拦器实现

    自定义拦截器实现防止重复提交

    由于struts2标签的性能不好,但是如果用struts2自带的拦截器防止重复提交又必须struts标签,所以只好自定拦器实现

    struts2讲义_吴峻申

    4.1 拦截器在Struts2中的缺省应用 47 4.2 拦截器原理实现 50 4.3 在Struts2中配置自定义的拦截器 53 4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的自定义拦截器配置 56 4.3.3 继承方法拦截器的...

    Struts2入门教程(全新完整版)

    7.开启struts2自带的开发模式常量 6 8.vo传参模式 7 9.ModerDriven传参模式(不建议采用) 7 10.为什么要使用struts2代替struts1.x 7 二、struts.xml配置及例程 7 1.配置文件的优先级 7 2.配置形式 8 3.package配置...

    Struts2+hibernate+spring的常见面试题

    Struts2的核心组成部分是Action,拦截器和结果页。 Struts2提供了许多方法来创建Action类,并通过struts.xml中或通过注释进行配置。我们可以创建自己的拦截器实现常见任务。 Struts2中自带了很多的标签,并使用...

    对Struts2内建拦截器的知识总结以及将Struts的Jar包上传下

    NULL 博文链接:https://handonghandong.iteye.com/blog/453603

    低清版 大型门户网站是这样炼成的.pdf

    2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100 第3章 struts 2标签库详解与ajax技术应用 103 3.1 struts 2主题与模板 103 3.2 struts 2控制标签详解 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

Global site tag (gtag.js) - Google Analytics