重新学javaweb---ServletContext

2023-11-16

  WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。这个对象创建出来之后就一直在内存中驻留,代表当前的web应用。它可以通过我们上一篇介绍的ServletConfig对象获取,通过ServletConfig.getServletContext方法获得ServletContext对象。因为GenericServlet重写了 getServletContext 所以也可以 直接this.getServletContext()获得。(也可以通过request来获取)
  1.由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象(这是其中一个域对象,后面我们还要学习其他的几个session,page,request )。
  作用范围:整个web应用范围内共享数据
   生命周期:当服务器启动web应用加载后创建出ServletContext对象后,域产生。当web应用被移除出容器或服务器关闭,随着web应用的销毁域销毁。

 void setAttribute(String,Object);
Object getAttribute(String);
void removeAttribute(String);

2.前一篇讲的config只能获取某一个特定的servlet的配置信息,当我们需要获取在每个servlet都能生效的配置信息(在web.xml servlet标签外面 context-param内的配置信息)时就要用到,servletContext了。函数和前一篇中的用法一样。
3.实现Servlet的转发

    重定向 : 302+Location
    请求转发 : 服务器内不进行资源流转

    ***请求转发是一次请求一次响应实现资源流转.请求重定向两次请求两次响应.**
//demo5中  转发到demo6
RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/servlet/Demo6Servlet");
        dispatcher.forward(request, response);

4.加载资源文件
如果直接写文件名,应用会去tomcat的bin目录去找这个文件。其实是去当前程序启动的目录去找。直接写tomcat下的全目录可以,但这个全目录之前的不要手写,要通过ServletContext去获取tomcat的路径。
为了解决这样的问题ServletContext提供了getRealPath方法,在这个方法中传入一个路径,这个方法的底层会在传入的路径前拼接当前web应用的硬盘路径从而得到当前资源的硬盘路径,这种方式即使换了发布环境,方法的底层也能得到正确的web应用的路径从而永远都是正确的资源的路径

//文件放在webroot根目录下
     this.getServletContext().getRealPath("config.properties")

如果在非Servlet环境(某个servlet调用自己写的普通java类)下要读取资源文件时可以采用类加载器加载文件的方式读取资源

//config.properties(放在src根目录时)这个文件发布之后 启动目录在 Day03/WEB-INF/classess/  
    Service.class.getClassLoader().getResource("config.properties").getPath()
//config.properties(webroot根目录时)这个文件发布之后 启动目录在 Day03/WEB-INF/   
//但classLoader是从    Day03/WEB-INF/classess/  找 所以得../ 向上找
Service.class.getClassLoader().getResource("../config.properties").getPath()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新学javaweb---ServletContext 的相关文章

