gpt4 book ai didi

spring - @RequestMapping 欢迎文件

转载 作者:行者123 更新时间:2023-11-28 22:45:33 24 4
gpt4 key购买 nike

我的目标是在不映射/* 的情况下将/{any path} 和 *.html 映射到 servlet。例如:

map:
/foo
/foobar/
/bar.html
/foo/bar.html

don't map:
/foo.js
/bar.pdf

为了做到这一点,我有一个 servlet 和欢迎文件映射如下:

web.xml:

<servlet-mapping>
<servlet-name>someServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

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

在 Controller 中,我有

@RequestMapping(value="/index.html", method=RequestMethod.GET)
public ModelAndView showPage(HttpServletRequest request){
...
}

这将不起作用 - servlet 将不会在 /test 上触发。但是,我发现如果我在 /test/index.html 创建一个空白文件,那么它 工作 - 我假设默认 servlet 通过查找 index.html 以某种方式提供帮助。

不幸的是,我不能依赖静态文件。有什么方法可以使这个映射工作而无需空白文件 hack 且无需将/* 映射到 servlet?

最佳答案

答案取决于你是否希望Spring来处理:

  • 仅限以 .html 结尾或没有扩展名的 URL,
  • 所有 URL,但以 .js 和 .pdf 等结尾的除外

这两个规则都与您在问题中提供的列表匹配。然而,第二个更容易实现。如果您有不想让 Spring 处理的已知扩展列表,只需将 web.xml 文件中的这些文件映射到默认处理程序,如下所示:

<servlet-mapping>
<servlet-name>someServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>

然而,这仅在您知道您不想让 Spring 处理的所有扩展时才有效,因为您必须在 web.xml 中列出每个扩展。

如果您真的想拒绝除 .html 之外的任何 扩展名,那么您需要以某种方式覆盖 Spring 的默认行为。我不会在这里讨论,因为我认为以上是更好的选择。但是在这个问题中解释了两种可能的方法:spring mvc how to bypass DispatcherServlet for *.html files?

关于spring - @RequestMapping 欢迎文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5643656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com