0

我有 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"/>
4

3 回答 3

0

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

解决方案是将 url 映射更改为另一个url without .jsp类似

@Requestmapping("/welcome")
public String handleRequest(){
   system.out.println("inside the handler");
   return "welcome";
}
于 2012-12-23T05:03:24.647 回答
0

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

换成@requestmapping("jsps/welcome.jsp")别的东西。通常我们有这样的welcome.htm东西

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

于 2012-12-22T20:35:44.043 回答
0

两件事情

  1. 对于 URL 映射,最好不要使用 *.jsp。使用类似 jsps/welcome 或 jsps/welcome.htm
  2. 要返回视图,请使用ModelAndVeiw

更新

进行这些更改

@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.
于 2012-12-23T04:59:43.877 回答