ServletConfig和ServletContext接口
ServletConfig
在web.xml文件中使用一个或多个init-param
元素进行配置后,Tomcat初始化Servlet时,都会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig config)
方法将ServletConfig对象传递给Servlet。
ServletConfig接口提供了如下四个方法:
方法 | 功能描述 |
---|---|
String getInitParameter(String name) | 根据初始化参数名返回对应的初始化参数值 |
Enumeration getInitParameterNames() | 包含了所有的初始化参数名 |
ServletContext getServletContext() | 获取ServletContext对象 |
String getServletName() | 返回web.xml中的servlet-name元素的值 |
在Servlet中实现public void init(ServletConfig config)
方法:
@Override
public void init(ServletConfig config) throws ServletException {
String servletName = config.getServletName();
System.out.println("调用init方法,将ServletConfig传递给Servlet " + servletName);
super.init(config);
}
客户端访问该Servlet之后,会调用init方法将ServletConfig对象传递给该Servlet:
现在,尝试在web.xml中使用init-param元素配置一个编码的初始化参数:
<servlet>
<servlet-name>first-servlet</servlet-name>
<servlet-class>week03.FirstServlet</servlet-class>
<init-param>
<!--初始化参数名-->
<param-name>encoding</param-name>
<!--初始化参数值-->
<param-value>UTF-8</param-value>
</init-param>
</servlet>
然后,在Servlet中实现doGet方法,通过getServletConfig()方法返回一个ServletConfig对象来获取初始化参数"encoding":
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
PrintWriter writer = res.getWriter();
// 1. 获取ServletConfig对象
ServletConfig servletConfig = this.getServletConfig();
// 2. 获取参数名为encoding的参数值
String encoding = servletConfig.getInitParameter("encoding");
writer.write(encoding);
}
输入虚拟映射路径对应的Servlet类,显示是否成功地获取到了初始化参数encoding的值:UTF-8
由于HttpServlet继承了GenericServlet抽象类,且实现了ServletConfig接口,所以只要是继承了HttpServlet的类,都可以通过this.*
调用上层的代码。ServletConfig servletConfig = this.getServletConfig();
代码片段即直接使用了ServletConfig上层类的函数。
ServletContext
当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用,该对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间数据的共享。
方法 | 功能描述 |
---|---|
String getInitParameter(String name) | 获取context初始化参数的值 |
Enumeration getInitParameterNames() | 以String对象的Enumeration形式返回context的初始化参数名 |
在web.xml文件中使用context-param
元素配置Web应用程序的初始化参数:
<context-param>
<param-name>country</param-name>
<param-value>中国</param-value>
</context-param>
<context-param>
<param-name>flag</param-name>
<param-value>五星红旗</param-value>
</context-param>
<context-param>
<param-name>nationalAnthem</param-name>
<param-value>义勇军进行曲</param-value>
</context-param>
通过ServletContext获取所有的context初始化参数,并显示在前端:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/html;charset=utf-8");
PrintWriter writer = res.getWriter();
// 获取ServletContext对象
ServletContext servletContext = this.getServletContext();
// 获取所有的context初始化参数
Enumeration<String> paramNames = servletContext.getInitParameterNames();
// 遍历context初始化参数,并打印给前端显示
while (paramNames.hasMoreElements()) {
String name = paramNames.nextElement();
String param = servletContext.getInitParameter(name);
writer.write(name + ": " + param + "<br />");
}
}
可以看到浏览器显示了所有的context初始化参数名以及值:
注意:多个Servlet对象可以共享一个ServletContext对象。
ServletContext接口中还定义了一些读取Web资源的方法,以下是一些相关的常用方法:
方法 | 功能描述 |
---|---|
Set getResourcePaths(String path) | 返回包含资源目录中子目录和文件的路径名称 |
String getRealPath(String path) | 返回资源文件在服务器文件系统上的真实路径 |
URL getResource(String path) | 返回映射到某个资源文件的URL对象 |
InputStream getResourceAsStream(String path) | 返回映射到某个资源文件的InputStream输入流对象 |
新建一个test.properties
文件
在里面添加如下内容:
country = China
flag = The Five-Starred Red Flag
注意:编译后的properties文件将会是这样的结果:
所以在填写路径时,要注意路径应该这样填/WEB-INF/classes/test.properties
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/html;charset=utf-8");
res.setCharacterEncoding("utf-8");
res.setHeader("Content-Type", "text/html;charset=utf-8");
PrintWriter writer = res.getWriter();
ServletContext context = this.getServletContext();
InputStream inputStream = context.getResourceAsStream("/WEB-INF/classes/test.properties");
Properties properties = new Properties();
properties.load(inputStream);
writer.write("country = " + properties.getProperty("country") + "<br />");
writer.write("flag = " + properties.getProperty("flag"));
}
打开浏览器,最终呈现的结果如下:
上一个知识点:Servlet基础
下一个知识点:什么是请求转发和请求重定向?
ServletConfig和ServletContext接口的更多相关文章
- java学习笔记—ServletConfig、ServletContext接口(13)
ServletConfig是一个由Tomcat服务器在初始化Servlet的时候创建并传递进来的一个对象. 该对象主要描述的时候一个servlet的配置信息. 如: <servlet> ...
- Servlet学习笔记(二)之Servlet路径映射配置、Servlet接口、ServletConfig、ServletContext
Servlet路径映射配置 要使Servlet对象正常的运行,需要进行适当的配置,以告诉Web容器哪个请求调用哪个Servlet对象处理,对Servlet起到一个注册的作用.Servlet的配置信息包 ...
- JavaEE:Servlet简介及ServletConfig、ServletContext
Servlet简介 1.Servlet是sun公司提供的一门用于开发动态web资源的技术*静态web资源:固定数据文件*动态web资源:通过程序动态生成数据文件2.Servlet技术基于Request ...
- day05 Servlet 开发和 ServletConfig 与 ServletContext 对象
day05 Servlet 开发和 ServletConfig 与 ServletContext 对象 1. Servlet 开发入门 - hello world 2. Servlet 的调用过程和生 ...
- Servlet笔记4--ServletConfig接口和ServletContext接口
ServletConfig接口: ServletContext接口: 代码详解: (1)web.xml配置文件: <?xml version="1.0" encoding=& ...
- JavaWeb学习笔记:ServletConfig()和ServletContext()
ServletConfig()和ServletContext() 1.ServletConfig() ServletConfig是一个接口,它由server提供商来实现. ServletConfig封 ...
- 谈谈 ServletConfig 和 ServletContext
目录 一.ServletConfig 和 ServletContext 的概念 二.ServletConfig 和 SerlvetContext 代码表示 一.ServletConfig 和 Serv ...
- Servlet技术之——概述、实现、细节、获取资源、ServletConfig、ServletContext
Servlet概述.实现.细节.获取资源.ServletConfig.ServletContext (一) Setvlet基本概述 (1) 什么是Servlet ? Servlet(Server Ap ...
- Java EE javax.servlet中的ServletContext接口
ServletContext接口 public interface ServletContext (https://docs.oracle.com/javaee/7/api/javax/servlet ...
随机推荐
- ElasticSearcher的安装以及安装过程中出现的问题
先给出参考链接,带安装成功后再进行总结整个过程. 参考链接:https://blog.csdn.net/fjyab/article/details/81101284 java操作ElasticSear ...
- Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统
prometheus安装和配置 prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据. 2.Client Library: 客户端库,检测应用程序代码,当 ...
- Elasticsearch--Logstash定时同步MySQL数据到Elasticsearch
新地址体验:http://www.zhouhong.icu/post/139 一.Logstash介绍 Logstash是elastic技术栈中的一个技术.它是一个数据采集引擎,可以从数据库采集数据到 ...
- 你们一般都是怎么进行SQL调优的?MySQL在执行时是如何选择索引的?
前言 过年回来的第二周了,终于有时间继续总结知识了.这次来看一下SQL调优的知识,这类问题基本上面试的时候都会被问到,无论你的岗位是后端,运维,测试等等. 像本文标题中的两个问题,就是我在实际面试过程 ...
- 权益满满 | PGConf.Asia2020大会诚邀赞助商!携手走向更大世界!
转: 权益满满 | PGConf.Asia2020大会诚邀赞助商!携手走向更大世界! 关于PostgresConf.CN&PGConf.Asia2020大会作为全球最大.最知名的PG序列会议, ...
- 【图像处理】使用OpenCV+Python进行图像处理入门教程(二)
这篇随笔介绍使用OpenCV进行图像处理的第二章 图像的运算,让我们踏上继续回顾OpenCV进行图像处理的奇妙之旅,不断地总结.回顾,以新的视角快速融入计算机视觉的奥秘世界. 2 图像的运算 复杂的 ...
- HDOJ-1257(贪心/动态规划)
最少拦截系统 HDOJ-1257 我做这题的思路就是采用暴力或者贪心.也就是每次循环选出从第一个未被选择的元素开始,依次把后面可以选择的元素作为一个系统.最后统计可以有多少个系统. 还有人的思路就是利 ...
- js导出execl 兼容ie Chrome Firefox各种主流浏览器(js export execl)
第一种导出table布局的表格 1 <html> 2 3 <head> 4 <meta charset="utf-8"> 5 <scrip ...
- 无需编程,通过配置零代码生成CRUD RESTful API
Hello,crudapi!(你好,增删改查接口!) 本文通过学生对象为例,无需编程,通过配置实现CRUD RESTful API. 概要 CRUD简介 crud是指在做计算处理时的增加(Create ...
- httpPost的两种方式
1,post-Body流和post参数,以下客户端代码和服务端代码可共用 客户端代码 /** * post 方法 * 抛送给EDI * @param url http://127.0.0.1:9003 ...