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);} }

相关内容

热门资讯

以“江南”为最大公约数,在沪苏... 转自:上观新闻这个夏天,长三角生态绿色一体化发展示范区被萤火虫点亮。6月21日,来自上海、江苏、浙江...
光伏概念持续走高 亿晶光电、欧... 7月2日早盘,光伏概念持续走高,截至10时55分,亿晶光电、欧晶科技拉升涨停,东方日升、通威股份等跟...
以青春之声铭记抗战历史 厦门东海职业技术学院学生诵读《不朽》。记者 邵育洋 摄晨报记者 叶子申青春之声,传递不朽精神;少年意...
ACC下调美国化工业增长预期   近期,美国化学理事会(ACC)在分析美国化学工业前景时表示,贸易政策摇摆不定和终端需求不明确对美...
关于病梅馆记的问题 关于病梅馆记的问题使梅“病”的方法是什么?说说文中的隐喻意。文人用心中的畸形的癖好告诉卖梅花的人使卖...
宝宝抱着就能睡着,放在床上就会... 宝宝抱着就能睡着,放在床上就会醒,是为什么我的宝宝两个月了,每次睡觉的时候抱着就睡的很香可是一放在床...
疫苗ETF富国(159645)... 7月2日,截止午间收盘,疫苗ETF富国(159645)跌0.61%,报0.655元,成交额39.90...
莫言和莫愁哪个好听(女生),还... 莫言和莫愁哪个好听(女生),还有什么姓莫而且是两个字的名字吗?莫翎、莫璃、莫柔、莫馨、莫羽、莫晴、莫...
科创芯片ETF(588200)... 7月2日,截止午间收盘,科创芯片ETF(588200)跌1.63%,报1.513元,成交额7.72亿...
光伏ETF龙头(560980)... 7月2日,截止午间收盘,光伏ETF龙头(560980)涨0.00%,报0.455元,成交额1036....