请求映射中的通配符

时间:2013-06-16 15:18:42

标签: java spring spring-mvc annotations http-status-code-404

我正在处理我的Spring应用程序,根据下面的代码,我将多个URL映射到一个方法。我正在制作一个方法“root”来提供以index和root开头的所有请求。

@RequestMapping(value = {"/", "index*"}, method = RequestMethod.GET)
public String root(Model model) {
    logger.info("Welcome to index page.");  
    model.addAttribute("hello", "Welcome to index page." );     
    return "index";
}

以上"index*""index", "index123", "index.html" and "index.txt"的情况下正常工作,请求定向到映射的方法,即"root",但它不适用于"index.jsp"。如果"index.jsp"我正在"HTTP Status 404" "The requested resource is not available"

摘自web.xml

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

有人能让我知道背后的原因以及如何让它发挥作用?

1 个答案:

答案 0 :(得分:0)

我认为这可能正在发生,因为servlet容器将* .jsp请求映射到JspServlet以便编译和执行jsp。如果您正在使用Tomcat,则会发生在Tomcat的web.xml目录中的顶级conf。这意味着以* .jsp结尾的请求会在到达您的控制器之前被截获。 JspServlet会尝试根据网络应用中的路径加载index.jsp文件,并在无法找到时返回404。

对于/index.jsp,您最好在webapp的根目录中实际创建此文件,这样就不会看到404.您可以添加一些代码来将请求重定向到其他地方(也许是/index.html - 或您申请的其他入口点。)