0

我在spring mvc框架上做了一个基本的应用程序。

当我在 web.xml 上编写以下 url 模式时:

<servlet-mapping>
        <servlet-name>springxml</servlet-name>
        <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>

并运行应用程序(使用 ../SpringMVCXML/welcome.jsp),它显示 HTTP 状态 404 错误。

当我更改 .jsp 以外的 url 模式时,应用程序运行良好。

为什么应用程序没有在.jsp url 模式上运行?

我曾使用以下 java 类充当控制器。

@Controller
@RequestMapping(value="/welcome",method=RequestMethod.GET)
public class ControllerHello {
    @RequestMapping(method=RequestMethod.GET)
    public String printHello(ModelMap map) {
        map.addAttribute("message", "Hello Spring MVC Framework");
        return "hello";
    }
}

另外,我的 springxml-servlet.xml 有以下代码:

<bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
4

2 回答 2

1

假设你还有 springxml servlet 也服务于 *.jsp 之外的其他视图(你的 web.xml 中可能有其他 servlet-mappings),情况如下:

您为路径 /welcome 注册了一个控制器,而不是为 /welcome.jsp。因此,/welcome.jsp 没有映射到 Spring mvc 控制器。/welcome HelloController 将为您提供字符串输出 hello。

/welcome.jsp 将给出错误 404,因为它位于 WEB-INF 中并且该 url 没有 Spring MVC 控制器。

org.springframework.web.servlet.view.InternalResourceViewResolver 旨在将您的 jsp 文件放在 /WEB-INF 中。查看http://www.mkyong.com/spring-mvc/spring-mvc-internalresourceviewresolver-example/了解 InternalResourceResolver 的作用的简单说明。基本上,它使 Spring MVC 能够使用不在公共资源中的 jsp 作为视图。这不是将这些 jsps 注册为有效 url 的机制。

url 在请求映射中确定。

于 2013-02-22T08:11:40.520 回答
0

您可能没有任何弹簧控制器映射到此 URL /welcome.jsp 您使用的是什么版本的弹簧?如果您使用的是 spring 2.5 或更高版本,请尝试以下代码

@RequestMapping(value = "welcome.jsp")
public String welcomeJSP(){
    return "welcome";
}
于 2013-02-22T07:21:47.990 回答