一. Servlet上下文

1. 每个web工程都只有一个ServletContext对象。也就是在同一个web工程里, 所有的servlet获取到的这个类的对象都是同一个。

2. 获取上下文对象: ServletContext context = getServletContext();

3. ServletContext 的作用

3.1. 获取全局配置参数;

3.2. 获取web工程中的资源;

3.3. 存取数据, servlet间共享数据。

4. ServletContext何时创建: 服务器启动的时候, 会为托管的每一个web应用程序, 创建一个ServletContext对象。

5. ServletContext何时销毁: 从服务器移除托管或者是关闭服务器。

6. ServletContext 的作用范围: 只要在这个项目里面, 都可以取。

二. ServletContext 获取全局配置参数

1. 新建一个UseServletContext的Web工程

2. 在下WebContent新建一个index.html

3. 编写index.html

<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>servlet上下文</title></head><body><a href="GetContextParam.action">获取全局配置参数</a><br/></body>
</html>

4. 新建一个GetContextParam.java类

5. 编辑GetContextParam.java

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GetContextParam extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取ServletContext对象ServletContext servletContext = getServletContext();// 获取全局配置参数String address = servletContext.getInitParameter("address");System.out.println("address = " + address);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

6. 编辑web.xml

7. 部署运行

8. 点击”获取全局配置参数”超链接, 控制台打印

三. ServletContext 获取资源

1. 在WebContent目录下, 新建一个file目录, 放入config.properties文件, 文件内容如下图:

2. servletContext.getRealPath("/"): 工程(项目)在tomcat里面的根目录。

C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\

3. 新建一个GetResources.java类

4. 编辑GetResources.java, 使用getRealPath获取资源

package com.lywgames.myservlet;import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GetResources extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取ServletContext对象ServletContext servletContext = getServletContext();/* servletContext.getRealPath("/"): 工程在tomcat里面的根目录。* C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\*/// 获取给定的文件在服务器上面的绝对路径String realPath = servletContext.getRealPath("file/config.properties");Properties properties = new Properties();properties.load(new FileInputStream(realPath));System.out.println("name = " + properties.getProperty("name"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

5. 编写web.xml

6. 编辑index.html

7. 部署运行项目

8. 点击”获取资源”超链接, 控制台打印

9. 使用servletContext.getResourceAsStream(“资源文件路径”)获取资源文件输入流, 资源文件路径之前的路径是工程在tomcat里面的根目录。资源文件路径必须存在, 否则返回null。继续编辑我们的GetResources.java

