2017-06-23 142 views
0

当我使用“/”作为我的url模式时,我可以在地址栏中输入斜线并将其成功登录到servlet 。 也就是说,两个url-pattern“/”vs“/ *”vs servlet中的空白

http://localhost:8080/firstServlet/ 

以及

http://localhost:8080/firstServlet/any_random_string 

给了我同样的结果。

但是,当我有网址模式的空白,然后只有http://localhost:8080/firstServlet/工作和一切。请解释原因。 有一些herehere类似,但我不完全明白它。

模式“/ *”也表现得像“/”一样。

+0

此外,“/”和“/ *”的行为方式相同,当我说“/ *”时,我不是指“/”后跟“/*“就像在一个目录匹配! –

+0

这个问题已经在这里回答[在/和/ *在servlet映射url模式之间的区别](https://stackoverflow.com/questions/4140448/difference-between-and-in-servlet-mapping-url-pattern) –

回答

1
<url-pattern>/*</url-pattern> 

的/ *上一个servlet覆盖所有其他的servlet,包括由servletcontainer提供诸如默认的servlet和JSP的servlet所有servlet。无论您要求什么请求,它都会以该servlet结束。因此这是servlet的错误URL模式。通常情况下,您希望使用/ *仅限过滤器

<url-pattern>/</url-pattern> 

/不会覆盖任何其他的servlet。它只替换servletcontainer的内置默认servlet,用于所有不匹配任何其他注册servlet的请求。这通常只调用静态资源(CSS/JS /图像/等)和目录列表

而对于空URL模式

<url-pattern></url-pattern> 

空字符串(“”)是一个特殊的URL模式那么它正好映射到 应用程序的上下文根

+0

你的意思是如何在web.xml中输入它? –

+0

对于错误输入的评论,我很抱歉。我不明白“/ *”,我明白为什么“/”的行为与您的答案一样,并且[在这里](https://www.coderanch.com/t/366340/java/servlet-mapping-url -模式)。另外,空字符串呢?请将其纳入您的回答。 –

+0

完成后,我更新我的答案 –