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都实现了),那应该怎么实现?
比如下面这个“判断用户是否登录”例子:
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都实现了),那应该怎么实现?
在struts.xml里面配置:
<!-- 定义全局处理结果 -->
<global-results>
<!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
login.jsp就是要退到的登陆页
就返回你自己的定义的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对这样的应用做了更高级的封装,但实现的基本模式还是一样的。
<!-- 定义全局处理结果 -->
<global-results>
<!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
<result name="Action.LOGIN">/login.jsp </result>
</global-results>
这样使用吗?
不知道三楼的朋友是不是这意思、
也就是说 return Action.LOGIN;和return "login";是等价的所以你只要像如下定义应该就可以了吧
<global-results>
<!-- 逻辑名为login的结果,映射到/login.jsp页面 -->
<result name="login">/login.jsp </result>
</global-results>