JavaWeb ServletContext基础与应用详细讲解
作者:知奕奕 发布时间:2021-12-20 22:13:10
ServletContext 基础知识
获取 ServletContext对象
有两种方式可以获取:
使用 servletconfig 对象获取
使用 servlet 上下文获取
// 第一种方式
ServletContext app1 = config.getServletContext();
writer.println("<br>" + app1);
// 第二种方式
ServletContext app2 = this.getServletContext();
writer.println("<br>" + app2);
特性
一个 webapp 只存在一个 ServletContext 对象
ServletContext 对象是由 web 服务器启动时创建
ServletContext 是一个接口,他依然遵循 servlet 规范
ServletContext 在 web 服务器销毁时才会销毁
ServletContext 存储了 整个 web.xml 的信息
context-param
和 servletconfig 一样,他也可以获取与 web.xml 中定义的参数;
只不过 ServletContext
定义的参数是写在 servlet 标签外面的;
每一个 context-param
都代表一个 key-value;
如果需要多个参数就必须要 分别写 context-param
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<!-- 定义了两个外部参数 -->
<context-param>
<param-name>pageSize</param-name>
<param-value>10</param-value>
</context-param>
<context-param>
<param-name>porkPrice</param-name>
<param-value>999</param-value>
</context-param>
...
</web-app>
同样的,我们可以使用 Enumeration
获取所有的 context-param
,然后再使用迭代器的方法一次获取其中的 key
和 value
package com.zhiyiyi.javaweb.servlet;
import jakarta.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
public class AServlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
servletResponse.setContentType("text/html");
PrintWriter writer = servletResponse.getWriter();
ServletContext servletContext = this.getServletContext();
// 迭代输出param-name和param-value
Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
String key = initParameterNames.nextElement();
String value = servletContext.getInitParameter(key);
writer.println(key + " " + value + "<br>");
}
}
}
可见,context-param 定义的是 webapp 内共享的配置信息,而 servlet-name 更适用于仅供单个 servlet 使用
获取文件路径
获取根路径,即我们配置 web 服务器时设置的路径
// 获取web的根路径
String contextPath = servletContext.getContextPath();
writer.println("<br>" + contextPath);
获取指定文件的绝对路径;
getRealPath 接收一个路径作为参数,这个路径的起始点是 web 文件夹,下方代码指的是 web/index.html
这个文件
注意注意!getRealPath 的参数别带上根目录路径!!!
// 获取绝对路径
String realPath = servletContext.getRealPath("/index.html");
writer.println("<br>" + realPath);
记录日志
可以使用 log 方法记录日志;
日志保存位置为 tomcat 根目录下/logs
servletContext.log("hellowrodl");
参数增删改查
我们可以直接在 servlet 中直接对 context-param
进行增添、查找、删除!!!
// 以键值对的方式添加参数
servletContext.setAttribute("name","tom");
// 获取参数
Object name = servletContext.getAttribute("name");
// 删除参数
servletContext.removeAttribute("name");
来源:https://blog.csdn.net/delete_you/article/details/127191802


猜你喜欢
- 我们都知道Android Studio用起来很棒,其中布局预览更棒。我们在调UI的时候基本是需要实时预览来看效果的,在Android Stu
- 前言对于线程安全,我们有说不尽的话题。大多数保证线程安全的方法是添加各种类型锁,使用各种同步机制,用限制对共享的、可变的类变量并发访问的方式
- 本示例演示如何通过设置Intent对象的标记,来改变当前任务堆栈中既存的Activity的顺序。1. Intent对象的Activity启动
- 目录前言asyncawait从以往知识推导创建异步任务创建异步任务并返回Task异步改同步说说 await Task说说 async Tas
- 本文实例讲述了Android开发实现webview中img标签加载本地图片的方法。分享给大家供大家参考,具体如下:在网上查了很多教程,感觉很
- 闹钟的简单实现,只有显示时间和设置闹钟。AlarmViewpackage com.example.lenovo.clock2; import
- 目前在做项目中有处理图片的部分,参考了一下网上案例,自己写了一个获取内容中的图片地址的方法。 一般来说一个 HTML 文档有很多标
- 内存泄露,是Android开发者最头疼的事。可能一处小小的内存泄露,都可能是毁千里之堤的蚁穴。 怎么才能检测内存泄露呢? AndroidSt
- Lombok有什么用在我们实体Bean中有大量的Getter/Setter方法以及toString, hashCode等可能不会用到,但是某
- 模式介绍桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。是一种结构型设计模式。Bridge模式
- 1、抽象类1.1 什么是抽象类?1.1.1 对抽象类的理解1.1.2 关于抽象类类与类之间具有共同特征,将这些共同特征提取出来,形成的就是抽
- 本文实例讲述了WinFrom中label背景透明的实现方法,在应用程序开发中有着不错的实用价值。分享给大家供大家参考。具体实现方法如下:使用
- 本文实例为大家分享了C# this关键字的四种用法,供大家参考,具体内容如下用法一 this代表当前实例,用this.显式调用一
- IDEA安装后,前进 后退快捷按钮默认不在工具栏显示,需要手动将其添加到工具栏*按照图一选中Toolbar Run Actions ,点击右
- 1、利用延迟队列延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才
- 一、理解slf4j(Simple Logging Facade for Java),表示为java提供的简单日志门面,更底层一点说就是接口。
- RestTemplate 401错误调用第三方api 若是服务返回状态码不为200,默认会执行DefaultResponseErrorHan
- Springboot swagger-ui.html访问不到问题在前面的Swagger2的基本配置中是可以访问到swagger-ui.htm
- 前言本文主要给大家介绍了关于Kotlin委托属性与区间的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。委托属性有
- Thread parameterThread_t = null; private void Print_DetailForm_S