一个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

原文地址:https://www.cnblogs.com/danielJinyu/p/11395061.html