ServletContext(重要)

  一个项目只有一个ServletContext对象!

  我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据!

  与天地同寿!!!这个对象在Tomcat启动时就创建,在Tomcat关闭时才会死去!

1 ServletContext概述

  服务器会为每个应用创建一个ServletContext对象:

  l  ServletContext对象的创建是在服务器启动时完成的;

  l  ServletContext对象的销毁是在服务器关闭时完成的。

   ServletContext对象的作用是在整个Web应用的动态资源之间共享数据!例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。

2 获取ServletContext

l  ServletConfig#getServletContext();

l  GenericServlet#getServletContext();

l  HttpSession#getServletContext()

l  ServletContextEvent#getServletContext()

[c1]   ------------ [c1]不及!

在Servlet中获取ServletContext对象:

  l  在void init(ServletConfig config)中:ServletContext context = config.getServletContext();,

ServletConfig类的getServletContext()方法可以用来获取ServletContext对象;

在GenericeServlet或HttpServlet中获取ServletContext对象:

  l  GenericServlet类有getServletContext()方法,所以可以直接使用this.getServletContext()来获取;

  

public class MyServlet implements Servlet {

public void init(ServletConfig config) {

ServletContext context = config.getServletContext();

}

}

public class MyServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) {

ServletContext context = this.getServletContext();

}

}

3 域[c2] 对象的功能-------------- [c2]域对象就是用来在多个Servlet中传递数据!!!

  ServletContext是JavaWeb四大域对象之一:

  1. l  PageContext;
  2. l  ServletRequest;
  3. l  HttpSession;
  4. l  ServletContext;

  所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法:

1、 void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,

例如:servletContext.setAttribute(“xxx”, “XXX”),在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。

请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;

2、Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取之前需要先去存储才行,

例如:String value =  (String)servletContext.getAttribute(“xxx”);,获取名为xxx的域属性;

3、 void removeAttribute(String name):用来移除ServletContext中的域属性,

如果参数name指定的域属性不存在,那么本方法什么都不做;

4、 Enumeration getAttributeNames():获取所有域属性的名称;

4 获取应用初始化参数

l  Servlet也可以获取初始化参数,但它是局部的参数;也就是说,一个Servlet只能获取自己的初始化参数,不能获取别人的,即初始化参数只为一个Servlet准备!

l  可以配置公共的初始化参数,为所有Servlet而用!这需要使用ServletContext才能使用!

还可以使用ServletContext来获取在web.xml文件中配置的应用初始化参数!注意,应用初始化参数与Servlet初始化参数不同:

web.xml

<web-app ...>

...

<context-param>

<param-name>paramName1</param-name>

<param-value>paramValue1</param-value>

</context-param>

<context-param>

<param-name>paramName2</param-name>

<param-value>paramValue2</param-value>

</context-param>

[崔1] </web-app>

ServletContext context = this.getServletContext();[崔2]

String value1 = context.getInitParameter("paramName1");

String value2 = context.getInitParameter("paramName2");

[崔3]        System.out.println(value1 + ", " + value2);

Enumeration names = context.getInitParameterNames();[崔4]

while(names.hasMoreElements()) {

System.out.println(names.nextElement());

}


[崔1]配置了两个应用初始化参数

[崔2]获取ServletContext对象

[崔3]通过参数名,获取参数值

[崔4]获取所有应用初始化参数名称

