Struts2总结之拦截器

来源:互联网 发布:淘宝店铺装修 编辑:程序博客网 时间:2024/06/05 05:55
 
<!-- Basic stack -->            <interceptor-stack name="basicStack">                <interceptor-ref name="exception"/>                <interceptor-ref name="servletConfig"/>                <interceptor-ref name="prepare"/>                <interceptor-ref name="checkbox"/>                <interceptor-ref name="multiselect"/>                <interceptor-ref name="actionMappingParams"/>                <interceptor-ref name="params">                    <param name="excludeParams">dojo\..*,^struts\..*</param>                </interceptor-ref>                <interceptor-ref name="conversionError"/>            </interceptor-stack>

“basicStack”拦截器是Struts2的核心拦截器 
这个叫做“拦截器栈”,在“拦截器栈”中包含着若干拦截器的引用。 如果“拦截器”比作文件,那么“拦截器”相当于文件夹。 在这个名为“basicStack”的“拦截器栈”中,包含了8种拦截器(这8种拦截器在文档上部定义过的)、
 
 <!-- Basic stack -->            <interceptor-stack name="basicStack">                <interceptor-ref name="exception"/>                <interceptor-ref name="servletConfig"/>                <interceptor-ref name="prepare"/>                <interceptor-ref name="checkbox"/>                <interceptor-ref name="multiselect"/>                <interceptor-ref name="actionMappingParams"/>                <interceptor-ref name="params">                    <param name="excludeParams">dojo\..*,^struts\..*</param>                </interceptor-ref>                <interceptor-ref name="conversionError"/>            </interceptor-stack>

我们注意到在“拦截器栈”中,还有一个“拦截器栈”,那么可以说“拦截器栈”也可以当做“拦截器”来用
默认的拦截器:
<default-interceptor-ref name="defaultStack"/>



1)  在package 中定义拦截器     <interceptor name="" class=""> 
2)  在package 中定义拦截器栈 
<interceptor-stack name="">      <interceptor-ref name=""> </interceptor-stack> 


3)  package中定义默认拦截器      <default-interceptor-ref name=""/> 
4)  action定义拦截器 
<action name="" class="">           <!-- 表示访问该action前先调用这个拦截器-- > <interceptor-ref name="">          <param name=""></param> </interceptor-ref> </action> 


    自定义拦截器:
<struts><package name="action" extends="struts-default"><interceptors><interceptor name="mylogger" class="com.interceptor.LoggerInterceptor"/><interceptor name="mylogin" class="com.interceptor.LoginInterceptor"/></interceptors>                <action name="list" class="com.action.ListAction"><interceptor-ref name="mylogger"/><interceptor-ref name="defaultStack"/>  //一定要加上默认的拦截器 如果不写会被覆盖的<result name="success">/list.jsp</result></action>                <action name="user" class="com.action.UserAction"><interceptor-ref name="mylogin"><param name="includeMethods">add,delete,update</param></interceptor-ref><interceptor-ref name="mylogger"/><interceptor-ref name="defaultStack"/><!-- 查看 --><result name="look">/look.jsp</result><!-- 更新初始显示 --><result name="load">/updateEmp.jsp</result><!-- 添加、更新和删除 --><result name="list" type="redirectAction"><param name="actionName">list</param><param name="namespace">/</param></result>    </action>    </package>    </struts>



自定义拦截器:
   
 public class LoginInterceptor extends MethodFilterInterceptor{@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception {Map<String,Object> session = invocation.getInvocationContext().getSession();Object user = (Object)session.get("user");if(user == null){return "login";}return invocation.invoke();     ////调用后续的拦截器或者Action业务方法}}

ActionInvocation类封装了 Action调用过程中所需要的一切API。

3.  资源文件与国际化(i18n) * 
之前我们学习了Struts2的五大组件(ValueStack、拦截器、Result、Action、标记库)。现在我
 们开始关于返些组件的一些技巧的学习:国际化、错误处理、表单验证等等。 
 
资源文件的国际化internationalization(又名i18n,来由是以i开头n结尾的中间共18个字母)。 
国际化的核心:页面显示的文字是可配置的(如中文、英文、日文等,丌能写死在页面中)。 
 
1)  资源文件 
资源文件一般是属性文件*.properties 
2)  对于中文 
1MyEclipse8.5可以方便的得到unicode编码 
2 使用JDK提供的命令工具native2ascii也可以 
3)  资源文件的命名和位置(重要) 
如果顷目非常大,所有资源文件放入同一个目录下是丌好的。资源文件需要分层和分类。 
  包级资源文件 
表示某资源文件是被一个包中所有Action所使用的, 
  类级资源文件 
表示某资源文件只能被指定类使用 
4)  Action必须继承ActionSupport 
ActionSupport类中已经封装了对资源文件的访问。 
如果在配置文件中action没有class 属性,则调用的就是 
ActionSupport类。