struts2莫名其妙跳转问题

lgm277531070 2010-05-27 11:33:36
下面是用struts2的登陆action方法

public String login(){
request = ServletActionContext.getRequest();
response =ServletActionContext.getResponse();
adminManager = new AdminManagerImpl();
boolean b = adminManager.islogin(admin, password);
if(!b){
request.setAttribute("msg", "用户名或密码错误!");
return "result";
}
request.getSession().setAttribute("admin", admin);
return "index";
}


现在问题是:输入正确的用户和密码,用调试跟踪代码,能正确执行到 return "index" 这里,然后跳转到指定的页面。然后注销退出,第二次登陆,继续用调试跟踪代码,依然能执行到 return "index" 这里,问题是,返回的页面不是我要指定的页面.. 然后第三次进行登陆,结果又正确的跳转到指定页面,第四次登陆依然能执行到 return "index" 但是又没跳转到指定页面。就这样很有规律的一下能进去,一下不能进去

小弟愚昧,实在是不明白怎么回事! 还望大侠们给小弟指点迷津哦!
...全文
131 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgm277531070 2010-05-27
  • 打赏
  • 举报
回复

严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
at org.apache.struts2.dispatcher.ServletRedirectResult.doExecute(ServletRedirectResult.java:153)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling

头痛啊,这个问题还是和之前一样很有规律的.....
lgm277531070 2010-05-27
  • 打赏
  • 举报
回复
回3楼的 这是我的xml配置:

<action name="*" class="com.action.AdminAction" method="{1}">
<result name="index" admin/index.jsp</result>
<result name="login" type="redirect">/login.jsp</result>
<result name="result">/result.jsp</result>
</action>

说明下:/admin/*用了过滤,如果没有登陆 就跳转到/login.jsp页面。
错误的时候跳转回了登陆页面,

现在又出现新的问题了。我xml配置修改了

<action name="*" class="com.action.AdminAction" method="{1}">
<result name="index" type="redirect">/admin/index.jsp</result>
<result name="login" type="redirect">/login.jsp</result>
<result name="result">/result.jsp</result>
</action>

我登陆成功后从定向到admin/index.jsp中。问题却跟之前一样,第一次成功登陆,第二次没成功,第三次又成功登陆,这样有规律的循环,但是没成功时候并没有跳转到login.jsp页面,而是报一下错误
izard999 2010-05-27
  • 打赏
  • 举报
回复
第四次登陆依然能执行到 return "index" 但是又没跳转到指定页面。就这样很有规律的一下能进去,一下不能进去
那么请问下,没跳到你指定的页面,,跳到哪里去了.?

最好给下你struts,xml的配置信息还有你访问action的路径.!
ingto1167 2010-05-27
  • 打赏
  • 举报
回复
很好随碟附送
cuiqunhao 2010-05-27
  • 打赏
  • 举报
回复
Struts2.。我也刚刚接触。。。
myylmyas1 2010-05-27
  • 打赏
  • 举报
回复
应该是配置问题,规规矩矩的一一对应的配置比较安全,刚开始不要弄得太花,平实一点容易懂!
izard999 2010-05-27
  • 打赏
  • 举报
回复
Struts2拦截action的请求最好不要用filter, 否则如果与namespace同名, 就出问题!
问题解决就好.!
lgm277531070 2010-05-27
  • 打赏
  • 举报
回复
回7楼的:struts2用的还不熟练,你说的用Interceptor,我倒是给忘记了,只是习惯性的用了filter。多谢提醒。
回8楼的:问题解决了哦,你说的没错,是配置问题。我namespace设置为“/admin” 而我fileter的过滤路径也设置为“/admin/*” 这就导致了我要请求namespace=“/admin”这个包动作就会先去filter。在登陆的时候,没有执行action,而是先去filter了,而这个过程我还没有登陆保存session,所以就直接返回了logn.jsp.但是不明白的是为什么失败之后再次登陆又可以成功。
现在我把namespace的值改成其他的了,问题就解决了

interceptor 用的不太熟,有时间去学习 呵呵!
redlotus_lyn 2010-05-27
  • 打赏
  • 举报
回复
是你配置的问题。

为什么要用*配置。

就是这问题,并不是*本身配置问题,而是登陆成功后,注销,在登陆的时候,请求变了造成的。
izard999 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shineboyadh 的回复:]
request.getSession().setAttribute("admin", admin);
return "index";
把这个跳转放到else里面
[/Quote]
..LS新手吧.? if里面不return的话那句代码是肯定会执行的.! if-else用多了逻辑容易乱.!

错误我在看, 但是我不太明白的是,既然是拦截Action的请求,在Struts2的环境下为何不用Interceptor而去用filter呢.?
request.getSession().setAttribute("admin", admin);
return "index";
把这个跳转放到else里面

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