Элемент <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(); } } }