ServletContext的学习笔记(属Servlet学习课程)

文章目录

  • ServletContext 简介
    • 获取 ServletContext 对象
    • 功能
      • 获取 MIME 类型
      • 用来共享数据
      • 获取文件在服务器主机的物理路径
      • 获取全局级别的初始化参数
      • 获取临时目录

ServletContext 简介

web 服务器在启动时,会为每一个已经部署的应用创建唯一的一个 ServletContext 实例,ServletContext 实例对象代表整个 Web 应用,可以和 Servlet 的容器(服务器)通信。

该实例会一直存在,除非服务器关闭或者应用被删除。

注意:每个应用对应唯一的一个 ServletContext 实例

获取 ServletContext 对象

GenericServlet 提供了getServletContext() 方法
HttpSession 提供了getServletContext() 方法
ServletConfig 提供了getServletContext() 方法

在 Servlet 中获取 ServletContext 对象:
1.request.getServletContext()
2.this.getServletContext(),因为自定义的 Servlet 继承了来自 GenericServlet 的 getServletContext() 方法。

功能

获取 MIME 类型

一种互联网通信的文件数据类型
格式:大类型/小类型 例如:text/html、image/jpeg

ServletContext 可以获取文件的 MIME 类型,实际上 MIME 类型存储在服务器的 conf/web.xml 文件中,因为 ServletContext 可以和服务器通信,所以可以获取 MIME 数据。

在这里插入图片描述

客户端会根据 MIME 类型使用对应的解析引擎来解析响应体的数据。

示例代码:

package priv.lwx.javaex.servlet_demo.web.servletcontext;
/*** 获取MIME类型** @author liaowenxiong* @date 2022/1/12 15:34*/import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.File;
import java.io.IOException;@WebServlet("/servlet_context_demo01")
public class ServletContextDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {File file = new File("druid.properties");String name = file.getName();System.out.println(name);ServletContext context = this.getServletContext();String mimeType = context.getMimeType(name);System.out.println(mimeType); // 结果为null,properties文件没有对应的MIME类型String name1 = "a.jpeg";String mimeType1 = context.getMimeType(name1);System.out.println(mimeType1); // 结果为image/jpeg}
}

用来共享数据

ServletContext 对象也是一个域对象,可以用来共享数据。

setAttribute(String name, Object value);
getAttribute(String name);
removeAttribute(String name);

数据共享范围:所有用户的所有请求的数据。比方说,张三把自己的数据往 ServletContext 对象存放,李四可以获取到张三存放的数据,李四也可以存放自己的数据到 ServletContext 对象中,张三也可以获取李四存放的数据。

生命周期:服务器启动就创建 ServletContext 对象,服务器关闭了 ServletContext 对象被销毁。

注:谨慎使用 ServletContext 对象存放数据,因为共享范围太多,数据不安全;另外 ServletContext 对象存活周期太长,存放数据过多,会对服务器内存造成压力。

获取文件在服务器主机的物理路径

方法:getRealPath(String path)

调用 ServletContext 对象的 getRealPath(String path) 方法可以获取指定文件在服务器主机的实际路径。实际这个方法只是在你给定的路径(也叫逻辑路径)前面加上项目的根目录路径而已。例如,我的项目的根目录路径是 /Users/liaowenxiong/Documents/IdeaProjects/java-exercises/out/artifacts/servlet_demo_war_exploded,如果你给定的路径 /WEB-INF/classes/druid.properties,那么会返回给你 /Users/liaowenxiong/Documents/IdeaProjects/java-exercises/out/artifacts/servlet_demo_war_exploded/WEB-INF/classes/druid.properties,如果你给定的路径是 druid.properties,那么会返回给你 /Users/liaowenxiong/Documents/IdeaProjects/java-exercises/out/artifacts/servlet_demo_war_exploded/druid.properties

注意:
1.文件在 src 目录下或者 resources 目录下(maven工程),getRealPath(String path) 中的 path 你要写成 /WEB-INF/classes/文件名
2.文件在 web 目录下或者 webapp 目录下,你要写成 /文件名
3.文件在 WEB-INF 目录下,你要写成 /WEB-INF/文件名

另外一种获取文件真实路径的方式:

// 通过类加载器获取文件的真实路径
URL url = ServletContextDemo02.class.getClassLoader().getResource("/druid.properties"); // 也可以去掉斜杆
String path = url.getPath();
System.out.println(path);

