首页 > 其他分享 >GenericServlet改造,ServletConfig接口

GenericServlet改造,ServletConfig接口

时间:2022-10-19 09:11:40浏览次数:55  
标签:Tomcat 对象 Servlet GenericServlet 接口 方法 ServletConfig

GenericServlet(java自己编写好了)

  • 我们编写一个Servlet类直接实现Servlet接口有什么缺点?
    • 我们只需要service方法,其他方法大部分情况下是不需要使用的。代码很丑陋。
  • 适配器设计模式Adapter
    • 手机直接插到220V的电压上,手机直接就报废了。怎么办?可以找一个充电器。这个充电器就是一个适配器。手机连接适配器。适配器连接220V的电压。这样问题就解决了。
  • 编写一个GenericServlet类,这个类是一个抽象类,其中有一个抽象方法service
    • GenericServlet实现Servlet接口。
    • GenericServlet是一个适配器。
    • 以后编写的所有Servlet类继承GenericServlet,重写service方法即可。
  • 思考:GenericServlet类是否需要改造一下?怎么改造?更利于子类程序的编写?
    • 思考第一个问题:我提供了一个GenericServlet之后,init方法还会执行吗?
      • 还会执行。会执行GenericServlet类中的init方法。
    • 思考第二个问题:init方法是谁调用的?
      • Tomcat服务器调用的。
    • 思考第三个问题:init方法中的ServletConfig对象是谁创建的?是谁传过来的?
      • 都是Tomcat干的。
      • Tomcat服务器先创建了ServletConfig对象,然后调用init方法,将ServletConfig对象传给了init方法。
    • 思考一下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();
        /*newInstance方法主要作用?
        通过 Class 类的 newInstance() 方法创建对象,该方法要求该 Class 对应类有无参构造		方法
  		 */     
        
        // 向下转型
        Servlet servlet = (Servlet)obj;
        
        // 创建ServletConfig对象
        // Tomcat服务器负责将ServletConfig对象实例化出来。
        // 多态(Tomcat服务器完全实现了Servlet规范)
        ServletConfig servletConfig = new org.apache.catalina.core.StandardWrapperFacade();
        
        // 调用Servlet的init方法
        servlet.init(servletConfig);
        
        // 调用Servlet的service方法
        // ....
        
    }
}

ServletConfig接口

ServletConfig

  • ServletConfig是什么?

     jakarta.servlet.ServletConfig(ServletConfig是Servlet规范中的一员。)
     ServletConfig对象中封装了标签中的配置信息。(web.xml文件中servlet的配置信息)
     ServletConfig是一个接口。(jakarta.servlet。Servlet是一个接口)
    
  • 谁去实现了这个接口呢?

