从spring mvc控制器返回页面期间获取堆栈溢出

时间:2012-12-22 20:13:53

标签: spring model-view-controller spring-mvc spring-webflow

我有spring mvc控制器,包含类似

的方法
@requestmapping("jsps/welcome.jsp")
public String handleRequest(){
system.out.println("inside the handler");
return "welcome";}

当我尝试运行welcome.jsp页面时,我发现堆栈溢出,似乎页面转到控制器然后控制器返回页面然后它会再次出现等等。

我的弹簧配置是

<bean id="viewResolver"
class="------"
<property name="prefix">
<value> /jsps/ </value>
</property>
<property name="suffix">
<value> .jsp </value>
</property>

和urlmapping

<map>
<entry key="jsps/welcome.jsp">
<ref bean="mycontroller"/>

3 个答案:

答案 0 :(得分:0)

是的,Controller正在返回字符串"welcome",并且视图解析器正在将其修改为"jsps/welcome.jsp",这再次调用该方法。

@requestmapping("jsps/welcome.jsp")更改为其他内容。通常我们有welcome.htm这样的东西

然后点击welcome.htm它将调用handleRequest方法,方法将返回"welcome"并查看解析程序将其转换为"jsps/welcome.jsp"

答案 1 :(得分:0)

两件事

  1. 对于URL映射,最好不要使用* .jsp。使用jsps / welcome或jsps / welcome.htm
  2. 之类的东西
  3. 要返回视图,请使用ModelAndVeiw
  4. <强>更新

    进行这些更改

    @requestmapping("jsps/welcome")
    public String handleRequest(){
    system.out.println("inside the handler");
    return new ModelAndView("yourpathtojspfile");} // can be "jsps/welcome"
    

    在这里,此页面将返回视图(使用'jsps / welcome',您将获得welcome.jsp)

    当您返回字符串时,您拥有的选项是使用

    return "redirect:someUrl"; //But this will not return a view, instead search for the mapping someUrl.
    

答案 2 :(得分:0)

原因很明显。对jsps/welcome.jsp的请求调用控制器方法,该方法转发到名为“welcome”的视图,该视图再次解析为url jsps/welcome.jsp,再次调用该方法。所以它继续下去,直到抛出StackOverFlow。

解决方案是将网址映射更改为另一个url without .jsp,如

@Requestmapping("/welcome")
public String handleRequest(){
   system.out.println("inside the handler");
   return "welcome";
}