day5 ServletConfig接口详解
创始人
2024-05-29 10:41:39
0

文章目录

    • ServletConfig详解
    • ServletTestServlet
    • ServletTestServlet2

ServletConfig详解

  • 什么是ServletConfig?

    • Servlet对象的配置信息对象。
    • ServletConfig对象中封装了标签中的配置信息。(web.xml文件中servlet的配置信息)
  • 一个Servlet对应一个ServletConfig对象。

  • Servlet对象是Tomcat服务器创建,并且ServletConfig对象也是Tomcat服务器创建。并且默认情况下,他们都是在用户发送第一次请求的时候创建。

  • Tomcat服务器调用Servlet对象的init方法的时候需要传一个ServletConfig对象的参数给init方法。

  • ServletConfig接口的实现类是Tomcat服务器给实现的。(Tomcat服务器说的就是WEB服务器。)

  • ServletConfig接口有哪些常用的方法?

    • public String getInitParameter(String name); // 通过初始化参数的name获取value
      public Enumeration getInitParameterNames(); // 获取所有的初始化参数的name
      public ServletContext getServletContext(); // 获取ServletContext对象
      public String getServletName(); // 获取Servlet的name
      
    • 以上方法在Servlet类当中,都可以使用this去调用。因为GenericServlet实现了ServletConfig接口。

ServletTestServlet

