<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
<package name="default" extends="struts-default" namespace="/">
<!--
   定义拦截器验证用户是否已经登录登陆后方可访问
 -->
 <interceptors>
    <interceptor name="checkLogin" class="com.chaoshi.no21.actions.Interceptor.checkLoginInterceptor">
    </interceptor>
 </interceptors>
 <!--
 
 顶一个默认的Action方法。如果没找到对应的action则执行这个NotFound action
 
    --><default-action-ref name="notFound" />
    <!--
    定义全局结果集 login 返回登录界面
     -->
     <global-results>
 <result name="login">/WEB-INF/packages/login.jsp</result>
 </global-results><!--
 防止用户乱输入网址发生异常的action
    --><action name="notFound">
      <result>/WEB-INF/packages/login.jsp</result>
    </action><!--
    登录action 
    --><action name="Login" class="com.chaoshi.no21.actions.LoginAction">
    <result name="success">/WEB-INF/packages/menu.jsp</result>
   
    </action>
</package>

<package name="itmeAction" extends="struts-default" namespace="/">
<action name="item_*" class="com.chaoshi.no21.actions.ItemAction" method="{1}">
          <result name="add">/WEB-INF/packages/itemAdd.jsp </result>
          <result name="update">/WEB-INF/packages/itemModify.jsp</result>
          <interceptor-ref name="defaultStack"></interceptor-ref>
    <interceptor-ref name="checkLogin"></interceptor-ref>
</action>

</package>
<package name="link" namespace="/" extends="struts-default">  
        <action name="category_*" class="com.chaoshi.no21.actions.CategorryAction" method="{1}">  
            <result name="add">/WEB-INF/packages/categoryAdd.jsp</result>  
            <result name="update">/WEB-INF/packages/categoryModify.jsp</result>
        </action>  
      
    </package>  

</struts>
我在第一个package中装配拦截器 其他的package 中的action能不能用得到。作用范围是只有一个package还是整个struts.xml都有效比如上面的 我在package name="default"中配置了拦截器但是没有加到action中使用
<package name="default" extends="struts-default" namespace="/">
<!--
   定义拦截器验证用户是否已经登录登陆后方可访问
 -->
 <interceptors>
    <interceptor name="checkLogin" class="com.chaoshi.no21.actions.Interceptor.checkLoginInterceptor">
    </interceptor>
 </interceptors>
 <!--
 
 顶一个默认的Action方法。如果没找到对应的action则执行这个NotFound action
 
    --><default-action-ref name="notFound" />
    <!--
    定义全局结果集 login 返回登录界面
     -->
     <global-results>
 <result name="login">/WEB-INF/packages/login.jsp</result>
 </global-results><!--
 防止用户乱输入网址发生异常的action
    --><action name="notFound">
      <result>/WEB-INF/packages/login.jsp</result>
    </action><!--
    登录action 
    --><action name="Login" class="com.chaoshi.no21.actions.LoginAction">
    <result name="success">/WEB-INF/packages/menu.jsp</result>
   
    </action>
</package>而使用的地方时是另一个package中使用 代码如下<package name="itmeAction" extends="struts-default" namespace="/">
<action name="item_*" class="com.chaoshi.no21.actions.ItemAction" method="{1}">
          <result name="add">/WEB-INF/packages/itemAdd.jsp </result>
          <result name="update">/WEB-INF/packages/itemModify.jsp</result>
          <interceptor-ref name="defaultStack"></interceptor-ref>
    <interceptor-ref name="checkLogin"></interceptor-ref>
</action>

</package>

解决方案 »

  1.   

    首先如果你的interceptor不是默认的,那么这个interceptor只有在你的action中自己配置才会起作用,
    你在package name="default"中配置的拦截器在这个包中的action也得重新定义: <interceptor-ref name="checkLogin"></interceptor-ref> 
    如果你将这个interceptor设置为默认的,那么每一个action都会自动调用了。
      

  2.   

    我在第一个package中装配拦截器 其他的package 中的action能不能用得到。作用范围是只有一个package还是整个struts.xml都有效
    <package name="default" extends="struts-default" namespace="/"> 
    <package name="itmeAction" extends="struts-default" namespace="/"> 
    你看看你的两个package,这两个package其实就等于一个。这两个拦截器的范围都是所有action
    <package name="default" extends="struts-default" namespace="/a"> 
    <package name="itmeAction" extends="struts-default" namespace="/b">这样是别的就是各自namespace下的action了。 
      

  3.   

    interceptor的作用域为一个包下,
    我在第一个package中装配拦截器 其他的package 中的action能不能用得到。作用范围是只有一个package,
    如果其他包要使用这个interceptor就得继承这个包。