特别注意:getResource(String name),中 name 是文件的名称,文件只能在 src 目录或者 resources 目录下,其它位置下的文件无法识别到。

获取全局级别的初始化参数

step1
在 web.xml 中,使用 <context-param> 配置的参数,可以被所有的 Servlet 共享。

在这里插入图片描述

step2

通过 ServletContext 获取全局参数的值:

ServletContext servletContext = getServletContext();
String version = servletContext.getInitParameter("version");

获取临时目录

可以把客户端上传的文件缓存在这个临时目录下,这个目录下的数据容器会自动清理掉。

File file0 = (File) sctx.getAttribute("javax.servlet.context.tempdir");
System.out.println(file0);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发罪过_七大罪过与如何避免

开发罪过在整个本文中&#xff0c;我将在代码片段中使用Java&#xff0c;同时还将使用JUnit和Mockito 。 本文旨在提供以下测试代码示例&#xff1a; 难以阅读 难以维护 在这些示例之后&#xff0c;本文将尝试提供替代方法&#xff0c;这些替代方法可用于增强测试的可读性&…

调用门的定义+调用

【0】写在前面 0.1&#xff09;本代码&#xff0c;添加了门描述符的相关代码&#xff0c;旨在说明 怎样 对门转移的目标段 进行定义&#xff0c;调用&#xff1b;0.2&#xff09;本文 只对 与 门相关的 代码进行简要注释&#xff0c;言简意赅&#xff1b;0.3&#xff09;文末总…

小学生图片_中秋节手抄报,小学生中秋节手抄报图片大全

月饼&#xff0c;或叫中秋饼&#xff0c;是东亚各地的中秋节食品&#xff0c;越南称为饼中秋(Bnhtrungthu)。中秋节吃月饼的习俗于唐朝开始&#xff0c;北宋之时&#xff0c;月饼被称为“宫饼”&#xff0c;在宫廷内流行&#xff0c;也流传到民间&#xff0c;俗称“小饼”和“月…

Response的学习笔记(属Servlet学习课程)

文章目录Response设置响应消息数据1.设置响应行2.设置响应头3.设置响应体案例1.重定向2.输出字符数据到 Response 对象乱码的问题解决办法一解决办法二3.输出字节数据到 Response 对象4.验证码案例继承与实现体系Response 该对象的功能就是用来设置响应消息&#xff08;响应报…

如何写一个高效进程/线程池_关于高效企业测试的思考(1/6)

如何写一个高效进程/线程池企业中的测试仍然没有得到应有的广泛应用。 编写尤其是维护测试需要花费时间和精力&#xff0c;但是缩短软件测试并不是解决方案。 为了提高测试效率&#xff0c;应该追求哪些范围&#xff0c;方法和测试技术&#xff1f; 基于许多实际项目&#xff…

智能音箱音效哪个好_华为支浩:音质好是底线,AI基本功扎实让智能音箱不再是“玩具”...

2020年&#xff0c;智能音箱市场的仗已经打了六年。立足国内&#xff0c;抑或放眼国际&#xff0c;似乎都是胜负已分&#xff0c;江山已定。可就在此时&#xff0c;一位“搅局者”闯入了大家视野。10月30日&#xff0c;华为年度旗舰新品发布会在上海举行。会上&#xff0c;华为…

JS(JavaScript)给元素绑定事件/给元素注册事件处理程序/给元素注册事件监听器

文章目录不使用 jQuery&#xff0c;给元素注册事件监听器通过jQuery给元素注册事件监听器通过标签的属性来注册事件监听器不使用 jQuery&#xff0c;给元素注册事件监听器 <script type"text/javascript">window.onload function () {alert("test"…

ssh无密码登陆权威指南

##【0】写在前面 ###由于ssh 实现的是免密码登陆&#xff0c;大致步骤是&#xff1a; 0.1&#xff09; client通过ssh登陆到server&#xff1b;0.2&#xff09; server检查家目录下的.ssh文件&#xff0c; 并发送公钥文件 authorized_keys 到client &#xff1b;0.3&#xff0…

java 十六进制浮点_Java十六进制浮点文字

java 十六进制浮点我如何遇到十六进制浮点数 我正在Java :: Geci中开发一种新功能&#xff0c;以减少代码重新格式化的可能性。 如果重新格式化&#xff0c;当前版本的代码将覆盖原本相同的代码。 这很烦人&#xff0c;因为按下重新格式化键的快捷键相当容易&#xff0c;而且许…

