日期:2014-05-17  浏览次数:20730 次

struts2拦截器
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都实现了),那应该怎么实现?

------解决方案--------------------
LS的说得不够细

我补充下:
在struts.xml里面配置:
 <!-- 定义全局处理结果 -->
<global-results>
<!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
login.jsp就是要退到的登陆页
------解决方案--------------------
这里的返回值是给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对这样的应用做了更高级的封装,但实现的基本模式还是一样的。
------解决方案--------------------
if(request.getSession().getAttribute("user") != null)