以下是我的例子 这是STRUTS的XML   loginInterceptor是我自定义的拦截器
 <package name="one" extends="struts-default" namespace="/one">    
<!-- 设置一个拦截器栈 -->
     <interceptors>
         <interceptor name="loginInterceptor" class="XXXXXX.XX.loginInterceptor"></interceptor>
         <interceptor-stack name="mystack">
         <interceptor-ref name="defaultStack"/>
         <interceptor-ref name="loginInterceptor"/>
         </interceptor-stack>
        </interceptors> 
 <!-- 定义在该ACTION包下默认要使用的拦截器栈 -->
        <default-interceptor-ref name="mystack"/>
       <!-- 定义全局转向 -->
  <global-results>
  <result name="input">/error.jsp</result>
  </global-results>
 
 <!-- crud add operation -->
  <action name="addCrudTest" class="crudTestAction" method="addCrudTest">  
    <result name="success">/index.jsp</result>  
   </action>
</package> 我在登陆页面已经把登陆的用户ID放到session里面了接下来是我的loginInterceptor 拦截器
@Override
public String intercept(ActionInvocation invocation) throws Exception {

  System.out.println("----------------------进入监听");
 ActionContext ctx = invocation.getInvocationContext();
 session = ctx.getSession();
 userId=(String) session.get("userId");
 
if(userId!=null&&!userId.equals("")){
System.out.println("----------------------用户:"+userId+" 进入系统");
return invocation.invoke();
}
System.out.println("----------------------非法用户访问!");
return Action.INPUT;
}
现在一切都正常,可是当我在页面中直接输入addCrudTest.action的时候 居然总说找不到要转向的页面?而且拦截器里面的输出语句 重复输出了11遍?我另外一个项目就是这样配的 完全正常  所以万般无奈只能请高人解答了

解决方案 »

  1.   

    对于Struts2不怎么了解;
    但看楼主贴出的配置文件,有点疑问:
    你定义的namespace="/one"是不是应该加入addCrudTest.action前面,如one/addCrudTest.action;
      

  2.   


    感谢你的提示,刚才在网上又搜了一下有个人说的回答跟你很像,因为跳转是服务器端跳转,地址栏没改变,所以会造成路径错误,我给全局跳转后面改成了重定向:<result name="input" type="redirect">/error.jsp</result>
    这样就好了,不过我还是不太理解 即使type="redirect"重定向,可是和命名空间似乎关系也不大。有点疑惑。但是问题确实解决了如果有朋友遇到此类问题,希望可以帮助你解决。