python时间倒计时显示屏厂家_python 实现倒计时功能(gui界面)

运行效果&#xff1a;完整源码&#xff1a;##import libraryfrom tkinter import *import timefrom playsound import playsound## display windowroot tk()root.geometry(400x300)root.resizable(0,0)root.config(bg blanched almond)root.title(techvidvan - countdown cloc…

IntelliJ IDEA中Maven操作窗口的命令详解/Maven命令详解/Maven生命周期命令详解

文章目录生命周期命令简介命令详解testpackage命令演示verifyinstall将当前项目放到 Maven 的本地仓库中&#xff0c;供其他项目使用将自己打包或者下载的 jar/war 文件复制到本地仓库中&#xff0c;供其他模块使用sitedeploy生命周期命令简介 在 Maven 中&#xff0c;项目构建…

基于Apache POI 向xlsx写入数据

【0】写在前面 0.1&#xff09; these codes are from 基于Apache POI 的向xlsx写入数据0.2&#xff09; this idea is from http://cwind.iteye.com/blog/2187670 , adding some comments for easy understanding proves to be my work. package com.cwind.poi; import jav…

javafx 打开新窗口_新的JMetro JavaFX 11兼容版本

javafx 打开新窗口你好&#xff0c;我们又见面了&#xff01; 这次&#xff0c;新版本与JavaFX 11兼容。 继续阅读以获取详细信息。 JMetro 8.5.7和11.5.7版本 JMetro代码已分为2个分支。 master分支具有Java 8兼容的JMetro版本&#xff0c;“ 11”分支具有Java 11兼容的版本…

后勤管理系统_充满“智慧”的后勤管理系统是什么样的?

▲2020年4月7日&#xff0c;亿力信息公司部署的后勤管理系统二期上线试运行&#xff0c;技术人员在现场指导用户进行系统的基本操作后勤管理系统二期全面提升管理效能近日&#xff0c;亿力信息公司承接部署的后勤管理系统二期已上线试运行&#xff0c;通过贯穿资产全寿命周期的…

Final Cut Pro 在视频的多个地方同时打马赛克

文章目录使用风格化效果中的像素化或者模糊效果使用风格化效果中的删减效果让马赛克显示一段时间后消失使用风格化效果中的像素化或者模糊效果 像素化和模糊效果是将整个视频画面都像素化和模糊化&#xff0c;所以如果你要将画面中的某个部分打马赛克&#xff0c;其实这样的效…

亚麻纤维截面形态_天然丝纤维蚕丝

点击蓝字 关注我们我国是蚕丝的发源地。近年来&#xff0c;对出土文物的考古研究指出&#xff0c;蚕丝在我国已有六千多年的历史。柞蚕丝也起源于我国&#xff0c;根据历史记载&#xff0c;已有三千多年的历史。远在汉、唐时代&#xff0c;我国的丝绸就畅销于中亚和欧洲各国&am…

jep122_JEP 358:有用的NullPointerExceptions

jep122在文章“ 更好的默认NullPointerException消息是否会传入Java&#xff1f; ”&#xff0c;我总结了当时与JEP 草案有关的背景细节&#xff0c;有关使某些类型的NullPointerException &#xff08;NPE&#xff09;消息更有用。 上周很高兴看到该JEP现在是候选 JEP &#x…

目录、文件夹、文件三者的区别

目录也是文件&#xff0c;是一种特殊文件&#xff0c;叫目录文件&#xff0c;简称目录。 目录是文件系统对象&#xff0c;属于文件系统的概念 术语目录指的是文档文件和文件夹的结构化列表存储在计算机上的方式。它与包含姓名、号码和地址列表的电话簿相当&#xff0c;并且不包…

基于Apache POI 从xlsx读出数据

【0】写在前面 0.1&#xff09; these codes are from 基于Apache POI 的从xlsx读出数据0.2&#xff09; this idea is from http://cwind.iteye.com/blog/2187670 , adding some comments for easy understanding proves to be my work. package com.cwind.poi; import jav…

toarray方法_机器学习中类别变量的编码方法总结

作者&#xff1a;louwill&#xff1b;转载自&#xff1a;机器学习实验室在做结构化数据训练时&#xff0c;类别特征是一个非常常见的变量类型。机器学习中有多种类别变量编码方式&#xff0c;各种编码方法都有各自的适用场景和特点。本文就对机器学习中常见的类别编码方式做一个…