13_ServletContext对象
【简介】
ServletContext即Servlet上下文对象,该对象表示当前的web应用环境信息,一个Web应用只会创建一个ServletContext对象。
Web容器启动的时候,它会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前的web应用。
[注意]
由于一个Web应用中的所有Servlet共享一个ServletContext对象,所以多个Servlet通过ServletContext对象实现数据共享,
ServletContext对象通常称为Context域对象。
【ServletContext创建时机】
ServletContext对象是在TomCat服务器加载完当前Web应用后创建出来的。
ServletContext对象是作为ServletConfig对象成员变量传入Servlet中。
通过ServletConfig的getServletContext()方法就可以得到ServletContext对象。
看下ServletConfig中相关的ServletContext代码:
class ServletConfig{ //ServletConfig对象中维护了ServletContext对象的应用
ServletContext context;
getInitParameter();
getInitParameterNames();
public ServletContext getServletContext(){ //返回一个ServletContext对象
return contex;
}
}
在Servet中的init的方法实例化一个ServletConfig
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
[ 注意 ]
this.ServletConfig.getServletContext():通过ServletConfig对象来获取ServletContext对象。
ServletContext对象:启动时创建
ServletConfig对象:调用init方法之前创建的,在ServletContext对象之前。
【在Servlet中得到ServletContext的两种方式】

【ServletContext的5大作用】
1.获取web的上下文路径
String getContextPath();
2.获取全局的参数
String getInitParameter(String name);
Enumeration getInitParameterNames();
3.和域对象相关的
void setAttribute(String name,Onject object);
Object getAttribute(String name);
void removeAttribute(String name);
域对象(域对象就是在不同资源之前来共享数据,保存数据,获取数据)
ServletContext是我们学习的第一个域对象(Servlet共有三个域对象ServletContext、HttpServletRequest、HttpSession)
4. 请求转发的
RequestDispatcher getRequestDispatcher(String path);
在Servlet跳转页面:
4.1请求重定向(你找我借钱,我没有,你自己去找他借钱)
1.地址栏会改变,变成重定向到的地址
2.可以跳转到项目内的资源,也可以跳转项目外的资源
3.浏览器向服务器发出两次请求,那么不能使用请求来作为域对象来共享数据。
4.2请求转发(你找我借钱,我没有,我帮你去向他借钱)
1.地址栏不会改变
2.只能跳转到项目内的资源,不能跳转项目外的资源。
3.浏览器向服务器发出一次请求,那么可以使用请求作为域对象共享数据。
5.读取web项目的资源文件
String getRealPath(String path);
InputStream getResourceAsStream(String path);
URL getResource(String path);
【利用ServletContext对象来收发数据(Servlet3.0新特性)】
利用ServletContext实现SendServlet和ReceiveServlet之间的数据共享。
【SendServlet.java 发数据】
package com.Higgin.context; import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet("/SendServlet")
public class SendServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String data="Higgin";
this.getServletContext().setAttribute("data", data);
System.out.println("SendServlet发送的数据为:"+data);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
【ReceiveServlet.java 收数据】
package com.Higgin.context; import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet("/ReceiveServlet")
public class ReceiveServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String data=(String) this.getServletContext().getAttribute("data");
System.out.println("ReceiveServlet接收到的数据:"+data);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
}
[ 发送和接收数据(使用不同的浏览器,应用场景:聊天室) ]

【通过ServletContext读取资源文件db.properties】
【工程截图】

[ db.properties ]
url=jdbc:mysql://localhost:3306/test
username=root
password=
[ ServletDemo00.java ]
package com.Higgin.servlet; import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet("/ServletDemo00")
public class ServletDemo00 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { InputStream in=this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties props=new Properties();
props.load(in); String url=props.getProperty("url");
String username=props.getProperty("username");
String password=props.getProperty("password"); System.out.println("url=="+url);
System.out.println("username=="+username);
System.out.println("password=="+password);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
[ 运行结果 ]

13_ServletContext对象的更多相关文章
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- Asp.Net WebApi核心对象解析(下篇)
在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...
- JS核心系列:浅谈原型对象和原型链
在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...
- Chrome出了个小bug:论如何在Chrome下劫持原生只读对象
Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...
- XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法
在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...
- ASP.NET内置对象的总结
1. Response对象可形象的称之为响应对象,用于将数据从服务器发送回浏览器. 实例源码:链接: http://pan.baidu.com/s/1dDCKQ8x 密码: ihq0 2. Requ ...
- ADO.NET对象的详解
1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...
随机推荐
- Oracle- 备份单表结构和单表数据
在网上看到,有用,记录如下: 这是Oracle的备份表结构和数据,因为实际工作对表进行大规模的数据改动都要讲数据进行备份,否则丢了数据那是很头疼的事情. --创建一份表结构 create table ...
- jQuery插件- Autocomplete应用详解
项目中有时会用到自动补全查询,就像Google搜索框.淘宝商品搜索功能,输入汉字或字母,则以该汉字或字母开头的相关条目会显示出来供用户选择, autocomplete插件就是完成这样的功能. auto ...
- RocketMQ常用命令
转自:http://jameswxx.iteye.com/blog/2091971 1.1. 控制台使用 RocketMQ 提供有控制台及一系列控制台命令,用于管理员对主题,集群,broker 等信息 ...
- xcode6 升级到xcode7 产生的问题
当初作为第一个吃螃蟹的人,第一天就把xcode升级到了xcode7,结果报了一堆错,网上也没有解决方案,于是果断退到xcode6.这两天看时机成熟,升到了xcode7,在升级后,会有许多问题,在此罗列 ...
- 中国大概能用的NTPserver地址
133.100.11.8 prefer210.72.145.44203.117.180.36131.107.1.10time.asia.apple.com64.236.96.53130.149.17. ...
- [置顶] 【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12708811 场景类CCScene和布景类CCLayer都是作为一个容器来使 ...
- SharePoint 2013+ Sqlserver 2014 Kerberos 配置传奇, 最终的解决方案 验证。
SharePoint 2013+ Sqlserver 2014 Kerberos 配置传奇. 1,安装数据库,我就不多说安装,客户一定要注意. 我将参照以下实施例和账户. 2,建立DNS,假设没有DN ...
- C#_delegate - 有返回值手工调用
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- SOAP 及其安全控制--转载
原文地址:http://my.oschina.net/huangyong/blog/287791 目录[-] 1. 基于用户令牌的身份认证 2. 基于数字签名的身份认证 3. SOAP 消息的加密与解 ...
- How to Map Distinct Value Types Using Java Generics--reference
原文:http://www.codeaffine.com/2015/03/04/map-distinct-value-types-using-java-generics/ Occasionally t ...