Servlet-ServletContext类
ServletContext
一、什么是ServletContext
1、ServletContext是一个接口,它表示Servlet上下文对象
2、一个web工程只有一个ServletContext对象实例
3、ServletContext对象是一个域对象
4、ServletContext实例在web工程部署启动时创建,在web工程停止时销毁
二、什么是域对象?
域对象,是可以像map一样存取数据的对象,叫做域对象。
这里的域指的是存取数据的操作范围,整个web工程
存数据 取数据 删除数据
Map put() get() remove()
域对象 setAttribute() getAttribute() removeAttribute()
三、ServletContext四个作用
1.获取xml中配置的上下文参数context-param
2.获取当前工程路径,格式:/工程路径
3.获取工程部署后在服务器硬盘上的绝对路径
4.像map一样存取数据
相关代码
package com.orzjiangxiaoyu.context.servlet; import jakarta.servlet.ServletConfig; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /** * ServletContext * 什么是ServletContext * 1、ServletContext是一个接口,它表示Servlet上下文对象 * 2、一个web工程只有一个ServletContext对象实例 * 3、ServletContext对象是一个域对象 * 4、ServletContext实例在web工程部署启动时创建,在web工程停止时销毁 * * 什么是域对象? * 域对象,是可以像map一样存取数据的对象,叫做域对象。 * 这里的域指的是存取数据的操作范围,整个web工程 * * 存数据 取数据 删除数据 * Map put() get() remove() * 域对象 setAttribute() getAttribute() removeAttribute() * * * ServletContext四个作用 * 1.获取xml中配置的上下文参数context-param:getInitParameter(String var1) * 2.获取当前工程路径,格式:/工程路径:getContextPath() * 3.获取工程部署后在服务器硬盘上的绝对路径:getRealPath("/"); * 4.像map一样存取数据 * * * @author orz * @create 2020-09-10 16:11 */ public class ContextServlet1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //一、获取ServletContext //方法一:常使用 ServletContext servletContext = getServletContext(); System.out.println("ServletContext:"+servletContext); //方法二: ServletConfig servletConfig = getServletConfig(); ServletContext servletContext1 = servletConfig.getServletContext(); System.out.println("ServletContext:"+servletContext); //二、四个作用 // 1.获取xml中配置的上下文参数context-param //String getInitParameter(String var1); // <!-- context-param是上下文参数 --> // <context-param> // <param-name>username</param-name> // <param-value>orzjiangxiaoyu</param-value> // </context-param> // <context-param> // <param-name>password</param-name> // <param-value>root</param-value> // </context-param> System.out.println("username:"+servletContext.getInitParameter("username")); System.out.println("password:"+servletContext.getInitParameter("password")); // 2.获取当前工程路径,格式:/工程路径 //String getContextPath() System.out.println("当前工程路径:"+servletContext.getContextPath()); // 3.获取工程部署后在服务器硬盘上的绝对路径 //String getRealPath(String var1); // 斜杠/ 表示被服务器解析地址为http://ip:port/工程名称/ // 映射到idea代码的web目录 System.out.println("绝对路径:"+servletContext.getRealPath("/")); // 4.像map一样存取数据 } }
package com.orzjiangxiaoyu.context.servlet; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /**ServletContext四个作用之一像map一样存取数据 * * 什么是域对象? * 域对象,是可以像map一样存取数据的对象,叫做域对象。 * 这里的域指的是存取数据的操作范围,整个web工程 * * 存数据 取数据 删除数据 * Map put() get() remove() * 域对象 setAttribute() getAttribute() removeAttribute() * * @author orz * @create 2020-09-10 16:32 */ public class Context1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = getServletContext(); System.out.println("Context1未保存之前 key=key1,value="+servletContext.getAttribute("key1")); System.out.println("Context1保存"); servletContext.setAttribute("key1","value1"); System.out.println("Context1保存之后 key=key1,value="+servletContext.getAttribute("key1")); servletContext.setAttribute("key2","value2"); System.out.println("Context1未删除前 key=key2,value="+servletContext.getAttribute("key2")); servletContext.removeAttribute("key2"); System.out.println("Context2删除后 key=key2,value="+servletContext.getAttribute("key2")); // // } }
package com.orzjiangxiaoyu.context.servlet; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /** * 这里的域指的是存取数据的操作范围,整个web工程 * @author orz * @create 2020-09-10 16:33 */ public class Context2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = getServletContext(); System.out.println("Context2 key=key1 value="+servletContext.getAttribute("key1")); } }
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是上下文参数 --> <context-param> <param-name>username</param-name> <param-value>orzjiangxiaoyu</param-value> </context-param> <context-param> <param-name>password</param-name> <param-value>root</param-value> </context-param> <servlet> <servlet-name>ContextServlet</servlet-name> <servlet-class>com.orzjiangxiaoyu.context.servlet.ContextServlet1</servlet-class> </servlet> <servlet-mapping> <servlet-name>ContextServlet</servlet-name> <url-pattern>/contextServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>Context1</servlet-name> <servlet-class>com.orzjiangxiaoyu.context.servlet.Context1</servlet-class> </servlet> <servlet-mapping> <servlet-name>Context1</servlet-name> <url-pattern>/context1</url-pattern> </servlet-mapping> <servlet> <servlet-name>Context2</servlet-name> <servlet-class>com.orzjiangxiaoyu.context.servlet.Context2</servlet-class> </servlet> <servlet-mapping> <servlet-name>Context2</servlet-name> <url-pattern>/context2</url-pattern> </servlet-mapping> </web-app>