您的位置:首页 > 编程语言 > Java开发

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

2014-10-06 16:07 435 查看
国庆整理: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


   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息