首页 > 其他分享 >11-GenericServlet

11-GenericServlet

时间:2023-05-07 09:01:47浏览次数:43  
标签:11 Tomcat ServletConfig 适配器 GenericServlet init Servlet

1. 我们编写一个 Servlet 类直接实现 Servlet 接口有什么缺点?

我们只需要 service 方法,其他方法大部分情况下是不需要使用的。代码很丑陋。

2. 适配器设计模式 Adapter

适配器模式是一种结构型设计模式。适配器模式的思想是:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作

手机直接插到 220V 的电压上,手机直接就报废了。怎么办?可以找一个充电器。这个充电器就是一个适配器。手机连接适配器。适配器连接 220V 的电压。这样问题就解决了。

3. 编写一个 GenericServlet 类,这个类是一个抽象类,其中有一个抽象方法 service。

image-20230507082238013

image-20230507082254531

  • GenericServlet 实现 Servlet 接口。
  • GenericServlet 是一个适配器。
  • 以后编写的所有 Servlet 类继承 GenericServlet,重写 service 方法即可。

4. 思考:GenericServlet 类是否需要改造一下?怎么改造?更利于子类程序的编写?

4.1 思考第一个问题:我提供了一个 GenericServlet 之后,init 方法还会执行吗?

还会执行。会执行 GenericServlet 类中的 init 方法。

image-20230507082652744

控制台上打印的结果为:

image-20230507082611733

4.2 思考第二个问题:init 方法是谁调用的?

Tomcat 服务器调用的。

4.3 思考第三个问题:init 方法中的 ServletConfig 对象是谁创建的?是谁传过来的?

  • 都是 Tomcat 干的。
  • Tomcat 服务器先创建了 ServletConfig 对象,然后调用 init 方法,将 ServletConfig 对象传给了 init 方法。

4.3 思考一下 Tomcat 服务器伪代码:

public class Tomcat {
    public static void main(String[] args){
        // .....
        // Tomcat服务器伪代码
        // 创建LoginServlet对象(通过反射机制,调用无参数构造方法来实例化LoginServlet对象)
        Class clazz = Class.forName("com.bjpowernode.javaweb.servlet.LoginServlet");
        Object obj = clazz.newInstance();

        // 向下转型
        Servlet servlet = (Servlet)obj;

        // 创建ServletConfig对象
        // Tomcat服务器负责将ServletConfig对象实例化出来。
        // 多态(Tomcat服务器完全实现了Servlet规范)
        ServletConfig servletConfig = new org.apache.catalina.core.StandardWrapperFacade();

        // 调用Servlet的init方法
        servlet.init(servletConfig);

        // 调用Servlet的service方法
        // ....

    }
}

标签:11,Tomcat,ServletConfig,适配器,GenericServlet,init,Servlet
From: https://www.cnblogs.com/NorthPoet/p/17378853.html

相关文章

  • NC51111 Atlantis
    题目链接题目题目描述ThereareseveralancientGreektextsthatcontaindescriptionsofthefabledislandAtlantis.Someofthesetextsevenincludemapsofpartsoftheisland.Butunfortunately,thesemapsdescribedifferentregionsofAtlantis.Yourfrie......
  • 《SQLi-Labs》03. Less 11~15
    目录Less-11知识点题解Less-12题解Less-13题解Less-14题解Less-15知识点题解sqli。开启新坑。Less-11知识点第十一关页面发生了变化,是账户登录页面。那么注入点在输入框。前十关使用的是get请求,参数都体现在url上,而十一关是post请求,参数在表单里。可以直接在输入框......
  • NC51112 Stars in Your Window
    题目链接题目题目描述Fleetingtimedoesnotblurmymemoryofyou.Canitreallybe4yearssinceIfirstsawyou?Istillremember,vividly,onthebeautifulZhuhaiCampus,4yearsago,fromthemomentIsawyousmile,asyouwerewalkingoutoftheclassr......
  • win11 C盘的配置文件无法编辑 一个命令就好
    在配置win11的服务时,不小时安装在了C盘。而win11对C盘的文件编辑有严格限制。你要注册在线账户设为管理员才能编辑。除了这种方法,还怎么编辑呢?简单的哩,cmd以管理员身份运行。这个会吧。然后在cmd里进到你需要编辑的目录,如下面我要弄这个。mongoDB的配置文件,在命令下使用notepa......
  • Windows11 无法显示卓越性能以及仅有平衡模式一条计划的解决方案
    如果你用的是专业工作站版,且使用了如下命令:Powercfg/DUPLICATESCHEMEe9a42b02-d5df-448d-aa00-03f14749eb61还是无法显示任何多余计划,那么就证明你用的系统版本已经实施了新式待机:ModernStandbyonWindows该模式只可以通过设置-电池电源中设置最佳性能,而无法在控制面板......
  • [CodeForces-1104A]题解(C++)
    PartIPreface原题目(Luogu)原题目(CodeForces)PartIISketch给定一个整数\(n\)。将\(n\)拆分成一个数列\(a_1,a_2,a_3,\dots,a_m\)。使得\(\sum\limits_{k=1}^{m}a_k=n\),每个\(a_i\in[0,9]\)且数列中不相同的数的数量尽量少。PartIIIAnalysis我们很容易......
  • C++11生成随机数
    一、random_device类classrandom_device{public:typedefunsignedintresult_type;//constructor构造函数explicitrandom_device(conststd::string&token="");//propertiesstaticresult_typemin();staticresult_typemax()......
  • 信奥赛题1105:数组逆序重存放
    新奥赛一本通,题11051105:数组逆序重存放时间限制:1000ms         内存限制:65536KB提交数:70600                通过数:47540【题目描述】将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。【输入】两行:第......
  • UVA11107 Life Forms
    怎么没有正常的后缀数组二分的题解啊给定\(n\)个字符串,求出最长的,在多于\(\left\lfloor\frac{n}{2}\right\rfloor\)个字符串中出现的子串,并按照字典序从小到大输出。\(n\leq100\),\(|S|\leq1000\),根据套路可以将所有字符串连成一个,不同的字符串用特殊符号隔开,然后建出新......
  • 68元工业级双核A7,全新T113核心板震撼上市!
     万象奥科全新T113核心板震撼上市,仅68元、工业级品质、双核A7处理器、外设丰富,诠释极致性价比!参数速递1.全志T113工业级处理器,主频1.2GHz2.双核Cortex-A7+玄铁C906RISC-V+HiFi4DSP异构多核3.内存128MB/256MB/512MB,存储256MB/8GB4.支持VideoDecodingH.265/H.264,Video......