struts2拦截器的返回值是传给谁的,怎么利用这个返回值?
比如下面这个“判断用户是否登录”例子:
  
   public String intercept(ActionInvocation actionInvocation) throws Exception{  Map session=actionInvocation.getInvocationContext().getSession();
 
 String username=(String)session.get("user");
if(username!=null &&username.length()>0)
return actionnvocation.invoke();
else return Action.LOGIN;
}
 最后一句return Action.LOGIN;不知道怎么用,比如现在用户没有登录,我想让他返回登录页面(相应的action和jsp都实现了),那应该怎么实现?

解决方案 »

  1.   

    你用不用struts2,如果你用了的话,不是很简单的嘛,直接在struts.xml里面配置就可以了。你想要登录,你在web.xml里面配置一个项目的首页就可以了嘛,然后你就可以登录,然后传递数据给action,验证成功然后在转到别的页面。
      

  2.   

    LS的说得不够细我补充下:
    在struts.xml里面配置:
     <!-- 定义全局处理结果 -->
             <global-results>
            <!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
            <result name="login">/login.jsp</result>
             </global-results>
    login.jsp就是要退到的登陆页
      

  3.   

    这里的返回值是给struts2这里struts的框架会根据你的在这里的返回,来做下一步的事情,如果你不需要跳出体系的流程之外的话你只需要返回actionInvocation.invoke的值,就可以了,如果你需要在这里跳出体系外,到自己的指定地方
    就返回你自己的定义的result,比如登录不成功,session验证失败等其实这里有些先servlet里原生的filter一样,以前有一种做法就是在filter里做一些类似拦截器的功能。
    也是类似的。filter里有
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) 
    这样一个方法要实现,我们都是通过这个方法来实现拦截处理的功能这里也是和struts的拦截器里的方式一样
    如果还想在servlet正常的生命周期里玩,就调用 
    chain.doFilter(request, response);如果不想玩了,想处理其他的,可以直接操作request和response实现逻辑或者页面的跳转,而不调用chain.doFilter;struts2对这样的应用做了更高级的封装,但实现的基本模式还是一样的。
      

  4.   

    if(request.getSession().getAttribute("user") != null)
      

  5.   

    我的意思是判断用户是否登录时在拦截器里面实现的,action并没有相应的代码。我主要是想知道拦截器的用法,其他的我都知道,就是最后一句return Action.LOGIN;那怎么使用它,也是在在struts.xml里面配置: 
    <!-- 定义全局处理结果 --> 
            <global-results> 
            <!-- 逻辑名为login的结果,映射到/login.jsp页面 --> 
            <result name="Action.LOGIN">/login.jsp </result> 
            </global-results> 
    这样使用吗?
    不知道三楼的朋友是不是这意思、
      

  6.   

    顶下LZ,本人也刚接触struts2拦截器,搞不懂这句是什么意思!!!
      

  7.   

    Action.LOGIN应该是Action里面已经定义好的一个常量吧,其值为字符串"login"。
    也就是说 return Action.LOGIN;和return "login";是等价的所以你只要像如下定义应该就可以了吧
      <global-results>  
      <!-- 逻辑名为login的结果,映射到/login.jsp页面 -->  
      <result name="login">/login.jsp </result>  
      </global-results>