Servlet配置对象、上下文对象、多线程问题
一、Servlet配置对象(ServletConfig):Servlet初始化时,容器调用其init(ServletConfig)方法,传递该对象。
1、获得对象方法:
(1)、直接使用getServletConfig()方法:
ServletConfig config = getServletConfig();
(2)、覆盖Servlet的init()方法,把容器创建的ServletConfig对象保存到一个成员变量中:
public void init(ServletConfig config){
super.init(config);
this.config = config;
}
2、ServletConfig的4个常用方法:
(1)、public String getInitParameter(String name):返回指定名称的初始化参数值;
(2)、public Enumeration getInitParameterNames():返回一个包含所有初始化参数名的Enumeration对象;
(3)、public String getServletName():返回在DD文件中<servlet-name>元素指定的Servlet名称;
(4)、public ServletContext getServletContext():返回该Servlet所在的上下文对象;
3、从ServletConfig对象中使用初始化参数初始化一个Servlet的过程可以实现Servlet的重用性
二、Servlet上下文对象(ServletContext):每个Web应用程序在被启动时都会创建一个唯一的上下文对象,Servlet可通过其获得Web应用程序的初始化参数或Servlet容器的版本等信息,也可被Servlet用来与其他Servlet共享数据。
1、获得ServletContext应用:
(1)、直接调用getServletContext()方法
ServletContext context = getServletContext();
(2)、使用ServletConfig应用,再调用它的getServletContext()方法
ServletContext context = getServletConfig.getServletContext();
2、获得应用程序的初始化参数:
(1)、public String getInitParameter(String name):返回指定参数名的字符串参数值,没有则返回null;
(2)、public Enumeration getInitParameterNames():返回一个包含多有初始化参数名的Enumeration对象;
3、通过ServletContext对象获得资源
(1)、public URl getResource(String path):返回由给定路径的资源的URL对象,以“/”开头,为相对路径,相对于Web应用程序的文档根目录;
(2)、public InputStream getResourceAsStream(String path):从资源上获得一个InputStream对象,等价于getResource(path).oprenStream();
(3)、public String getRealPath(String path):返回给定的虚拟路径的真实路径;
4、登陆日志:使用log()方法可以将指定的消息写到服务器的日志文件中
(1)、public void log(String msg):参数msg为写入日志文件消息
(2)、public void log(String msg,Throwable throwable):将msg指定的消息和异常的栈跟踪信息写入日志文件
5、使用RequestDispatcher实现请求转发
(1)、RequestDispatcher getRequestDiapatcher(String path):必须以"/"开头相对于应用程序根目录,而ServletRequest可以传递一个相对路径
(2)、RequestDipatcher getNamedDiapatcher(String name):参数name为一个命名的Servlet对象
6、使用ServletContext对象存储数据
(1)、public void serAttribute(String name,Object object):将给定名称的属性值对象绑定到上下文对象上;
(2)、public Object getAttribute(String name):返回绑定到上下文对象的给定名称的属性值;
(3)、public Enumeration getAttributeNames():返回绑定到上下文对象上的所有属性名的Enumeration对象;
(4)、public void removeAttribute(String name):删除绑定到上下文对象指定名称的属性;
ServletRequest共享的对象仅在请求的生存周期中可以被访问;
HttpSession共享的对象仅在会话的生存周期中可以被访问;
ServletContext共享的对象在整个Web应用程序启动的生存周期中可以被访问;
7、检索Servlet容器的信息
(1)、public String getServletInfo():返回Servlet所运行容器的名称和版本;
(2)、public int getMajorVersion():返回容器所支持的Servlet API的主版本号;
(3)、public int getMinorVersion():返回容器所支持的Servlet API的次版本号;
(4)、public String getServletContext():返回ServletContext对应的web应用程序名称<display-name>元素定义的名称;
三、Servlet的多线程问题
1、当涉及到Servlet需要共享资源是,需保证Servlet是线程安全的
2、注意事项:
(1)、用方法的局部变量保持请求中的专有数据;
(2)、只用Servlet的成员变量来存放那些不会改变的数据;
(3)、对可能被请求修改的成员变量同步(用Synchronized关键字修饰);
(4)、如果Servlet访问外部资源,那么需要同步访问这些资源;
3、实现SingleThreadModel接口的Servlet在被多个客户请求时一个时刻只能有一个线程运行,不推荐使用。
4、如果必须在servlet使用同步代码,应尽量在最小的范围上(代码块)进行同步,同步代码越少,Servlet执行才能越好,避免对doGet()或doPost()方法同步。
出处:http://blog.csdn.net/cl05300629/article/details/9344261 作者:伫望碧落
Servlet配置对象、上下文对象、多线程问题的更多相关文章
- Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)
一.Servlet简介 1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...
- 重温Servlet学习笔记--servletContext对象
一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...
- Context上下文对象(抄书的)
Servlet上下文 ServletContext 上下文接口 ServletContext接口 每一个应用都有唯一的一个上下文对象,即为ServletContext对象 Servl ...
- [07] ServletContext上下文对象
1.上下文的概念 我们在说到Servlet的继承关系时,提到自定义Servlet实际上间接实现了Servlet和ServletConfig两个接口,其中ServletConfig接口中定义了一个方法叫 ...
- jsp九个内置对象、四个域对象及Servlet的三大域对象
一,什么是内置对象? 在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创 ...
- JSP九大内置对象和四大作用域和Servlet的三大作用域对象
一.JSP九大内置对象:内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用 内置对象特点: 由JSP规范提供,不用编写者实例化. 通过Web容器实现和管理 所有 ...
- ServletContext (上下文对象)
一.什么是ServletContext ServletContext代表是一个web应用的上下文对象(web应用对象) 里面封装的都是web应用信息 一个ServletContext对应一个应用 二. ...
- 上下文对象-请求对象-响应对象(ServletContext - response - request)
目录 上下文对象-请求对象-响应对象 ServletContext response request 上下文对象-请求对象-响应对象 ServletContext 什么是ServletContext ...
- servlet中的ServletContext对象
ServletContext官方叫Servlet上下文.服务器会为每一个Web应用创建一个ServletContext对象.这个对象全局唯一,而且Web应用 中的所有Servlet都共享这个对象(在整 ...
随机推荐
- JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理
文章目录 Git管理准备工作 Git工具上传代码 发布代码装程序 mywebsql管理 京东云引擎小结 JAE京东云引擎是京东推出的支持Java.Ruby.Python.PHP.Node.js多语 ...
- iOS KVO & KVC
键值观察:值更改时通知观察者 键值观察(Key-value observing,或简称 KVO)允许对象观察另一个对象的属性.该属性值改变时,会通知观察对象.它了解新值以及旧值:如果观察的属性为对多的 ...
- 兼容性问题( css)
记录平时遇见的兼容性问题,有更好的解决办法希望各位提出,会持续更新 提出时间 问题描述 解决方案 2014/7/15 table下面使用img或者其他元素例如embed会产生,对应的空隙,假如使用文字 ...
- 我的Python成长之路---第四天---Python基础(14)---2016年1月23日(寒风刺骨)
一.生成器和迭代器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. ...
- Struts1的处理流程
本文从收到一个请求开始讲述,忽略之前的filter等工作. 处理工作的主要承担者为RequestProcessor 1.处理请求的url. RequestProcessor.processPath(r ...
- WEB开发:如何用js来模拟服务器的ajax响应,不依赖服务器来编写前端代码
一.问题的提出 目前web前端开发,主流的思路是: 1)编写静态的html文件(不使用模板技术,与服务器无关) 2)页面通过ajax与服务器交互,进行数据的传输,数据格式为json格式 这里存在一个问 ...
- 转:CSS选择器笔记
作者: 阮一峰 日期: 2009年3月12日 去年我学jQuery的时候,曾经做过一点选择器(selector)的笔记. 这几天拿出来看了一下,发现很多都忘记了.所以,我决定把它们贴在这里,方便以后查 ...
- 用 Python 测试框架简化测试
用 Python 测试框架简化测试 摘要:本文将向您介绍了三种流行 Python 测试框架(zope.testing,py.test,nose)的基本特性,并讨论新一代的测试风格. 最近出现了行业级的 ...
- k路归并(败者树,记录败者)
败者树在外排序中用到,每加入一个数字时,调整树需要o(lgk),比较快.外排序过程主要分为两个阶段:(1)初始化各归并段写入硬盘,初识化的方法,可利用内排序方法还可以一种叫置换选择排序的方 ...
- Linux看门狗脚本 1.4
近期项目的看门狗经历了三个版本号. 第一个版本号: 用ps -ef,假设程序挂了就启动 第二个版本号: 程序因为执行时会出现不再监听7901port,所以不能简单推断机器是不是挂了,而是推断此port ...