映射 servlet 来满足我的请求

2023-11-30

我想映射一个 servlet 来服务包含“app”并以 *.html 结尾的请求,如下所示

<url-pattern>/app/*.html</url-pattern>

但在运行应用程序时它给了我一个错误

java.lang.IllegalArgumentException: Invalid <url-pattern> 
/app/*.html in servlet mapping

请帮我绘制地图。请提供我可以了解这些 url 映射规则和约定的链接。


这确实是无效的。通配符必须是第一个或最后一个字符,以分别指示后缀或前缀模式。

<url-pattern>*.html</url-pattern>

or

<url-pattern>/app/*</url-pattern>

这在第 12.2 节中有明确规定Servlet API 规范。以下是相关性的摘录:

12.2 映射规范

在Web应用程序部署描述符中,使用以下语法来定义 映射:

  • 以 a 开头的字符串‘/’字符并以 a 结尾‘/*’后缀用于 路径映射。
  • 以 a 开头的字符串‘*.’前缀用作扩展映射。
  • 空字符串 ("") 是一个特殊的 URL 模式,精确映射到 应用程序的上下文根,即表单的请求http://host:port/<contextroot>/。 在这种情况下,路径信息是’/’servlet 路径和上下文路径是 空字符串(““).
  • 仅包含的字符串’/’字符表示“默认”servlet 应用。在这种情况下,Servlet 路径是请求 URI 减去上下文路径 并且路径信息为空。
  • 所有其他字符串仅用于精确匹配。

要解决此问题,您有 2 个选择:

  1. Use the /app/*模式并做not将非 HTML 文件放入/app。把它们放在别处。

  2. 使用不同的前缀模式,例如/controller/*并创建一个Filter映射到/app/*并执行以下操作doFilter() method:

    String uri = ((HttpServletRequest) request).getRequestURI();
    if (uri.endsWith(".html")) {
        request.getRequestDispatcher("/controller" + uri).forward(request, response);
    } else {
        chain.doFilter(request, response);
    }
    

Related:

  • Java Web 应用程序中的设计模式- 包含简单的 MVC 示例
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

映射 servlet 来满足我的请求 的相关文章

随机推荐