概念:
容器初始化Servlet时为Servlet创建一个ServletConfig对象,将 ServletConfig 对象作为参数传递给 Servlet 。
作用:
通过 ServletConfig 对象即可获得当前 Servlet 的初始化参数信息。
特点:
一个Web容器可以存在多个ServletConfig对象
一个Servlet只能对应一个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当中,所以可以调用 } }
ServletConfig servletConfig = this.getServletConfig();
javax.servlet 包提供了一个 ServletConfig 接口,该接口中提供了以下方法:
返回值类型 | 方法 | 功能描述 |
---|---|---|
String | getInitParameter(String name) | 根据初始化参数名 name,返回对应的初始化参数值。 |
Enumeration<String> |
getInitParameterNames() | 返回 Servlet 所有的初始化参数名的枚举集合,如果该 Servlet 没有初始化参数,则返回一个空的集合。 |
ServletContext | getServletContext() | 返回一个代表当前 Web 应用的 ServletContext 对象。 |
String | getServletName() | 返回 Servlet 的名字,即 web.xml 中 <servlet-name> 元素的值。 |
使用web.xml配置初始化参数
使用@WebServlet配置初始化参数
实现方法:
新增了一个子元素:
<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>
特点:
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); } }
结合前面提到的知识内容全部一次性过一遍:
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类去打印出注释的内容 */ }