public class org.apache.catalina.core.StandardWrapperFacade implements Servlet{}
结论:Tomcat服务器实现了ServletConfig接口。
思考:如果把Tomcat服务器换成jetty服务器,输出ServletConfig对象,还是这个结果吗?
不一定一样,包名类名可能和Tomcat不一样。但是他们都实现了ServletConfig这个规范。

  • 一个Servlet对象中有一个ServletConfig对象。(Servlet和ServletConfig对象是一对一。

100个Servlet,就应该有100个ServeltConfig对象。

  • ServletConfig对象是谁创建的? 什么时候创建的?
    • Tomcat服务器(WEB服务器) 创建了ServletConfig对象。
    • 在创建Servllet对象的时候,同时创建了ServletConfig对象

ServletConfig接口到底是干啥的?有什么用?

Config是Configuration单词的缩写?
servletConfig对象被翻译为:Servlet对象的配置信息对象。
一个Servlet对象就有一个配置信息对象。
两个Servlet对象就有两个配置信息对象。

ServletConfig对象中到底包装了什么信息呢?
Tomcat小猫咪解析web.xml文件,将web.xml文件中标签中的配置信息自动包装到ServletConfig对象中。

  <servlet>
        <servlet-name>ServletConfig</servlet-name>
        <servlet-class>com.bjpowernode.javaweb.servlet.ConfigTestServlet</servlet-class>
    </servlet>
    ServletConfig对象中包装的信息是:
     web.xml文件中M<servlet></servlet>标签的配置信息。
  • 7、ServletConfig接口中有哪些方法

         <servlet>
            <servlet-name>ServletTest02</servlet-name>
            <servlet-class>com.bjpowernode.javaweb.servlet.ConfigTestServlet2</servlet-class>
      
            <!--这里是可以配置一个Servlet对象的初始化信息的-->
            <init-param>
                <param-name>url</param-name>
                <param-value>jdbc:mysql://localhost:3306/bjpowernode</param-value>
            </init-param>
            <init-param>
                <param-name>driver</param-name>
                <param-value>com.mysql.jdbc.Driver</param-value>
            </init-param>
            <init-param>
                <param-name>user</param-name>
                <param-value>root</param-value>
            </init-param>
            <init-param>
                <param-name>password</param-name>
                <param-value>root</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>ServletTest02</servlet-name>
            <url-pattern>/test02</url-pattern>
        </servlet-mapping>
        以上<servlet></servlet>标签中<init-param></init-param>是初始化参数,这个初始化参数信息会自动被小猫咪自动封装到ServletConfig当中
        通过ServletConfig对象的两个方法,可以获取到web.xml文件中的配置信息。
        //获取所有初始化参数的name 返回一个集合
        java.util.Enumeration<java.lang.String> getInitParameterNames()
        //通过名字获取web.xml配置文件中的value属性
        java.lang.String getInitParmaneter(java.lang.String name)
    
  • 以上标签中是初始化参数,这个初始化参数信息会自动被小猫咪自动封装到ServletConfig当中,通过ServletConfig对象的两个方法,可以获取到web.xml文件中的配置信息。

  • ServletConfig两个方法:

    1. getInitParameterNames() :
      获取所有初始化参数的name 返回一个集合:
      全称: java.util.Enumeration<java.lang.String> getInitParameterNames()
    2. getInitParmaneter() :
      通过名字获取web.xml配置文件中的value属性
      全称:java.lang.String getInitParmaneter(java.lang.String name)</java.lang.String>

8、ServletConfig接口中有4个方法:

      第1个方法:
          public String getInitParameter(String name);//通过初始化参数的name获取value
      第2个方法:
          public Enumeration<String> getInitParameterNames();//获取所有的初始化参数的name
      第3个方法:
          public ServletContext getServletContext();//获取ServletContext对象
      第4个方法:
          public String getServletName();//获取Servlet的name
      以上的4个方法,在自己编写的Servlet类当中也可以使用this去调用。(因为GenericServlet实现了ServletConfig接口)

标签:Tomcat,对象,Servlet,GenericServlet,接口,方法,ServletConfig
From: https://www.cnblogs.com/atao-BigData/p/16804986.html

相关文章

  • 《上海悠悠接口自动化平台》体验地址与使用教程
    前言开放自己研发的接口自动化平台,给大家体验和交流(不提供源码),仅供学习交流。注册与登录平台注册地址http://47.108.155.10/register.html没有账号,先注册自己的账号,注......
  • 基于apiview接口实现 -------查、更新
    https://www.bilibili.com/video/BV1z5411D7BQ?p=11&vd_source=caabcbd2a759a67e2a3de8acbaaf08eaviews.pyclassBookView(APIView):defget(self,request):......
  • 接口测试之接口依赖
    接口测试经常涉及依赖,特别是token,如何解决:方案1、使用fixture,范围是session级别,将登陆步骤写入,返回token(pytset框架常用)方案2、在执行用例之前,先请求登录接口,并将......
  • jmeter接口测试
    1、打开jmeter软件,界面中会有一个测试计划  2、右击测试计划,依次选择Add-Threads(Users)-ThreadGroup添加线程组:  3、右击线程组,添加Http请求,依次点击Add-Sampl......
  • javaSE基础-接口
    接口(Interface)使用implements关键字使一个类遵循某个特定接口(或一组接口),它表示:接口只是外形。接口决定方法名、参数列表和返回类型,但是无法确定方法体。接口只提......
  • 接口测试工具Apifox 基础篇:数据传递与处理
    一、接口之间如何传递数据1、使用场景接口B请求参数依赖于接口A返回的数据2、实现思路2.1接口A使用后置操作->提取变量功能将请求完成后返回的数据提取作为变量2.2接口B对......
  • 利用jmeter Ant Jenkins搭建 接口 性能测试 持续集成平台
    0.环境准备安装如下工具:1、Jmeter:编写测试脚本,相关的安装、配置、编写可以参考:​​​快速掌握jmeter的基本操作和使⽤​​2、ant:执行测试脚本,并生成测试报告,相关的安装......
  • smart-doc生成接口文档
      maven引入插件<plugin><groupId>com.github.shalousun</groupId><artifactId>smart-doc-maven-plugin</artifactId>......
  • 中通快递 | 轨迹查询接口
    如何利用快递鸟提供的接口来查询中通快递的物流轨迹。​我们来看一下,接口完成以后的实际效果以下是调用快递鸟接口获得的中通物流轨迹信息,显示的界面效果需要自己开发:现在我......
  • .NetCore WebApi接口 DELETE 请求错误405.0 - Method Not Allowed 跨域问题
    问题描述:.NetCore接口在发布到IIS上后,使用Delete请求时报错:405.0-MethodNotAllowed  解决方式:1:在启用或关闭Windows功能–>InternetInformationServices关......