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类去打印出注释的内容
*/
}