struts2 拦截器 的 介绍 和 使用 说明

38 篇文章 0 订阅
8 篇文章 0 订阅
国庆整理:struts 拦截器 的 东东

拦截器,在struts中的作用占了好大一块块,好多的东东都可以使用拦截器来做的;可以说是struts中的最重要的一块了!!

拦截器的使用说明:
    
    
struts2中有30多个拦截器,
19个默认使用
1、使用struts2自带的拦截器
token 拦截虽然定义在struts2中,但是默认是不执行。
token 拦截器:可以防止表单重复提交。
Action中使用某个拦截器之后,默认的拦截器反而(失效)不使用了。
1@InterceptorRefs({
@InterceptorRef("defaultStack"),
@InterceptorRef("token")
})
2、在jsp的表单中<s:token/>
注意:Action要继承ActionSuport
2、整个struts2中拦截器分为两种: 1、拦截action所有方法的,以action对象为参照 2、以action中的方法名为参照进行拦截。 自定义拦截器: 1、写一个类,继承struts2的父类 重写doIntercept方法 2、在struts.xml配置文件中配置 <interceptor name="userLogin" class="com.bjsxt.interceptor.UserIsLoginInterceptor"></interceptor>

对于这种以ction为参照的拦截器,它使用有几种方法:
1、使用注解:像上面要点一里面的一样 就不再说明了;
2、使用配置文件:
  •  直接对action进行配置:    配置如下:
    
    
<!--
<package name="test" extends="struts-default">
<action name="myTest" class="com.bjsxt.action.TestAction">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
</action>
</package>
-->

  • 配置一个拦截器栈,让后action继承这个拦截器栈: 如下:
   
   
<package name="test" extends="struts-default">
<interceptors>
<interceptor-stack name="testStack"><!-- defaultStack token 组合成一个新的拦截器栈 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--这个好像就是配置这个name为包默认调用 -->
<default-interceptor-ref name="testStack"></default-interceptor-ref>
</package>
</struts>
然后再action中 使用注解:
    
    
@ParentPackage("test") //就是这个注解,继承包的意思的好像

以action方法 为参照的拦截器:
    
    
<package name="test" extends="struts-default">
<interceptors>
<!-- 定义一个拦截器 -->
<interceptor name="userLogin" class="com.bjsxt.interceptor.UserIsLoginInterceptor">
<param name="excludeMethods">login,execute</param>
<!-- 这个标签里面的的值是 拦截器 除去的方法名 -->
<!-- 当然还有一个包括的标签 name="includemethods" -->
</interceptor>
<interceptor-stack name="userStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="userLogin"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="userStack"></default-interceptor-ref>
</package>
这个首先也是定义一个拦截器,只是在他的下面有两个的属性,可以来设置执行对象, excludemethods  includemethods 除外和包括;

拦截器类的编写;
编写这个类,就只要继承MethodFilterInterceptor这个类就可以了,然后再重写doIntercept()这个方法;就可以了;
比如以下 这个的接口:
    
    
public class UserIsLoginInterceptor extends MethodFilterInterceptor {
protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
// HttpSession session= ServletActionContext.getRequest().getSession();
System.out.println("判断用户是否登录");
//如果session中没有user对象,意味着没有登录,不需要往下执行,直接跳转页面到登录页面。 return 登录的 reuslt
//session 有User对象,已经登录,可以往下执行
return actionInvocation.invoke();
}
}
这个 actionInvocation . invoke ()这个方法就是继续执行方法;
这个拦截器就这样子就可以了,具体的东西就要看具体的需求了;

就是这个样子了,拦截器的编写和设置就这些的,struts 的强大很多都是在拦截器的 碉堡上,本身默认的拦截器就有一堆堆,自己还可以继续弄,很多的处理都可以在拦截器上面进行操作,这样就可以把action变得简单一些了。而且所有的拦截器都可以重用,箱单的好用,不过,最多会用用现成的,自己编写就麻烦了,估计一时半伙儿是搞不定的了。
一些编写好的类 还是要去看文档 或者 百度google 去看看 功能 和 用法 的;


一些其他的东东:关于文件上传的:
    
    
1、导入jar, commons-fileupload, io
2、上传文件默认大小2M(修改)
3、form 中 enctype="multipart/form-data"
<input type="file" name="inputName">
4、在Action声明一个属性 原始文件名:inputName+FileName 命名规则
声明一个File类型的属性:属性==inputName


   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小_杭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值