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接口的更多相关文章

  1. java学习笔记—ServletConfig、ServletContext接口(13)

    ServletConfig是一个由Tomcat服务器在初始化Servlet的时候创建并传递进来的一个对象. 该对象主要描述的时候一个servlet的配置信息. 如: <servlet>  ...

  2. Servlet学习笔记(二)之Servlet路径映射配置、Servlet接口、ServletConfig、ServletContext

    Servlet路径映射配置 要使Servlet对象正常的运行,需要进行适当的配置,以告诉Web容器哪个请求调用哪个Servlet对象处理,对Servlet起到一个注册的作用.Servlet的配置信息包 ...

  3. JavaEE:Servlet简介及ServletConfig、ServletContext

    Servlet简介 1.Servlet是sun公司提供的一门用于开发动态web资源的技术*静态web资源:固定数据文件*动态web资源:通过程序动态生成数据文件2.Servlet技术基于Request ...

  4. day05 Servlet 开发和 ServletConfig 与 ServletContext 对象

    day05 Servlet 开发和 ServletConfig 与 ServletContext 对象 1. Servlet 开发入门 - hello world 2. Servlet 的调用过程和生 ...

  5. Servlet笔记4--ServletConfig接口和ServletContext接口

    ServletConfig接口: ServletContext接口: 代码详解: (1)web.xml配置文件: <?xml version="1.0" encoding=& ...

  6. JavaWeb学习笔记:ServletConfig()和ServletContext()

    ServletConfig()和ServletContext() 1.ServletConfig() ServletConfig是一个接口,它由server提供商来实现. ServletConfig封 ...

  7. 谈谈 ServletConfig 和 ServletContext

    目录 一.ServletConfig 和 ServletContext 的概念 二.ServletConfig 和 SerlvetContext 代码表示 一.ServletConfig 和 Serv ...

  8. Servlet技术之——概述、实现、细节、获取资源、ServletConfig、ServletContext

    Servlet概述.实现.细节.获取资源.ServletConfig.ServletContext (一) Setvlet基本概述 (1) 什么是Servlet ? Servlet(Server Ap ...

  9. Java EE javax.servlet中的ServletContext接口

    ServletContext接口 public interface ServletContext (https://docs.oracle.com/javaee/7/api/javax/servlet ...

随机推荐

  1. 搭建Elasticsearch可视化界面 Kibana

    前言 每一个版本的es都有一个对应的Kibana版本,建议和es相同版本,官网地址: 点击进入下载地址 步骤 1.解压 tar -zxvf kibana-7.2.0-linux-x86_64 2.修改 ...

  2. Spring IoC总结

    Spring 复习 1.Spring IoC 1.1 基本概念 1.1.1 DIP(Dependency Inversion Principle) 字面意思依赖反转原则,即调用某个类的构造器创建对象时 ...

  3. 01.从0实现一个JVM语言之架构总览

    00.一个JVM语言的诞生过程 文章集合以及项目展望 源码github地址 这一篇将是架构总览, 将自顶向下地叙述自制编译器的要素; 文章目录 01.从0实现一个JVM语言之架构总览 架构总览目前完成 ...

  4. Mac创建Root用户

    1.打开Mac终端管理工具 前往-实用工具-终端 2.用命令的形式创建账户 sudo passwd root 3.输入当前登录用户密码 4.输入root用户密码并验证

  5. mongodb导入,导出实例

    MongoDB中文手册|官方文档中文版 英文版:https://docs.mongodb.com/manual/ 1.mongoexport 导出文件 打开命令行,进入我们所安装的mongodb路径下 ...

  6. WPF 基础 - DataTemplate

    如果把控件的功能视为内容,则可以使用控件模板 ControlTemplate 来控制它的展现: 如果把数据视为内容,则可以使用数据模板 DataTemplate 把数据展示出来: ControlTem ...

  7. android分析之智能指针

    智能指针是一个包装类,该类有一个指针指向真正的类对象 引用计数型智能指针,该引用计数是在应该被真正类所持有,而非包装类(智能指针) 为了方便,会将引用计数单独实现在一个类中,这样所有继承它的类都有计数 ...

  8. 2019 GDUT Rating Contest I : Problem G. Back and Forth

    题面: G. Back and Forth Input file: standard input Output file: standard output Time limit: 1 second Mem ...

  9. Azure Cost alerts 费用成本分析

    一,引言 依稀记得在一月初,我们在 Azure 上做成了一个 费用警报的监控,果不其然,前两天 Azure 给我发了两封封 Azure 预警警报的邮件,提醒我的预算的总费用超过了设置的通知阈值 &qu ...

  10. java中==和equals()方法

    java 程序中测试两个变量是否相等有两种方法: == equals()方法 当使用==判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),则只要两个变量 ...