我已经设置了我的spring-mvc servlet以匹配* .page 请求。我已将web.xml中的 welcome-file-list 设置为index.page
当我转到我的网络服务器的根目录时,这是有效的:
http://me.com会被正确地重定向到http://me.com/index.page。
但是,当我使用子目录时,它不会重定向:
http://me.com/dashboard 不被重定向到http://me.com/dashboard/index.page
有没有办法让这个映射有效?
我的web.xml文件(摘录):
<welcome-file-list>
<welcome-file>index.page</welcome-file>
</welcome-file-list>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>*.page</url-pattern>
</servlet-mapping>
我的webdefault.xml(来自码头):
<init-param>
<param-name>dirAllowed</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>welcomeServlets</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>redirectWelcome</param-name>
<param-value>false</param-value>
</init-param>
答案 0 :(得分:12)
<welcome-file>
应表示任意文件夹中的物理存在文件,您希望在最终用户请求文件夹(例如根/
时)时提供该文件,但它也可以是任何其他文件夹例如/foo/
)。您只需要了解servletcontainer将在执行转发之前测试其物理存在,如果它不存在,则将返回HTTP 404页面未找到错误。
在您的特定情况下,您的根文件夹中没有物理index.page
文件。您的根文件夹中实际上一个index.jsp
文件。 index.page
仅仅是一个虚拟URL。因此servletcontainer将无法找到物理index.page
文件,因此错误输出404.
您可以通过在同一文件夹中放置index.page
文件旁边的物理存在index.jsp
文件来欺骗servletcontainer来解决此问题。该文件可以保持完全为空。 servletcontainer将找到该文件,然后转发到index.page
,然后调用控制器servlet,后者实际上将index.jsp
视为视图。那会很好。
答案 1 :(得分:3)
它只适用于真实的物理目录,不适用于模拟目录结构的任意servlet映射。
Spring MVC允许非常复杂的URL映射,因此您最好使用@RequestMapping
答案 2 :(得分:2)
为避免转发欢迎文件本身,最好为其添加映射。
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>index.html</url-pattern>
</servlet-mapping>
在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
必须在选择的文件夹后面保存您的观点。
答案 3 :(得分:0)
这是您需要在Web服务器中设置的内容,因此可能是服务器特定的
对于Apache HTTP Server,您可以通过设置DirectoryIndex指令来实现此目的:
DirectoryIndex index.page
显然,有人已经提出这个问题,并已在web.xml default file in directory (for jetty, or tomcat)?接受了答案 - 看看它是否适合你。