3

希望您能提供帮助,因为据我所知,这是正确设置的(但请证明我错了)。

我的 spring 3 mvc 项目配置如下:

web.xml

<servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/frontPage</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/myServlet-service.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

和 myServlet-servlet.xml

<mvc:annotation-driven />
<context:component-scan base-package="my.path.to.controllers" />

<bean
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

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

我在 WEB-INF(不是 WEB-INF/views)中有一个 index.jsp,它只不过是说“你好”(我最初试图让它转发到 /frontPage)。

现在,如果我输入控制器的 url (localhost:8080/myServlet/frontPage),控制器工作并显示视图,但是当我第一次启动时,我得到一个 404 而不是 index.jsp 页面。我尝试在 index.jsp 中添加一个前导斜杠,但这没有任何区别。

我一定是在某个地方犯了一个小学生的错误,但我这辈子都不知道在哪里。任何人都可以为我指出吗?

在 STS 2.9.1 servlet 2.5 中运行的 Spring MVC 3.2 Tomcat 6

非常感谢。

4

3 回答 3

12

WEB-INF文件夹不可公开访问。所以你必须把你的东西index.jsp放在可以到达的地方,例如在 web 应用程序的根文件夹中。

/mywebapp
    /WEB-INF/
    /index.jsp
于 2013-04-05T11:33:53.557 回答
0

在 java 配置的情况下,您可以覆盖扩展 WebMvcConfigurerAdapter 的类中的两个方法

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("/index");
}

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

如果您想显式提供 index.html,请将其转换为资源覆盖同一类中的方法,如下所示:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/index.html").addResourceLocations("/WEB-INF/views/index.html");
}

当然addResourceLocations必须遵循选择保存您的意见的文件夹。

查看这些示例

于 2014-05-04T16:38:48.497 回答
-1

这件事发生在你刚开始的时候。只需将 index.html(或任何欢迎文件)放在 WEB-INF 下。这可以通过简单的拖放轻松完成。当您在 STS 中展开文件夹时,可能看起来欢迎文件列在 WEB-INF 下,而实际上并非如此。在此处输入图像描述

于 2016-09-17T18:56:49.113 回答