我有servlet注释:
@WebServlet (name="PageServlet", urlPatterns={"*.zt"})
zt
是我正在使用的文件扩展名。
但是,如果我使用
@WebServlet (name="PageServlet", urlPatterns={"/*.zt"})
它与/app/index.zt
和/app/foo/test.zt
等网址不匹配...如何只匹配根zt
下的/app/
个文件?
答案 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”
)