9.15JavaWeb之ServletConfig接口

9.15JavaWeb之ServletConfig接口

什么是ServletConfig对象

概念:

  • 容器初始化Servlet时为Servlet创建一个ServletConfig对象,将 ServletConfig 对象作为参数传递给 Servlet 。

作用:

  • 通过 ServletConfig 对象即可获得当前 Servlet 的初始化参数信息。

特点:

  • 一个Web容器可以存在多个ServletConfig对象

  • 一个Servlet只能对应一个ServletConfig对象

获取ServletConfig对象

  • 直接从带参的init()方法中提取

  • 调用GenericServlet提供的getServletConfig()方法获取


从带参的init()方法中获取

示例代码:

package ServletPractice;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
* 继承httpServlet抽象类,获取init方法里面的参数
* @since JDk 1.8
* @date 2021/09/15
* @author Lucifer
*/
public class MyServletDemoNo8 extends HttpServlet {
   //Get方法
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
       //设置响应字符集
       response.setContentType("text/html;charset=UTF-8");
       //打印结果
       PrintWriter writer = response.getWriter();
       writer.write("HelloNo8");
       writer.close();
  }

   //Post方法
   public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
       doGet(request, response);
  }

   //初始化方法
   public void init(ServletConfig config) throws ServletException {
       //从带参的init方法中提取ServletConfig对象
       this.getServletConfig(); //因为HttpServlet继承了抽象类GenericServlet,get方法再GenericServlet当中,所以可以调用
  }
}
调用GenericServlet提供的getServletConfig方法
ServletConfig servletConfig = this.getServletConfig();

ServletConfig接口

javax.servlet 包提供了一个 ServletConfig 接口,该接口中提供了以下方法:

返回值类型 方法 功能描述
String getInitParameter(String name) 根据初始化参数名 name,返回对应的初始化参数值。
Enumeration<String> getInitParameterNames() 返回 Servlet 所有的初始化参数名的枚举集合,如果该 Servlet 没有初始化参数,则返回一个空的集合。
ServletContext getServletContext() 返回一个代表当前 Web 应用的 ServletContext 对象。
String getServletName() 返回 Servlet 的名字,即 web.xml 中 <servlet-name> 元素的值。

配置Servlet初始化参数

  • 使用web.xml配置初始化参数

  • 使用@WebServlet配置初始化参数


使用web.xml配置初始化参数

实现方法:

  • 新增了一个子元素:

    • <init-param>

      • <param-name>

      • <param-value>

示例xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.jcp.org/xml/ns/javaee"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
   id="WebApp_ID" metadata-complete="false" version="4.0">
   <servlet>
       <servlet-name>MyServlet</servlet-name>
       <servlet-class>net.biancheng.www.MyServlet</servlet-class>
       <!-- Servlet 初始化参数 -->
       <init-param>
           <param-name>name</param-name>
           <param-value>JunkingBoy</param-value>
       </init-param>
       <!-- Servlet 初始化参数 -->
       <init-param>
           <param-name>URL</param-name>
           <param-value>www.JunkingBoy.com</param-value>
       </init-param>
   </servlet>
</web-app>
使用@WebServlet配置初始化参数

特点:

  • initParams是一个属性,相当于一个列表

  • @WebInitParam相当于一个键值对--->key、value的形式

示例代码:

package ServletPractice;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
* 使用@WebServlet注释+参数实现配置初始化参数的目的
* @since JDK 1.8
* @date 2021/09/15
* @author Lucifer
*/
@WebServlet(urlPatterns = "/MyServlet", initParams = {
       @WebInitParam(name = "Name", value = "JunkingBoy"),
       @WebInitParam(name = "URL", value = "www.JunkingBoy.com")
})
public class MyServletDemoNo9 extends HttpServlet {
   //设置一个常量--->标记该容器的UID
   private static final long serialVersionUID = 1L;

   //Get方法
   @Override
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //设置响应字符集
       response.setContentType("text/html;charset=UTF-8");
       //打印内容到控制台
       PrintWriter writer = response.getWriter();
       writer.write("HelloNo9");
       writer.close();
  }

   //Post方法
   @Override
   public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
       doGet(request, response);
  }
}

获取Servlet初始化参数示例

结合前面提到的知识内容全部一次性过一遍:

package ServletPractice;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

/**
* 结合前面的Servlet获取Config对象和获取对象信息的知识
* @since JDK 1.8
* @date 2021/09/15
* @author Lucifer
*/
@WebServlet(urlPatterns = "/MyServletNo10", initParams = {
       @WebInitParam(name = "Name", value = "Jun"),
       @WebInitParam(name = "URL", value = "www.JunkingBoy.com")
})
public class MyServletDemoNo10 extends HttpServlet {
   //Get方法
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //设置响应字符集
       response.setContentType("text/html;charset=UTF-8");
       //打印内容
       PrintWriter writer = response.getWriter();
       writer.write("HelloNo10");

       //开始获取ServletConfig对象
       ServletConfig config = getServletConfig();
       //获取ServletName
       String name = getServletName();
       //返回 servlet 的初始化参数的名称的集合--->使用HttpServlet提供的方法
       Enumeration<String> initParameterName = config.getInitParameterNames();
       //遍历集合获取初始化参数名称--->调用Enumeration接口下提供的方法
       while (initParameterName.hasMoreElements()){
           //获取初始化参数名称
           String initParamName = initParameterName.nextElement();
           //获取相应的初始参数的值
           String initParamValue = config.getInitParameter(initParamName);
           //向页面输出
           writer.write(initParamName + " : " + initParamValue + "<br/>");
      }
       //关闭流
       writer.close();
  }
   /*
   1、掌握这些类当中的方法
   2、正确使用这些接口提供的方法来获取到相应的值
   获取到的是注释当中配置的信息
   通过注释的方法使用Servlet类去打印出注释的内容
    */
}

 

上一篇:【第十四期】高德go面经


下一篇:速战速决 go - go 面向对象: 函数(函数也是一种类型,匿名函数,闭包)