随机推荐

  • python的赋值操作浅析

    目录 前言 一 不可变类型的赋值 1 Numbers的赋值 2 String类型的赋值 3 Tupes类型赋值 4 函数传参赋值 二 可变类型的赋值 1 List赋值 2 函数传参 总结 前言 python中Numbers 数
  • mysql初始化命令_mysql初始化命令及其他命令

    这个问题纠结了我两年 为了配置my cnf中 undo的 参数生效 以及生成undo文件 使用一下命令 usr bin mysql install db defaults file etc my cnf datadir dbfiles da
  • type object xxx has no attribute objects

    在Django 2 0以下版本 使用自定义管理器存在一个BUG 该BUG引发的原因 是因为报错模型使用自定义管理器 导致默认的objects管理器被覆盖掉了 我的解决方案是 升级Django版本 升级到Django 2 2 1 如果有大佬知
  • Uniapp录音实时回调原生插件-YL-AudioRecorder

    YL AudioRecorder 插件地址 https ext dcloud net cn plugin id 14028 升级版 YL AudioRecorderPlus 支持mp3录制及实时回调 https ext dcloud net
  • 30条经典的SQL语句

    关于索引 推荐转载的这篇文章 http blog csdn net dutguoyi archive 2006 01 10 575617 aspx 改善SQL语句的效率 http community csdn net Expert topi
  • 2017年严重拖延着患者欠下的债

    扩展基础知识面 Android 面试 全站式导航 http mp weixin qq com s fTfudY1DBYS5JiSkPnbjAg 100篇精选干货 感谢你与码个蛋共同成长 含5重福利 http mp weixin qq com
  • 使用com.alibaba里面的druid连接数据库

    1 添加依赖
  • Spark性能调优之Shuffle调优

    Spark性能调优之Shuffle调优 Spark底层shuffle的传输方式是使用netty传输 netty在进行网络传输的过程会申请堆外内存 netty是零拷贝 所以使用了堆外内存 shuffle过程中常出现的问题 常见问题一 redu
  • 服务器物理结构,物理 I/O 体系结构

    物理 I O 体系结构 与以前发行版的 M 系列服务器相比 这些服务器的物理 I O 体系结构发生了变化 使用了不同的名称 并且 CPU 不再拥有 PCIe 结构 I O 术语 用于描述 I O 体系结构的术语发生了如下变化 根联合体 在
  • React Effects(副作用)

    我们在之前提到过 React 组件在渲染过程中不应该有可观察到的副作用 但是有些时候副作用确实必要的 我们也许需要进行管理 focus 状态 用 canvas 画图 订阅数据源等操作 在 React 中 这些都可以通过声明 effect 来
  • ag-grid 自带css样式记录

    本篇文章是打算自己用于记录ag grid自身的css样式的记录和功能 1 ag header group cell with group 作用 多表头 前几层 最后一行表头除外 表头样式的设置 ag header group cell wi
  • pg备份数据库

    原文 http www weijingbiji com 1975 PostgreSQL备份工具pg dump和pg dumpall PostgreSQL 数据库 作者 viking PostgreSQL使用 pg dump 和 pg dum
  • [知识图谱实战篇] 七.HTML+D3实现关系图谱搜索功能

    前面作者讲解了很多知识图谱原理知识 包括知识图谱相关技术 Neo4j绘制关系图谱等 但仍缺少一个系统全面的实例 为了加深自己对知识图谱构建的认识 为后续创建贵州旅游知识图谱打下基础 作者深入学习了张宏伦老师的网易云课程 星球系列电影 并结合
  • Python利用demoji库删除文档中的表情符号

    在进行数据清洗时 往往需要删除文档中的出现的表情符号 因为他们无法被读取 借助demoji库 可以非常简单地完成这项工作 关于demoji 库的文档 可以访问demoji PyPI 首先 需要在环境中利用pip install安装demoj
  • 可拖拽的easyui treegrid

    引用 JQuery EasyUI TreeGrid控件的使用 支持拖拽与禁止拖拽 演示
  • 实际的机械臂控制(9)Moveit单独控制机械臂末端在XYZ三个轴的平移和旋转(基于python)

    0 序言 在moveit中 控制机械臂的末端执行器运动的API有两个 分别是 shift pose target set pose target 第一个API shift pose target 其实这个函数在旋转角度这块并不会得到让大家满
  • flutter 中stack 控件的 大小是如何确定的

    stack 控件 stack 是我们在flutter中常用到的控件 然而stack的大小是如何确定的是一个值得探究的问题 自己在网上也进行了搜索 但是总是不能解释自己遇到的新情况 所以我这里就根据目前的经验对stack大小是如何确定的进行一
  • 泰森多边形(Voronoi图)生成算法

    一 文档目的 本文描述了在geomodel模块中 生成泰森多边形所使用的算法 二 概述 GIS和地理分析中经常采用泰森多边形进行快速插值 和分析地理实体的影响区域 是解决邻接度问题的又一常用工具 荷兰气候学家A H Thiessen提出了一
  • 软件构架、架构和框架的区别

    软件框架 Software Framework 介绍 面向某领域 包括业务领域 如ERP 和计算领域 如GUI 的 可复用的 半成品 软件 它实现了该领域的共性部分 并提供一系列定义良好的可变点以保证灵活性和可扩展性 可以说 软件框架是领域
  • 重新学javaweb---ServletContext

    WEB容器在启动时 它会为每个WEB应用程序都创建一个对应的ServletContext对象 它代表当前web应用 这个对象创建出来之后就一直在内存中驻留 代表当前的web应用 它可以通过我们上一篇介绍的ServletConfig对象获取