学习笔记4_ServletContext(重要整个Web应用的动态资源之间共享数据)的更多相关文章

  1. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

  2. Apollo学习笔记(一):canbus模块与车辆底盘之间的CAN数据传输过程

    Apollo学习笔记(一):canbus模块与车辆底盘之间的CAN数据传输过程 博主现在从车载自组网信道分配和多跳路由转向了自动驾驶,没啥经验,想快些做出来个Demo还是得站在巨人的肩膀上才行,我选择 ...

  3. Shiro学习笔记(5)——web集成

    Web集成 shiro配置文件shiroini 界面 webxml最关键 Servlet 測试 基于 Basic 的拦截器身份验证 Web集成 大多数情况.web项目都会集成spring.shiro在 ...

  4. [原创]java WEB学习笔记35:java WEB 中关于绝对路径 和相对路径问题

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. Tomcat学习笔记【1】--- WEB服务器、JavaEE、Tomcat背景、Tomcat版本

    本文主要讲学习Tomcat需要知道的基础知识. 一 Web服务器 1.1 简介 Web服务器可以解析HTTP协议.当Web服务器接收到一个HTTP请求,会返回一个HTTP响应,例如送回一个HTML页面 ...

  6. Dynamic CRM 2013学习笔记(三十一)自定义用excel批量导入实体数据

    有一个实体的子表数据量太大,于是客户想用execel来导入实体数据.首先想到的是用系统自带的Import Data,客户嫌太麻烦,比如lookup字段要做map等. 下面是具体的实现步骤: 一.定义e ...

  7. node学习笔记(二)(ajax方式向node后台提交数据)

    通过ajax向node后台提交数据过程(附手写前后台代码),并总结post与get的区别 POST 前台代码 //CSS简单给点样式 <style> form{ width: 200px; ...

  8. Maven学习笔记5:Maven属性、profile和资源过滤

    Maven的六类属性 内置属性 主要有两个常用内置属性:${basedir}项目的根目录(包含pom.xml文件的目录),${version}项目版本 POM属性 用户可以使用该属性引用POM文件中对 ...

  9. Shiro学习笔记四(Shiro集成WEB)

    这两天由于家里出了点事情,没有准时的进行学习.今天补上之前的笔记 -----没有学不会的技术,只有不停找借口的人 学习到的知识点: 1.Shiro 集成WEB 2.基于角色的权限控制 3.基于权限的控 ...

随机推荐

  1. Java文件合并

    文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...

  2. UI进阶 数据处理之文件读写

    目录: 1-------沙盒机制(SandBox) 2-------简单对象的读写(I/O)操作 3-------复杂对象的读写(I/O)操作 一.沙盒机制(SandBox) 什么是沙盒:每个iOS应 ...

  3. C#实现异步编程的两个简单机制(异步委托&定时器)及Thread实现多线程

    创建线程的常用方法:异步委托.定时器.Thread类 理解程序.进程.线程三者之间的区别:简而言之,一个程序至少有一个进程,一个进程至少有一个线程进程就是在内存中运行的程序(即运行着的程序):一个进程 ...

  4. Hibernate的BaseDao辅助类

    1.BaseDao接口类,该类封装了一些hibernate操作数据库的一些常用的方法,包括分页查询,使用该类极大的简化了hibernate的开发 BaseDao.java package com.kj ...

  5. Why Does Everyone Else Appear to Be Succeeding?

    Why Does Everyone Else Appear to Be Succeeding?  —Steven G. Krantz When you are a student, it will a ...

  6. 采用Reflector的VS.net插件断点调试无源码DLL 分类:

    .Net的编程利器Reflector可以反编译基于.net开发的应用程序和DLL,其功能强大不用多说.今天想试验一把利用VS.net的插件断点调试外部无源码的DLL(只要是程序集都可以,所以exe也行 ...

  7. UVa 131 - The Psychic Poker Player

    题目:手里有五张牌,桌上有一堆牌(五张).你能够弃掉手中的k张牌,然后从牌堆中取最上面的k个. 比較规则例如以下:(按优先级排序) 1.straight-flush:同花顺.牌面为T(10) - A, ...

  8. lightoj1104(数学概率与期望)

    题意: 增加一年有n天; 那么至少有几个人,能够保证至少两个人同一天生日的概率大于等于0.5; 思路: 转化一下题意; 就是求全部人生日都不同的概率小于等于0.5(那么至少两个人同一天就是大于等于0, ...

  9. iOS开发——新特性OC篇&IOS9 SDK新特性

    iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍 ...

  10. Vs 2008 解决方案的目录结构设置和管理(转)

    http://blog.csdn.net/lcj_cjfykx/article/details/8632459 MS的这个IDE,实在庞杂得恐怖.从大学开始,我就一直用VC的各个版本写程序至今,细细想 ...