我的servlet注释为:

@WebServlet (name="PageServlet", urlPatterns={"*.zt"})


zt是我正在使用的文件扩展名。

但是,如果我使用

@WebServlet (name="PageServlet", urlPatterns={"/*.zt"})


它与诸如/app/index.zt/app/foo/test.zt之类的URL不匹配...如何仅匹配根zt下的/app/文件?

最佳答案

Servlet容器使用路径映射或扩展映射。您不能将两者结合使用。参见Servlet规范的¶12.2:


  
  路径映射使用以“ /”字符开头并以“ / *”后缀结尾的字符串。
  以“ *”开头的字符串用作扩展名映射。
  空字符串(“”)是一种特殊的网址格式,它精确地映射到
  应用程序的上下文根,即形式为http://host:port/<context- root>/的请求。在这种情况下,路径信息为“ /”,而servlet路径和上下文路径为空字符串(“”)。
  仅包含“ /”字符的字符串表示应用程序的“默认” servlet。在这种情况下,Servlet路径是请求URI减去上下文路径,并且路径信息为null。
  所有其他字符串仅用于完全匹配。

09-05 01:17