package com.lywgames.myservlet;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GetResources  extends HttpServlet {private static final long serialVersionUID = 1L;public void getRealPath() throws ServletException, IOException {// 获取ServletContext对象ServletContext servletContext = getServletContext();/* servletContext.getRealPath("/"): 工程在tomcat里面的根目录。* C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\*/// 获取给定的文件在服务器上面的绝对路径String realPath = servletContext.getRealPath("file/config.properties");Properties properties = new Properties();properties.load(new FileInputStream(realPath));System.out.println("name = " + properties.getProperty("name"));}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取ServletContext对象ServletContext servletContext = getServletContext();// servletContext.getResourceAsStream使用工程在tomcat里面的根目录。InputStream is = servletContext.getResourceAsStream("file/config.properties");Properties properties = new Properties();properties.load(is);System.out.println("name = " + properties.getProperty("name"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

10. 类路径相对的是classes目录

11. 使用类路径获取资源, 继续编辑我们的GetResources.java

package com.lywgames.myservlet;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GetResources  extends HttpServlet {private static final long serialVersionUID = 1L;public void getRealPath() throws ServletException, IOException {// 获取ServletContext对象ServletContext servletContext = getServletContext();/* servletContext.getRealPath("/"): 工程在tomcat里面的根目录。* C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\*/// 获取给定的文件在服务器上面的绝对路径String realPath = servletContext.getRealPath("file/config.properties");Properties properties = new Properties();properties.load(new FileInputStream(realPath));System.out.println("name = " + properties.getProperty("name"));}public void getResourceAsStream() throws ServletException, IOException {// 获取ServletContext对象ServletContext servletContext = getServletContext();// servletContext.getResourceAsStream使用工程在tomcat里面的根目录。InputStream is = servletContext.getResourceAsStream("file/config.properties");Properties properties = new Properties();properties.load(is);System.out.println("name = " + properties.getProperty("name"));}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 类路径相对于classes路径:C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\WEB-INF\classesInputStream is = this.getClass().getClassLoader().getResourceAsStream("../../file/config.properties");Properties properties = new Properties();properties.load(is);System.out.println("name = " + properties.getProperty("name"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

四. ServletContext存取数据, servlet间共享数据

1. 新建CunQuData.java和OutLoginCount.java

2. 编辑CunQuData.java

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class CunQuData extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取ServletContext对象ServletContext servletContext = getServletContext();Object loginCount =  servletContext.getAttribute("loginCount");if(loginCount != null){servletContext.setAttribute("loginCount", (((int)loginCount) + 1));}else{servletContext.setAttribute("loginCount", 1);}resp.sendRedirect("OutLoginCount.action");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

3. 编辑OutLoginCount.java

package com.lywgames.myservlet;import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class OutLoginCount extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取ServletContext对象ServletContext servletContext = getServletContext();int loginCount =  (int)servletContext.getAttribute("loginCount");StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");// 网页编码UTF-8sb.append("<meta charset='UTF-8' />").append("\r\n");sb.append("<title>登录次数</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>登录次数:").append(loginCount).append("</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 相应客户端的内容类型是text/html 编码是UTF-8(包含字符编码和网页编码)resp.setContentType("text/html;charset=UTF-8");// 字符流响应客户端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

4. 编辑index.html

5. 编辑web.xml

6. 部署运行项目

7. 多点击几次登录, 显示登录次数

016_Servlet上下文相关推荐

  1. Python 上下文管理器和 with 语句

    1. 上下文管理器概念 什么是 Python 的上下文管理器(Context Managers)呢? ​ 含有 __enter__ 和 __exit__ 方法的对象就是.上下文管理器存在的目的是管理 ...

  2. python with上下文管理

    with上下文管理 class person:def __init__(self,name):self .name = name def __enter__(self):print('这是with定义 ...

  3. android上下文关系,Android Context上下文的理解 Hua

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Context概念 在安卓对象中,Context是经常使用的元素-但应该也是错误使用率最高的. 你在加载资源.启动一个新 ...

  4. SSC:基于点云语义上下文的大规模激光SLAM的位置识别方法

    文章:SSC: Semantic Scan Context for Large-Scale Place Recognition 作者:Lin Li1 , Xin Kong1 , Xiangrui Zh ...

  5. Asp.Net Core AsyncLocal 异步上下文

    引子 阅读以下代码,并尝试分析 代码解析 在主线程中,线程Id为1,为线程变量赋值 变量==d6ff 开启一个新的task,此时线程Id为4,变量==d6ff,并调用Task1 开启一个同步Task3 ...

  6. UIGraphicsBeginImageContext - 位图上下文

    UIGraphicsBeginImageContext 首先,先来认识一个UIGraphicsBeginImageContext,它会创建一个基于位图的上下文(context)(默认创建一个透明的位图 ...

  7. Python之向日志输出中添加上下文信息

    除了传递给日志记录函数的参数(如msg)外,有时候我们还想在日志输出中包含一些额外的上下文信息.比如,在一个网络应用中,可能希望在日志中记录客户端的特定信息,如:远程客户端的IP地址和用户名.这里我们 ...

  8. 函数的四种调用模式.上下文调用.call.apply

    闭包:函数就是一个闭包,一个封闭的作用域; 返回函数,要返回多个函数就用一个对象封装一下, 立即执行函数+return 回调函数 JS动态创建的DOM,不会被搜索引擎抓取,对SEO不友好. /*win ...

  9. 句法模式识别(两)-正规文法、上下文无关文法

    正规的语法特点 1.全部长度有限的语言都是正规的. 2.用正规文法当然能产生无限长串,当中周期反复部分的长度不大于非终止符的长度. 举个样例 在此规则之下.能生成句子 当中周期反复部分为ab,这个样例 ...

最新文章

  1. Eclipse launch failed.Binary not found解决方案
  2. windows命令大全_必收藏!电脑快捷键、组合键大全
  3. python3之SQLAlchemy
  4. 字符串删除首尾_[LeetCode] 459. 重复的子字符串
  5. nagios监控三部曲之——nagios实现飞信报警(3)
  6. ubuntu nginx安装
  7. linux fork多进程 demo
  8. windows 命令行中 「ftp」「sftp」命令的使用
  9. Ubuntu16.04LTS +Qt+boost1.66编译错误:consuming_buffers.hpp: parse error in template argument list...
  10. mybatis文档地址
  11. 激光雷达原理 你真的了解全了吗?
  12. Weixin4j微信开发网页授权获取openid案例
  13. http工作中常见的状态码
  14. 装载M1芯片的Mac安装“AE”时,出现错误代码“501”怎么办?
  15. DeviceMonitoringStudio设备监控工具的使用
  16. 装置案例| MODBUS转PROFINET网关连接智能低压电动机
  17. Selenium滚动条处理
  18. 数学建模 2013B碎纸片的拼接复原
  19. 使用grpc遇到greenlet.error: cannot switch to a different thread解决方法
  20. 【财富空间】推荐!赛迪智库:2018年中国工业和信息化60个行业发展趋势展望

热门文章

  1. Retrofit2.0和Rxjava结合使用的简单记录
  2. IT员工应该向谁汇报工作,CFO or CEO?
  3. struts文件上传,获取文件名和文件类型
  4. (Mirage系列之五)Mirage经典案例之桌面驱动和基础层管理
  5. 统计函数——汇总统计时间类数据
  6. smart pointer in gamedev
  7. 沉默是金不如开口为银
  8. [RHEL5企业级Linux服务攻略]--第6季 Vsftpd服务全攻略之常规配置
  9. 在Silverlight中绘制贝塞尔曲线
  10. apache http server指的是什么