网站首页 > 技术文章 正文
前面我们介绍了HttpServletRequest请求对象中的常用方法,其中提到了一个getServletContext()方法,这个方法是用于获取Servlet上下文对象的,那什么是Servlet上下文对象呢???
假设现在有两个Servlet程序,其中FirstServlet程序中,有一个username数据,在SecondServlet程序中需要使用,那么我们要如何在SecondServlet程序中获取到第一个FirstServlet程序里面的username数据呢???
这个时候,ServletContext上下文对象就出现啦,它就是为了解决在不同Servlet程序之间进行数据访问而出现的,为什么叫Servlet上下文对象???我的理解是:后一个Servlet程序要使用到前一个Servlet程序中的数据,这就好比是一篇文章中,后一个段落中的内容是依赖前一个段落中的内容一样,所以叫做上下文。
1.1、ServletContext对象的本质
PS:ServletContext上下文对象,本质上就是一个全局共享的对象,所有的Servlet程序都可以访问ServletConext上下文,所以这就实现了在不同Servlet程序之间,进行数据通信的功能。
1.2、getContextPath()方法
getContextPath()方法作用:获取当前应用程序的项目根路径(应用上下文路径)。案例代码:
package com.gitcode.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @version 1.0.0
* @Date: 2024/2/10 16:19
* @Author ZhuYouBin
* @Description:
*/
public class ContextDemoServlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上下文对象
ServletContext servletContext = request.getServletContext();
// 获取根路径
String contextPath = servletContext.getContextPath();
System.out.println("项目根路径:" + contextPath);
}
}
1.3、setAttribute()方法
setAttribute()方法作用:向ServletContext上下文中保存key-value数据,保存的数据全局共享。既然有保存数据,当然也有获取数据的方法:getAttribute();数据不能一直存在,不用的数据可以删除,删除数据的方法:removeAttribute()。案例代码:
package com.gitcode.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @version 1.0.0
* @Date: 2024/2/10 16:19
* @Author ZhuYouBin
* @Description:
*/
public class ContextDemoServlet02 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上下文对象
ServletContext context = request.getServletContext();
// 保存数据
context.setAttribute("username", "Tom-2024");
// 获取数据,你可以在另外一个Servlet类中,调用getAttribute()方法获取数据
Object username = context.getAttribute("username");
System.out.println("获取到的数据:" + username);
// 删除数据
context.removeAttribute("username");
}
}
运行结果如下所示:
1.4、getInitParameterNames()方法
getInitParameterNames()方法作用:获取所有的全局初始化参数名称,即:<context-param>标签定义的参数。案例代码:
package com.gitcode.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
/**
* @version 1.0.0
* @Date: 2024/2/10 16:19
* @Author ZhuYouBin
* @Description:
*/
public class ContextDemoServlet03 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上下文对象
ServletContext context = request.getServletContext();
// 获取所有初始化参数名称
Enumeration<String> initParameterNames = context.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
System.out.println("初始化参数名称:" + initParameterNames.nextElement());
}
}
}
web.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee">
<display-name>工程名称</display-name>
<description>
工程描述
</description>
<context-param>
<param-name>username-global</param-name>
<param-value>Tom-2024-global</param-value>
</context-param>
<servlet>
<servlet-name>ContextDemoServlet03</servlet-name>
<servlet-class>com.gitcode.servlet.ContextDemoServlet03</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>Tom-2024</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ContextDemoServlet03</servlet-name>
<url-pattern>/contextDemoServlet03</url-pattern>
</servlet-mapping>
</web-app>
运行结果如下所示:
注意:ServletConfig对象中也有一个getInitParameterNames()方法,但是ServletConfig中的是获取某个Servlet中的初始化参数,即:<init-param>标签定义的参数名称;而ServletContext上下文对象中,提供的getInitParameterNames()方法是获取<context-param>标签定义的全局初始化参数名称。
1.5、getInitParameter()方法
getInitParameter()方法作用:获取指定参数名称的参数值,获取的是<context-param>标签定义的参数值。案例代码:
package com.gitcode.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
/**
* @version 1.0.0
* @Date: 2024/2/10 16:19
* @Author ZhuYouBin
* @Description:
*/
public class ContextDemoServlet04 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上下文对象
ServletContext context = request.getServletContext();
// 获取初始化参数
Enumeration<String> initParameterNames = context.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
String paramName = initParameterNames.nextElement();
System.out.println("参数名称:" + paramName + ",参数值:" + context.getInitParameter(paramName));
}
}
}
运行结果如下所示:
注意:ServletConfig对象中也有一个getInitParameterNames()方法,但是ServletConfig中的是获取某个Servlet中的初始化参数,即:<init-param>标签定义的参数名称;而ServletContext上下文对象中,提供的getInitParameterNames()方法是获取<context-param>标签定义的全局初始化参数名称。
今天就到这里,未完待续~~
猜你喜欢
- 2024-10-10 SpringBoot整合Grpc实现跨语言RPC通讯
- 2024-10-10 RequestMapping属性详解 - SpringMVC高手进阶
- 2024-10-10 《Servlet》第22节:获取ServletContext上下文对象的四种方式
- 2024-10-10 阿里Java二面:说说Spring MVC执行流程及原理?这样聊能吊打面试官
- 2024-10-10 Springboot——用更优雅的方式发HTTP请求(RestTemplate详解)
- 2024-10-10 JavaServlet生命周期、HttpServletRequest和HttpServletResponse
- 2024-10-10 关于RESTful一些注意事项和自己整理的接口开发规范
- 2024-10-10 java版gRPC实战之二:服务发布和调用
- 2024-10-10 Servlet 点击计数器 点击计数在线
- 2024-10-10 Java开发架构篇:初识领域驱动设计DDD落地
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)