Struts2总结之拦截器

 
<!-- 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{

@Override
protected 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类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值