为什么servlet映射中的url-pattern以正斜杠(/)开头
我正在阅读Head First JSP和Servlets一书。 我正在浏览servlet的映射。 我怀疑的是
test com.avinash.TestServlet test /ServletBeer.do
- 为什么
url-pattern
以正斜杠(/
)开头? - 正斜杠(
/
)代表什么? 它代表我们的webapp名称吗? - 如果
url-pattern
不以正斜杠(/
)开头会发生什么? - 它是以正斜杠(
/
)开头的规范吗?
在书中明确提到:
不要忘记url-pattern中的正斜杠(/)。
你可以解释吗?
url-pattern中的/
表示使用此web.xml的Web应用程序的根目录。 所以当你给/ServletBeer.do
。 这意味着http://
。 当你点击这个url时,你将调用已经映射到这个,即com.avinash.TestServlet
的servlet。
您必须在所有url映射中使用/
这不是强制性的 – 这完全取决于您希望如何配置它。 /
只是一个正则表达式。 您还可以在url-pattern中使用*.jsp
– 每次在Web应用程序中请求任何jsp时,它都会实际调用此servlet。 考虑** JSR-000315 Java Servlet 3.0最终版本中的12.2规范映射**
12.2映射规范在Web应用程序部署描述符中,以下语法用于定义映射:
■以“/”字符开头并以“/ *”后缀结尾的字符串用于路径映射。
■以“*”开头的字符串 prefix用作扩展映射。
■空字符串(“”)是一种特殊的URL模式,它完全映射到应用程序的上下文根,即
http://host:port/
forms的请求。 在这种情况下,路径信息是’/’,servlet路径和上下文路径是空字符串(“”)。/ ■仅包含“/”字符的字符串表示应用程序的“默认”servlet。 在这种情况下,servlet路径是请求URI减去上下文路径,路径信息为null。
■所有其他字符串仅用于完全匹配
在上述问题上,我可以找到其中一个问题的答案。
如果url-pattern不以正斜杠(/)开头会发生什么。 我已经检查了但我不记得了
当我通过删除url-pattern中的/来启动tomcat时出现以下错误
Caused by: java.lang.IllegalArgumentException: Invalid ServletBeer.do in servlet mapping at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3267) at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3242) at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1324) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1348) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:880) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:378) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5343) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
这表明如果我们不使用扩展映射强制,则url-pattern应该以/开头