一个Servlet实现多请求
前置知识:
Servlet容器如何处理请求资源路径?
1、这个地址 http://localhost:8080/ttms1.01/indexUI.do 什么是请求资源路径?
在地址栏中输入的请求地址中,端口号之后的部分都是请求资源路径。
紧跟端口号的是部署到Web服务器上的应用名(appName)
紧跟应用名的则是具体的应用内的组件路径。
2、Web服务器对请求地址的处理过程:
浏览器依据地址中的IP和端口号与Web服务器建立连接,服务器会获取到请求资源路径信息。根据端口号后面的应用名找到服务器上对应的应用。默认情况下容器会认为应用名后面的是一个Servlet,所以回到web.xml文件中所有是否有与该值匹配的<url-pattern>,找到匹配的值之后再按照<servlet-name>完成对应关系的查找,进而找到要执行的Servlet。如果没有找到匹配的资源服务器就会返回404错误。匹配Servlet的规则
精确匹配 /
通配符匹配 *
后缀匹配 *.
====================================================================================
一、为什么要使用一个Servlet来处理多个请求?
当浏览器发送了一次请求到服务器时,servlet容器会根据请求的url-pattern找到对应的Servlet类,执行对应的doPost或doGet方法,再将响应信息返回给浏览器,这种情况下,一个具体的Servlet类只能处理对应的web.xml中配置的url-pattern请求,一个Servlet类,一对配置信息。如果业务扩展,需要三个Servlet来处理请求,就需要再加上两个具体的Servlet类,两对配置信息,如果继续向上扩展,是不是会认为如此写法的效率非常低下?并且会浪费更多的资源?
为了避免重复的操作(多次编写配置文件,多次新建具体的Servlet类)影响效率,就衍生出一套简单的操作来提高效率,一次配置,多次使用;一个Servlet具体类,处理多个请求。
二、如何使用一个Servlet来处理多个请求(将多个servlet合并)?
1、根据请求的地址,截取其中的具体方法名,然后使用if-else判断匹配,再执行具体的方法。
2、根据截取出来的方法名,使用反射机制,来执行具体的方法。
第一种方案很笨拙,需要不断的使用if-else来判断;第二种方法相对来讲,灵活的处理了原先需要使用if-else的判断逻辑,由类根据方法名自主去执行。
代码举例:
作者:danielJinyu
本文版权归作者和博客园共有,欢迎转载,但未经作者同意请保留此段声明,请在文章页面明显位置给出原文连接
Github:https://github.com/DanielJinyu