在刚开始上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方法,就能得到文件原先的名字了。
分享到:
相关推荐
**知识点3:Struts2自带拦截器列表** | 序号 | 拦截器名称 | 功能描述 | |------|--------------|----------------------------------------------------------------------------------------------| | 1 | alias ...
本文将深入探讨Struts2的内建拦截器,并解释如何将Struts的JAR包上传到项目中。 首先,让我们理解什么是拦截器。在Struts2框架中,拦截器是一种设计模式,它允许开发者在Action执行前后插入额外的功能,比如日志...
拦截器是Struts2的核心组件之一,它们在Action执行前后执行自定义逻辑。Interceptor示例展示了如何创建和配置拦截器,如日志记录、权限检查等。通过拦截器,开发者可以实现跨Action的功能,如事务管理、性能监控等...
3. **Interceptor(拦截器)**:拦截器是Struts2的重要特性,它们允许在Action调用前后插入额外的功能,如日志记录、权限检查、事务管理等。开发者可以自定义拦截器,并通过配置文件决定拦截器的执行顺序。 4. **...
在实际应用中,你还需要在Struts2的配置文件(通常是`struts.xml`)中注册这个自定义拦截器,并将其应用到相应的Action上,以确保在执行Action之前先经过拦截器的检查。 总结来说,防止重复提交的自定义拦截器主要...
4.1 拦截器在Struts2中的缺省应用 47 4.2 拦截器原理实现 50 4.3 在Struts2中配置自定义的拦截器 53 4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的自定义拦截器配置 56 4.3.3 继承方法拦截器的...
相比于其前身Struts1,Struts2提供了更强大的功能集,包括更加灵活的配置方式、丰富的拦截器机制以及更为简洁的代码结构。Struts2不仅继承了Struts1的优点,如清晰的MVC分离、易于维护和扩展等,还在许多方面进行了...
7.开启struts2自带的开发模式常量 6 8.vo传参模式 7 9.ModerDriven传参模式(不建议采用) 7 10.为什么要使用struts2代替struts1.x 7 二、struts.xml配置及例程 7 1.配置文件的优先级 7 2.配置形式 8 3.package配置...
Struts2的拦截器机制使得添加全局或特定操作的逻辑变得简单,同时提供了一套强大的结果类型和国际化支持。 2. Hibernate持久化框架:Hibernate是Java领域中的一款ORM(对象关系映射)框架,用于简化数据库操作。它...
- **概念介绍**:列出Struts2自带的一些常用拦截器,如`params`拦截器、`servletConfig`拦截器等。 **7.4 开发自己的拦截器** - **实现方式**:指导如何自定义拦截器。 **7.5 深入拦截器编程** - **7.5.1 拦截...
接下来,学习如何创建Action、配置Action映射、使用结果类型、拦截器等,以及如何使用Struts2的UI标签和OGNL表达式,将使你更深入地理解并运用Struts2框架。记得实践是学习的最佳途径,尝试创建一个简单的Struts2...
拦截器是Struts2框架中用于处理请求前后的关键组件,但过度使用会显著拖慢性能。优化策略包括: 1. **去除不必要的拦截器**:审查`struts.xml`中的拦截器配置,移除不使用的拦截器,减少请求处理流程的复杂度。 ...
- **拦截器基础**:拦截器是Struts2中的一个重要组成部分,用于处理请求前后的操作,如权限验证、数据校验等。 - **预定义的拦截器**:Struts2提供了一系列预定义的拦截器,如`defaultStack`、`params`、`...
Struts2可以通过拦截器或者自定义插件实现分页。通常我们需要在Action类中接收当前页码和每页数量,然后在UserDAO的selectByPage()方法中配合SQL的LIMIT和OFFSET子句实现分页查询。 **7. 框架验证** Struts2提供了...
Struts2的核心在于它作为一个servlet,它使用拦截器(Interceptor)机制来处理HTTP请求,实现了业务逻辑与Servlet API的解耦。 在Struts2的工作流程中,客户端发起的请求首先会经过一系列过滤器,其中包括...
4. **拦截器**:拦截器是Struts2的一大特色,它们可以插入到Action调用的链路中,执行预处理或后处理任务,如日志记录、权限验证等。 5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认...
4. `struts-default.xml`:Struts2框架默认加载的配置文件,定义了一些核心bean和拦截器,会被自动包含到`struts.xml`中。 5. 其他配置文件如`velocity.properties`、`struts-default.vm`和`struts-plugin.xml`也是...
- `struts-default.xml`:Struts2框架默认加载的配置文件,定义了核心bean和拦截器,并自动包含在`struts.xml`中。 - 其他配置文件如`velocity.properties`、`struts-default.vm`和`struts-plugin.xml`,服务于特定...
4. **struts-default.xml**:Struts2框架默认加载的配置文件,定义核心bean和拦截器,自动包含到struts.xml中,提供标准配置。 5. **其它配置文件**:如velocity.properties、struts-default.vm、struts-plugin.xml...