前言:
Servlet 容器初始化 Servlet 時,會為這個 Servlet 創建一個 ServletConfig 物件,并將 ServletConfig 物件作為引數傳遞給 Servlet ,通過 ServletConfig 物件即可獲得當前 Servlet 的初始化引數資訊,
一個 Web 應用中可以存在多個 ServletConfig 物件,一個 Servlet 只能對應一個 ServletConfig 物件,即 Servlet 的初始化引數僅對當前 Servlet 有效,
| 回傳值型別 | 方法 | 功能描述 |
| 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 配置初始化引數,
(1)、配置 web.xml 檔案
使用標簽初始化的引數是被應用程式中所有的servlet所共享,但是有時候我們需要為某一個特定的servlet配置引數,這個時候我們就需要使用servlet初始化引數,
在web.xml檔案中為當前web應用添加三個名為 admin-email、admin-name和admin-password 的ServletConText 初始化引數,在Select中獲取這三個引數,
xml部分:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置 Servlet類 路徑 -->
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>main.java.com.Servlet</servlet-class>
</servlet>
<!-- 配置整個web應用的初始化引數 -->
<context-param>
<param-name>admin-email</param-name>
<param-value>[email protected]</param-value>
</context-param>
<context-param>
<param-name>admin-name</param-name>
<param-value>xiaoxi</param-value>
</context-param>
<context-param>
<param-name>admin-password</param-name>
<param-value>123456</param-value>
</context-param>
<!-- 配置 Servlet 映射 -->
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/Servlet</url-pattern>
</servlet-mapping>
</web-app>
Servlet部分:
使用 ServletConfig 介面的 getServletConfig() 的方法 獲取Config , 再通過getServletContext() 獲取 ServletContext物件 最后通過getInitParameter(String name)方法,根據 配置的param-name名稱回傳 param-value
package main.java.com;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "Servlet", value = "https://www.cnblogs.com/Servlet")
public class Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletConfig config = this.getServletConfig();
ServletContext servletContext = config.getServletContext();
String adminEmail = servletContext.getInitParameter("admin-email");//利用名字獲取值
String adminName = servletContext.getInitParameter("admin-name");//利用名字獲取值
String password = servletContext.getInitParameter("admin-password");//利用名字獲取值
response.getWriter().println("admin-email: " + adminEmail);
response.getWriter().println("admin-name: " + adminName);
response.getWriter().println("admin-password: " + password);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response); // 使用doGet
}
}
最后的輸結果是:

當然了 xml 中可以 配置web 全域的 Servlet 初始化引數,也可以 使用<init-param> 配置 當前 Servlet的初始化引數
以下配置說明:
- <init-param> 元素是 <servlet> 的子元素, 需要在 <servlet> 元素內使用,表示只對當前 Servlet 有效 ,
- <param-name> 子元素表示引數的名稱,
- <param-value> 子元素表示引數的值,
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>java.com.MyServlet</servlet-class>
<!-- Servlet 初始化引數 -->
<init-param>
<param-name>name</param-name>
<param-value>xiaoxi</param-value>
</init-param>
<!-- Servlet 初始化引數 -->
<init-param>
<param-name>admin</param-name>
<param-value>xiaoxi</param-value>
</init-param>
</servlet>
(2)、在 @WebServlet注釋中 添加 @WebInitParam 注釋 配置初始化引數
package main.java.com;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
@WebServlet(
name = "helloServlet",
value = "https://www.cnblogs.com/helloServlet", //這里加上逗號
initParams = { //添加一個 initParams 屬性
@WebInitParam( // 再使用 @WebInitParam 注解 攜帶 name和value 的屬性和屬性值 多個引數可以用逗號隔開 再次使用@WebInitParam注解
name = "name",
value = "https://www.cnblogs.com/xiaoxiblog/p/測驗"),
@WebInitParam(
name = "Admin",
value = "https://www.cnblogs.com/xiaoxiblog/p/123456")
})
public class helloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8"); // 設定編碼集為 utf-8
PrintWriter writer = response.getWriter(); // 創建一個Writer流
ServletConfig config = getServletConfig(); // 獲取ServletConfig物件
String servletName = config.getServletName();// 獲取servletName
Enumeration<String> initParameterNames = config.getInitParameterNames();// 回傳 servlet 的初始化引數的名稱的集合
while (initParameterNames.hasMoreElements()) { // 遍歷集合獲取初始化引數名稱
String initParamName = initParameterNames.nextElement(); // 獲取初始化引數名稱
String initParamValue = https://www.cnblogs.com/xiaoxiblog/p/config.getInitParameter(initParamName); // 獲取相應的初始引數的值
writer.write(initParamName +" : " + initParamValue + "<br/>"); // 向頁面輸出
}
// 關閉流
writer.close();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
在瀏覽器中輸入 地址 最后結果是:

總結:
- 使用xml 既可以全域配置 Servlet 的初始化引數 可以針對當前的Servlet 生效
- 使用注解方式 只對當前的Servlet生效
本文來自博客園,作者:蕭熙,轉載請注明原文鏈接:https://www.cnblogs.com/xiaoxiblog/p/17195823.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546169.html
標籤:Java
上一篇:Tread多執行緒
下一篇:day03-功能實作02
