016_Servlet上下文
一. 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上下文相关推荐
- Python 上下文管理器和 with 语句
1. 上下文管理器概念 什么是 Python 的上下文管理器(Context Managers)呢? 含有 __enter__ 和 __exit__ 方法的对象就是.上下文管理器存在的目的是管理 ...
- python with上下文管理
with上下文管理 class person:def __init__(self,name):self .name = name def __enter__(self):print('这是with定义 ...
- android上下文关系,Android Context上下文的理解 Hua
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Context概念 在安卓对象中,Context是经常使用的元素-但应该也是错误使用率最高的. 你在加载资源.启动一个新 ...
- SSC:基于点云语义上下文的大规模激光SLAM的位置识别方法
文章:SSC: Semantic Scan Context for Large-Scale Place Recognition 作者:Lin Li1 , Xin Kong1 , Xiangrui Zh ...
- Asp.Net Core AsyncLocal 异步上下文
引子 阅读以下代码,并尝试分析 代码解析 在主线程中,线程Id为1,为线程变量赋值 变量==d6ff 开启一个新的task,此时线程Id为4,变量==d6ff,并调用Task1 开启一个同步Task3 ...
- UIGraphicsBeginImageContext - 位图上下文
UIGraphicsBeginImageContext 首先,先来认识一个UIGraphicsBeginImageContext,它会创建一个基于位图的上下文(context)(默认创建一个透明的位图 ...
- Python之向日志输出中添加上下文信息
除了传递给日志记录函数的参数(如msg)外,有时候我们还想在日志输出中包含一些额外的上下文信息.比如,在一个网络应用中,可能希望在日志中记录客户端的特定信息,如:远程客户端的IP地址和用户名.这里我们 ...
- 函数的四种调用模式.上下文调用.call.apply
闭包:函数就是一个闭包,一个封闭的作用域; 返回函数,要返回多个函数就用一个对象封装一下, 立即执行函数+return 回调函数 JS动态创建的DOM,不会被搜索引擎抓取,对SEO不友好. /*win ...
- 句法模式识别(两)-正规文法、上下文无关文法
正规的语法特点 1.全部长度有限的语言都是正规的. 2.用正规文法当然能产生无限长串,当中周期反复部分的长度不大于非终止符的长度. 举个样例 在此规则之下.能生成句子 当中周期反复部分为ab,这个样例 ...
最新文章
- Eclipse launch failed.Binary not found解决方案
- windows命令大全_必收藏!电脑快捷键、组合键大全
- python3之SQLAlchemy
- 字符串删除首尾_[LeetCode] 459. 重复的子字符串
- nagios监控三部曲之——nagios实现飞信报警(3)
- ubuntu nginx安装
- linux fork多进程 demo
- windows 命令行中 「ftp」「sftp」命令的使用
- Ubuntu16.04LTS +Qt+boost1.66编译错误:consuming_buffers.hpp: parse error in template argument list...
- mybatis文档地址
- 激光雷达原理 你真的了解全了吗?
- Weixin4j微信开发网页授权获取openid案例
- http工作中常见的状态码
- 装载M1芯片的Mac安装“AE”时,出现错误代码“501”怎么办?
- DeviceMonitoringStudio设备监控工具的使用
- 装置案例| MODBUS转PROFINET网关连接智能低压电动机
- Selenium滚动条处理
- 数学建模 2013B碎纸片的拼接复原
- 使用grpc遇到greenlet.error: cannot switch to a different thread解决方法
- 【财富空间】推荐!赛迪智库:2018年中国工业和信息化60个行业发展趋势展望