java - 请求映射中的通配符

标签 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>

谁能告诉我这背后的原因,我该如何让它发挥作用?

最佳答案

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

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

关于java - 请求映射中的通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17134752/

相关文章:

java - 加快搜索表单中的数据访问速度

java - 未达到 WebApplicationInitializer

java - Android Studio 无法解决错误 ':app:preDexDebug'

spring - 带有 Spring Boot 的 JSP

java - spring mvc,maven,hibernate java.lang.ClassNotFoundException : com.实体.Candidate

Spring 批处理 : Aggregating records and write count

java - Spring Tool Suite 应用程序上下文 xml 错误,即使所有 bean 似乎都按预期工作

java - 在我的加密字符串上附加新行

java - Eclipse 打开声明/实现悬停菜单为空

java - 使用 servlet 接收音频文件