Java学习之JavaWeb中缺省的Servlet的奥秘

  一、JavaWeb中的资源

  我们都知道,web服务器的作用是对外提供Web资源服务。比如浏览器中看到的一个网页,或者网页中展现的一张图片等,这些都是Web资源。对于Web资源来说,又分为静态资源和动态资源。

  1.静态资源

  所谓的静态资源,就是固定的Web资源,该资源已经被生成,可以直接拿来存放在服务器上,比如当前服务器的某个Web应用下存放着如下这些静态资源:

Java学习之JavaWeb中缺省的Servlet的奥秘

Java培训.png" width="136" height="139" style="border-width: initial; border-style: none; vertical-align: top; display: inline-block;">

  2.动态资源

  由服务器上的java程序动态生成的资源,也就是说,在没有执行java程序时,该资源是不存在的,当程序运行时,由程序动态生成该资源。比如,以下java程序实现了动态生成一个html页面资源。

Java学习之JavaWeb中缺省的Servlet的奥秘

Java培训.jpg" width="500" height="227" style="border-width: initial; border-style: none; vertical-align: top; display: inline-block;">

  3.静态资源和动态资源的区别

  从上述对静态资源和动态资源的分析可以看出,静态资源是已经成型的资源,而动态资源是由程序动态生成的,在程序执行前不存在。

  二、缺省的Servlet

  在JavaWeb知识中,Servlet指的是服务器上的一个小程序,也就是说可以把java程序写在服务器上,供用户访问,而该java程序的载体就是Servlet。那么什么是缺省的servlet呢

  1.什么是缺省的Servlet

  我们知道当我们在浏览器地址栏中输入url,实际上是在请求某个资源。该资源到底是静态资源还是动态资源呢?要想获得这个问题的答案,我们得先知道web.xml的作用。

Java学习之JavaWeb中缺省的Servlet的奥秘

Java培训.jpg" width="500" height="211" style="border-width: initial; border-style: none; vertical-align: top; display: inline-block;">

  当浏览器地址栏中输入任何的url,都会被web.xml中的servlet-mapping中的url-pattern匹配,当匹配成功后寻找相应的servlet,再通过反射获得该Servlet对象,最后执行该Servlet。详细过程如下图所示:

Java学习之JavaWeb中缺省的Servlet的奥秘

Java培训.png" width="500" height="156" style="border-width: initial; border-style: none; vertical-align: top; display: inline-block;">

  也就是说,浏览器中访问的任何资源,都是要经过web.xml匹配的,那么如果浏览器中访问的资源没有在web.xml的url-pattern中匹配,那么就会去寻找缺省的servlet。

Java学习之JavaWeb中缺省的Servlet的奥秘

Java培训.jpg" width="500" height="176" style="border-width: initial; border-style: none; vertical-align: top; display: inline-block;">

  这段代码配置了一个缺省的Servlet,也就是说,如果在浏览器的url中没有匹配到任何url-pattern,那么就会与配置了"/"的url-pattern进行匹配,并执行该Servlet。

  2.起到全局配置作用的web.xml文件

  我们发现,在大部分情况下我们不需要配置缺省的Servlet。因为我们直接通过url访问一个服务器上的静态资源时,这个url并不会与url-pattern中的任何一个匹配。但我们也确实访问到了,这是为什么呢?

  比如我们当前web应用下的web.xml文件中没有任何url-pattern,但我们却在地址栏里输入:http://localhost:8080/Servlet/1.html,此时能成功的访问到“1.html”静态资源。实际上这是因为,有一个文件帮我们配置了缺省的Servlet,而该缺省的servlet实现的效果,就是把静态资源逐一读取到Java程序中,再讲资源内容写给客户端浏览器。该文件,就是我们说的:起到全局配置作用的web.xml文件,该文件处在服务器的conf文件夹内。

Java学习之JavaWeb中缺省的Servlet的奥秘

Java培训.png" width="276" height="295" style="border-width: initial; border-style: none; vertical-align: top; display: inline-block;">

  全局Web.xml中的缺省Servlet主要完成以下两件事情:

  · 根据url,成功找到服务器上的静态资源并读取,再发送给客户端

  · 根据url,无法找到服务器上的静态资源,于是发送404页面给客户端

Java学习之JavaWeb中缺省的Servlet的奥秘

Java培训.jpg" width="500" height="367" style="border-width: initial; border-style: none; vertical-align: top; display: inline-block;">

  三、总结

  通过上述论述,我们得到了以下几个结论:

  · JavaWeb中浏览器访问的任何url,实际上都是在访问服务器上的某个Servlet,因为web.xml中的url-pattern在负责url的匹配

  · 如果web.xml中的url-pattern匹配不到任何结果,那么就会去寻找缺省的Servlet,即url-pattern是“/”的Servlet

  · 如果在寻找缺省的Servlet时,发现当前Web.xml中没有,于是就会去全局的Web.xml文件中找,找到后执行该Servlet

  · JavaWeb中访问的任何资源,都是动态资源。因为都是经过Servlet运行后生成的,即使直接访问静态资源,也是由缺省的Servlet,通过读取静态资源的内容后,再发送给客户端的。

  千锋成都Java培训作为国内IT研发人才一体化服务的开拓者,为学生制定合理有序的学习计划,0学费入学,2周免费试听不满意不收费,与学员签订就业协议,坚持良心面授,从千锋Java培训班出去的学员均已高薪就业。千锋推出的免费java视频教程,让学员能够方面的巩固基础技术能力。

上一篇:日常Java 2021/11/18


下一篇:第五章JAVAweb