为什么servlet映射中的url-pattern以正斜杠(/)开头

我正在阅读Head First JSP和Servlets一书。 我正在浏览servlet的映射。 我怀疑的是

 test com.avinash.TestServlet   test /ServletBeer.do  
  1. 为什么url-pattern以正斜杠( / )开头?
  2. 正斜杠( / )代表什么? 它代表我们的webapp名称吗?
  3. 如果url-pattern不以正斜杠( / )开头会发生什么?
  4. 它是以正斜杠( / )开头的规范吗?

在书中明确提到:

不要忘记url-pattern中的正斜杠(/)。

你可以解释吗?

url-pattern中的/表示使用此web.xml的Web应用程序的根目录。 所以当你给/ServletBeer.do 。 这意味着http://://ServletBeer.do 。 当你点击这个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应该以/开头