在之前出入java web的时候创建servlet只知道要在注解中添加name和url-pattern
如:
当初仅仅理解的是如果通过一个表单后再Tomcat中去寻找这个servlet需要通过这个url-pattern
但后来在配置web.xml中发现一个servlet可以使用多个url-patterns(现在才发现这里是url-patterns 是复数形式,文章开头都依然写成url-pattern),还有有一个实训系统项目中url-patterns与刚刚学习的时候老师所讲的servlet名字和文件名最好相同而且每次的url-patterns也是根目录下的servlet的名字 有所不同如:
这个url-patterns就是加上了一截其他的字符串,于是乎产生了疑问。在网上其他博客中看到
实际上通过浏览器翻出请求后,Tomcat将应用上下文路径截掉只剩下一个字符串作为servlet的映射匹配
而通常在初学的时候我们通常处理form表单传递的数据,所以只需要一个servlet处理一个业务,仅仅映射了一个
而且文件目录结构很简单没有多个层次,第二张图的url实际上是是SystemManagement下的.jsp发出的请求而servlet的名字是AdminLookNoticesServlet,它将.jsp覆盖掉url变成上下文+/SystemManagement/AdminLookNoticesServlet,然后截掉应用的上下文路径剩下的与之映射匹配
直接上代码:
有几种匹配方式(路径匹配和扩展匹配不可混合(/*.jsp )使用所以不同目录下的扩展匹配最好写成精确匹配,虽然比较麻烦)
精确:
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/user/users.html</url-pattern>
<url-pattern>/index.html</url-pattern>
<url-pattern>/user/addUser.action</url-pattern>
</servlet-mapping>
路径:
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/user/*</url-pattern>
</servlet-mapping>
扩展:
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
缺省:
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
而/*匹配的是包括目录和扩展的所有文件 /LogIn , /*.jsp
而/仅仅是目录不会包括扩展文件 /LogIn
servlet映射匹配是匹配后不会继续匹配