day15-Servlet04

Servlet0412.ServletConfig12.1ServletConfig基本介绍

  1. ServletConfig类是为Servlet程序配置信息的类
  2. Servlet对象和ServletConfig对象都是由Tomcat负责创建
  3. Servlet对象默认是第一次访问的时候创建,ServletConfig在Servlet对象创建的时候,就创建一个对应的ServletConfig对象
12.2ServletConfig作用
  1. 获取Servlet程序的servlet-name的值
  2. 获取初始化参数init-param
  3. 获取ServletContext对象(上下文对象)
12.3ServletConfig应用实例
例子
需求:编写DBServlet.java,完成如下功能
  1. 在web.xml配置连接mysql的用户名和密码
  2. 在DBServlet执行doGet()或者doPost()时,可以获取到web.xml配置的用户名和密码
  3. 思路分析:
    浏览器发送请求,Tomcat去创建DBServlet,DBServlet去web.xml文件中去获取配置的参数,获取的方法有两种:一是使用dom4j,二是使用ServletConfig类
    day15-Servlet04

    文章插图
web.xml配置Servlet:
<!--配置DBServlet--><servlet><servlet-name>DBServlet</servlet-name><servlet-class>servlet.DBServlet</servlet-class><!--为该Servlet配置初始参数--><init-param><!--参数名--><param-name>username</param-name><!--参数值--><param-value>jack</param-value></init-param><init-param><param-name>pwd</param-name><param-value>123456</param-value></init-param></servlet><servlet-mapping><servlet-name>DBServlet</servlet-name><url-pattern>/db</url-pattern></servlet-mapping>DBServlet:
package servlet;import javax.servlet.*;import javax.servlet.http.*;import java.io.IOException;public class DBServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//在DBServlet执行doGet()或者doPost()时,可以获取到web.xml配置的用户名和密码//DBServlet的父类GenericServlet有方法getServletConfig()/*** 1.getServletConfig()是父类GenericServlet的* 2.返回的ServletConfig对象是GenericServlet的private transient ServletConfig config* 3.当一个属性被transient修饰,表示该属性不会被串行化(有些重要信息不希望保存到文件中)*/ServletConfig servletConfig = getServletConfig();String username = servletConfig.getInitParameter("username");String pwd = servletConfig.getInitParameter("pwd");System.out.println("初始化参数username=" + username);System.out.println("初始化参数pwd=" + pwd);}}浏览器访问DBServlet时 , 后台输出:
day15-Servlet04

文章插图
问题一:在doPost方法中可以得到servletConfig,在doGet方法也可以得到servletConfig,那么这两个servletConfig是同一个servletConfig吗?
答:是同一个servletConfig 。
先来看一个例子
在上述的DBServlet中重写init方法,并且分别在init和doPost方法中输出ServletConfig对象
package servlet;import javax.servlet.*;import javax.servlet.http.*;import java.io.IOException;public class DBServlet extends HttpServlet {@Overridepublic void init(ServletConfig config) throws ServletException {System.out.println("init()=" + config);}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ServletConfig servletConfig = getServletConfig();System.out.println("doPost()=" + servletConfig);String username = servletConfig.getInitParameter("username");String pwd = servletConfig.getInitParameter("pwd");System.out.println("初始化参数username=" + username);System.out.println("初始化参数pwd=" + pwd);}}redeployTomcat,在浏览器重新访问DBServlet,会发现出现了500错误,这表明服务器内部运行出现错误
day15-Servlet04

文章插图
查看控制台输出,发现doPost方法竟然输出了null
day15-Servlet04

文章插图
在DBServlet中的init方法加上语句super.init(config);
day15-Servlet04

文章插图
redeployTomcat,重新访问浏览器 , 会发现访问DBServlet成功 , 后台输出变正常了
【day15-Servlet04】

推荐阅读