可以获取Servlet程序的别名servlet-name的值;
获取初始化参数init-param的值;
获取ServletContext对象。
下面通过案例来展示基本使用:
修改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>com.example.servlet_test.HelloServlet</servlet-class> <!--配置初始化参数--> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/test</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
HelloServlet.java中的init方法:
@Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init方法被调用"); //1.获取Servlet程序的别名 servlet-name 的值 String servletName = servletConfig.getServletName(); System.out.println("servlet-name: " + servletName); //2.获取初始化参数init-param的值 String url = servletConfig.getInitParameter("url"); System.out.println("url的值: " + url); }
2.3 ServletContext类的使用
ServletContext是一个接口,表示Servlet上下文。
一个web工程只有一个ServletContext对象实例。
ServletContext对象是一个 域对象。
什么是域对象?
域对象是可以像Map一样存取数据的对象。域是指存取数据的操作范围。
Map与域对象横向比较
种类 | 存数据 | 取数据 | 删除数据 |
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
ServletContext的作用
- 获取 web.xml 中配置的上下文参数 context-param
- 获取当前的工程路径,格式:/工程路径
- 获取工程部署后在服务器硬盘上的绝对路径
- 像Map一样存取数据
演示案例新建一个ContextServlet类,配置文件如下:
<?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属于整个web工程--> <context-param> <param-name>username</param-name> <param-value>黄小黄</param-value> </context-param> <servlet> <servlet-name>ContextServlet</servlet-name> <servlet-class>com.example.servlet_test.ContextServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ContextServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
ContextServlet.java
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class ContextServlet extends HttpServlet { @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { super.service(req, res); //获取context上下文参数 ServletContext context = getServletConfig().getServletContext(); String username = context.getInitParameter("username"); System.out.println("context参数username= " + username); //获取当前的工程路径 System.out.println("当前工程路径= " + context.getContextPath()); //获取工程部署后在服务器上的绝对路径 /* * / 被服务器解析地址:http://ip:port/工程名/ */ System.out.println("工程部署路径= " + context.getRealPath("/")); } }