Servlet URL模式与斜杠前缀匹配

时间:2014-11-07 05:49:08

标签: java servlets

我有servlet注释:

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

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

但是,如果我使用

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

它与/app/index.zt/app/foo/test.zt等网址不匹配...如何只匹配根zt下的/app/个文件?

2 个答案:

答案 0 :(得分:3)

servlet容器使用路径映射或扩展映射。你不能使用两者的组合。请参阅Servlet规范的¶12.2:

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

答案 1 :(得分:0)

在您的代码中*不被视为wild-card,您必须使用/app/*

示例1:/ string1 / * / string2,*将作为外卡使用

  

@WebServlet(
    urlPatterns = {“/ string1 / * / string2”},
    NAME = “ServletName”,
  initParams在= {        @WebInitParam(name =“name”,value =“string2”)
  })

示例2:

  

@WebServlet(
  urlPatterns = {“/ string1 / *”},
  NAME = “ServletName”
  )