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

  • 相关阅读:
    Spring Boot启动时执行初始化操作三种方法分享
    springboot自定义验证传值范围
    动态数据源玩起来
    多线程之Semaphore登录限流示例
    elementui表格自定义格式实现原理???
    31 Days of Windows Phone | Day #5 System Theming
    SQL 子查询关联查询和非关联查询 性能分享
    windows phone app 发布后在市场里找不到呢。
    APP Hub 应用发布失败,请问大家都是怎么设置可以成功提交哦
    WPF:Main方法到哪里去了?
  • 原文地址:https://www.cnblogs.com/danielJinyu/p/11395061.html
Copyright © 2020-2023  润新知