Элемент <context-param> в файле web.xml задает параметр, которым инициализируются сервлеты. Внутри этого элемента с помощью элемента <param-name> задается имя параметра, а с помощью элемента <param-value> - значение параметра.
Например, определим следующий файл web.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">
<context-param>
<param-name>message</param-name>
<param-value>Hello Servlets</param-value>
</context-param>
</web-app>
В данном случае параметр называется "message" и имеет значение "Hello Servlets". Этот параметр доступен всем сервлетам в приложении.
Для получения параметра внутри сервлета необходимо обратиться к контексту сервлета. Для его получения внутри класса сервлета определен метод getServletContext(). Он возвращает объект ServletContext. Затем у этого объекта вызывается метод getInitParameter(), в который передается название параметра инициализации.
Например, получим выше определенный параметр в сервлете:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String message = getServletContext().getInitParameter("message");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
try {
writer.println("<h2>" + message + "</h2>");
} finally {
writer.close();
}
}
}
Стоит отметить, что этот параметр будет доступен для всех сервлетов в приложении. Соответственно если мы изменим в web.xml значение параметра, то оно изменится для всех сервлетов.
Кроме определения общих для всех сервлетов параметров, мы можем определить параметры непосредственно для конкретного сервлета. Для этого внутри элемента <servlet> определяется элемент <init-param>
Например, изменим web.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-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
<init-param>
<param-name>message</param-name>
<param-value>Hello Servlets</param-value>
</init-param>
</servlet>
</web-app>
Здесь также задан параметр message со значением "Hello Servlets". Чтобы получить этот параметр в классе сервлете, необходимо использовать метод getServletConfig(), который возвращает объект ServletConfig. У него затем вызывается метод getInitParameter(), в который передается имя параметра. Например:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String message = getServletConfig().getInitParameter("message");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
try {
writer.println("<h2>" + message + "</h2>");
} finally {
writer.close();
}
}
}