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

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]获取所有应用初始化参数名称

时间: 2024-09-29 00:44:41

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

nodejs学习笔记_nodejs和PHP在基础架构上的差别--共享状态的并发

绝大多数对于Node.js的讨论都把关注点放在了处理高并发能力上,做开发的时候一定要明确node内部做出的权衡,以及node应用性能好的原因. node 为javascript引入了一个复杂的概念,:共享状态的并发. node採用一个长期执行的进程 而php在apache中会产生多个进程 例如以下图所看到的: 代码验证: PHP: <?php $i = 0; $i++; echo $i nodejs: var http = require('http'); var i=0; http.creat

nodejs学习笔记_nodejs和PHP在基础架构上的区别--共享状态的并发

绝大多数对于Node.js的讨论都把关注点放在了处理高并发能力上,做开发的时候一定要明白node内部做出的权衡,以及node应用性能好的原因. node 为javascript引入了一个复杂的概念,:共享状态的并发. node采用一个长期运行的进程 而php在apache中会产生多个进程 如下图所示: 代码验证: PHP: <?php $i = 0; $i++; echo $i nodejs: var http = require('http'); var i=0; http.createSer

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

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

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

Web集成 shiro配置文件shiroini 界面 webxml最关键 Servlet 測试 基于 Basic 的拦截器身份验证 Web集成 大多数情况.web项目都会集成spring.shiro在普通web项目和spring项目中的配置是不一样的.关于spring-shiro集成,能够參考Shiro学习笔记(3)--授权(Authorization) 中的JSP标签授权部分演示样例代码 本次介绍普通的web项目,不使用不论什么框架. shiro配置文件(shiro.ini) 创建web项目.

《metasploit渗透测试魔鬼训练营》学习笔记第四章—web应用渗透

继续来学习metasploit...记好笔记是很重要的,下面开始正文: 二.WEB应用渗透技术 1.WEB应用渗透基础知识 先介绍WEB应用攻击的主要类型(大致介绍,具体请自行查询) Sql注入攻击:大致分为 普通注入和盲注 跨站脚本(XSS): 分为存储型XSS,反射性XSS以及DOM型XSS 跨站伪造请求(CSRF):以XSS方式注入一段脚本,受害者点击该脚本时,脚本伪造受害者发出请求. 会话认证管理缺陷:验证身份的功能存在缺陷. 安全误配置:开发和管理人员的失误导致存在漏洞. 不安全密码存

【安全牛学习笔记】Kali实战-Web渗透

1.动态web: 可以接受客户端提交的数据,动态交互数据,就会有漏洞的存在 2.web大致框架: (1)浏览器--->web服务器--->应用服务器--->数据库 (2)程序代码 3.http协议基础: 明文通信,没有内建的机密安全机制 https只能提高传输层安全,仍然可以截断信息 使用cookie,身份验证.服务器跟踪客户端根据cookie.客户端拿到的是SessionID,服务器是session. 4.http请求和响应: content-length:(可用于验证是否暴力破解成功

Apache Shiro学习笔记(五)Web集成扩展

鲁春利的工作笔记,好记性不如烂笔头 http://shiro.apache.org/web-features.html 基于Basic的拦截器身份验证 shiro-authc-basic.ini # 基于Basic的拦截器身份验证 [main] # 默认是/login.jsp authc.loginUrl=/login authcBasic.applicationName=请登录 [users] # 用户名=密码,角色 lucl=123456,admin wang=123456 [roles]

Apache Shiro学习笔记(五)Web集成使用JdbcRealm

鲁春利的工作笔记,好记性不如烂笔头 http://shiro.apache.org/web-features.html 前面的示例都是把用户名或密码以及权限信息放在ini文件中,但实际的Web项目开发过程中,实际上一般是user<--->role.role<-->permission进行关联关系的配置,每次登录时加载其拥有的权限或者是每次访问时再判断其权限. jdbc-shiro.ini [main] #默认是/login.jsp authc.loginUrl=/login rol

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(二)-- Web Api Demo

在上一篇里,我已经建立了一个简单的Web-Demo应用程序.这一篇将记录将此Demo程序改造成一个Web Api应用程序. 一.添加ASP.NET Core MVC包 1. 在project.json文件添加Microsoft.AspNetCore.Mvc包 1 { 2 "version": "1.0.0-*", 3 "buildOptions": { 4 "debugType": "portable",