package com.bjpowernode.javaweb.servlet;import jakarta.servlet.*;import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;/*** ServletConfig*   1. ServletConfig是什么?*      jakarta.servlet.ServletConfig*      显然ServletConfig是Servlet规范中的一员。*      ServletConfig是一个接口。(jakarta.servlet.Servlet是一个接口。)*   2. 谁去实现了这个接口呢? WEB服务器实现了*      public class org.apache.catalina.core.StandardWrapperFacade implements ServletConfig {}*      结论:Tomcat服务器实现了ServletConfig接口。*      思考:如果把Tomcat服务器换成jetty服务器,输出ServletConfig对象的时候,还是这个结果吗?*          不一定一样,包名类名可能和Tomcat不一样。但是他们都实现了ServletConfig这个规范。*   3. 一个Servlet对象中有一个ServletConfig对象。(Servlet和ServletConfig对象是一对一。)*      100个Servlet,就应该有100个ServletConfig对象。*   4. ServletConfig对象是谁创建的?在什么时候创建的?*      Tomcat服务器(WEB服务器)创建了ServletConfig对象。*      在创建Servlet对象的时候,同时创建ServletConfig对象。*   5. ServletConfig接口到底是干啥的?有什么用呢?*      Config是哪个单词的缩写?*          Configuration*      ServletConfig对象被翻译为:Servlet对象的配置信息对象。*      一个Servlet对象就有一个配置信息对象。*      两个Servlet对象就有两个配置信息对象。**   6. ServletConfig对象中到底包装了什么信息呢?*      *         configTest*         com.bjpowernode.javaweb.servlet.ConfigTestServlet*     *     ServletConfig对象中包装的信息是:*          web.xml文件中标签的配置信息。**     Tomcat小猫咪解析web.xml文件,将web.xml文件中标签中的配置信息自动包装到ServletConfig对象中。**   7. ServletConfig接口中有哪些方法?*      *         configTest*         com.bjpowernode.javaweb.servlet.ConfigTestServlet*         *         *             driver*             com.mysql.cj.jdbc.Driver*         *         *             url*             jdbc:mysql://localhost:3306/bjpowernode*         *         *             user*             root*         *         *             password*             root1234*         *     *     以上标签中的是初始化参数。这个初始化参数信息会自动被小猫咪封装到ServletConfig对象当中。*  8. ServletConfig接口中有4个方法:*      第1个方法:*          public String getInitParameter(String name);*      第2个方法:*          public Enumeration getInitParameterNames();*      第3个方法:*          public ServletContext getServletContext();*      第4个方法:*          public String getServletName();**      以上的4个方法,在自己编写的Servlet类当中也可以使用this去调用。(这个Servlet继承了GenericServlet)*/
public class ConfigTestServlet extends GenericServlet {@Overridepublic void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();// 获取ServletConfig对象ServletConfig config = this.getServletConfig();// 输出该对象// org.apache.catalina.core.StandardWrapperFacade@aea0d43out.print("ServletConfig对象是:" + config.toString());out.print("
");// 获取String servletName = config.getServletName();out.print(""+servletName+"");out.print("
");// 通过ServletConfig对象的两个方法,可以获取到web.xml文件中的初始化参数配置信息。// java.util.Enumeration getInitParameterNames() 获取所有的初始化参数的nameEnumeration initParameterNames = config.getInitParameterNames();// 遍历集合while(initParameterNames.hasMoreElements()) { // 是否有更多元素String parameterName = initParameterNames.nextElement(); // 取元素String parameterVal = config.getInitParameter(parameterName); // 通过name获取valueout.print(parameterName + "=" + parameterVal);out.print("
");}// java.lang.String getInitParameter(java.lang.String name) 通过初始化参数的name获取value/*String driver = config.getInitParameter("driver");out.print(driver);*/// 实际上获取一个Servlet对象的初始化参数,可以不用获取ServletConfig对象。直接通过this也可以。Enumeration names = this.getInitParameterNames();while(names.hasMoreElements()){String name = names.nextElement();String value = this.getInitParameter(name);// 打印到后台System.out.println(name + "=" + value);}// 怎么获取ServletContext对象呢?// 第一种方式:通过ServletConfig对象获取ServletContext对象。ServletContext application = config.getServletContext();// 输出out.print("
" + application); //org.apache.catalina.core.ApplicationContextFacade@19187bbb// 第二种方式:通过this也可以获取ServletContext对象。ServletContext application2 = this.getServletContext();out.print("
" + application2); //org.apache.catalina.core.ApplicationContextFacade@19187bbb} }

ServletTestServlet2

package com.bjpowernode.javaweb.servlet;import jakarta.servlet.*;import java.io.IOException;
import java.io.PrintWriter;public class ConfigTestServlet2 extends GenericServlet {@Overridepublic void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();// 获取ServletConfig对象ServletConfig config = this.getServletConfig();// 输出// org.apache.catalina.core.StandardWrapperFacade@287af686out.print("ServletConfig对象:" + config);String value = config.getInitParameter("key");out.print("
" + value);} }

相关内容

热门资讯

青春脚步丈量边疆文化 以实际行...   原标题:青春脚步丈量边疆文化 以实际行动赋能乡村振兴——上海立达学院“疆盼”团队赴金平开展“三下...
热带风暴“香塔尔”逼近美国南卡... 来源:央视新闻客户端 当地时间7月5日,据美国国家飓风中心消息,热带风暴“香塔尔”于当天上午在南卡罗...
百种野生鸟类唐山“结婚生子” 转自:唐山广播电视台百种野生鸟类唐山“结婚生子”夏日的唐山,生机勃勃,处处洋溢着生命的活力。在这片北...
中央组织部决定,王殿常履新 转自:北京日报客户端三峡集团官网7月4日发布消息,近日三峡集团党组召开会议,通报了中共中央组织部关于...
平安好医生:“医保+商保”互联... 转自:新华财经新华财经上海7月5日电(记者 王淑娟)近日,首个全国性“医保+商保”清分结算中心成功上...
黄河调水调沙迎来最大出库含沙量 经济观察网讯 据央视新闻客户端消息,记者今天从水利部黄河水利委员会了解到,黄河调水调沙正有序推进,随...
山西承接“136号文”征求意见... (转自:风芒能源)近日,山西省发改委下发关于征求对《山西省深化新能源上网电价市场化改革促进新能源高质...
苏超首场0进球比赛诞生! 0:0握手言和!精彩对决不分伯仲!南京队0:0苏州队今晚2025江苏省城市足球联赛第六轮“战火”重燃...
伊朗与六国达成共识! 转自:扬子晚报据路透社7月4日报道,亚洲中西部七国领导人峰会4日达成共识,将推动贸易自由化、吸引更多...