web.xml文件大概一年前半年前就开始接触了,但一直没有引起重视,究其原因有二。其一,对.xml文件不熟,且并没有多余的精力去弄透,其二servlet即使不在web.xml文件中注册也能访问,反而可能因为注册了又注册错了而不能访问。基于此两个原因,也就一直没关注web.xml文件。这一情况在今天的得到了改变。
具体是这样的,昨天开始我集成了idea和Tomcat的Java web开发环境,当时启动服务器就发生了一个问题,后台资源没法访问,即servlet路径错误,报404错误,没法找到资源,最后通过分析得出两个结论:1、首页即index.html文件在服务器根目录下,而编译后的servlet的也在根目录下,而之前的路径却是多了个项目名,于是去掉项目名就可以了。那现在这里就有个问题了,为什么之前加项目名可以呢?现在想起来主要还是当时eclipse和Tomcat集成出了问题,eclipse仅仅起了开启Tomcat的作用,没有修改配置文件,导致整个项目的访问都是要加上项目名的。
而今天呢,由于修改了编译文件的路径,访问出错了,这实在令我无法忍受,于是索性将web.xml文件配置好一劳永逸。下面我将具体分享下我对web.xml注册servlet的理解。
上面是我注册的一个servlet实例,我会按照前后台交互的次序分解这段实例,首先由于这个servlet是用来处理用户注册的手机号码是否有重复的,所以当用户注册填入手机号符合格式时会出发一个事件,该事件会通过浏览器发送一个url请求,服务器接收到请求就会分解url,域名或者IP加端口为一个部分,不在本次讨论重点,端口号后面又是一部分,这一部分首先会与web.xml文件的servlet标签下的url-pattern子标签的值进行匹配,匹配成功就会通过servlet-name(servlet映射的名字)找到servlet-class(servlet所在的包加类名),然后servlet就会正常处理该请求了。如果没有找到匹配的url-pattern呢,那么服务器还会做一次尝试,直接匹配servlet的映射名字,如果还是找不到就会向浏览器端返回我们常见的404错误。有必要说明——不管是servlet映射还是web.xml注册servlet都是为了安全。