一、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配置对象、上下文对象、多线程问题的更多相关文章

  1. Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)

    一.Servlet简介  1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...

  2. 重温Servlet学习笔记--servletContext对象

    一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...

  3. Context上下文对象(抄书的)

    Servlet上下文 ServletContext 上下文接口    ServletContext接口    每一个应用都有唯一的一个上下文对象,即为ServletContext对象    Servl ...

  4. [07] ServletContext上下文对象

    1.上下文的概念 我们在说到Servlet的继承关系时,提到自定义Servlet实际上间接实现了Servlet和ServletConfig两个接口,其中ServletConfig接口中定义了一个方法叫 ...

  5. jsp九个内置对象、四个域对象及Servlet的三大域对象

    一,什么是内置对象? 在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创 ...

  6. JSP九大内置对象和四大作用域和Servlet的三大作用域对象

    一.JSP九大内置对象:内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用 内置对象特点: 由JSP规范提供,不用编写者实例化. 通过Web容器实现和管理 所有 ...

  7. ServletContext (上下文对象)

    一.什么是ServletContext ServletContext代表是一个web应用的上下文对象(web应用对象) 里面封装的都是web应用信息 一个ServletContext对应一个应用 二. ...

  8. 上下文对象-请求对象-响应对象(ServletContext - response - request)

    目录 上下文对象-请求对象-响应对象 ServletContext response request 上下文对象-请求对象-响应对象 ServletContext 什么是ServletContext ...

  9. servlet中的ServletContext对象

    ServletContext官方叫Servlet上下文.服务器会为每一个Web应用创建一个ServletContext对象.这个对象全局唯一,而且Web应用 中的所有Servlet都共享这个对象(在整 ...

随机推荐

  1. 基于visual Studio2013解决C语言竞赛题之0201温度转换

    题目 解决代码及点评 #include <stdio.h> #include <stdlib.h> void main() { float f; float c; float ...

  2. 解题报告 HDU1087 Super Jumping! Jumping! Jumping!

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  3. SQLite取值时的下标与创建表中字段的关系

  4. 同时支持多家云平台的管理工具HybridFox

    偶然间发现了这个firefox上的开元插件 号称支持AWS,Eucalyptus,OpenStack,OpenNebula 目的是通过一个入口实现异种云平台的管理 主要功能包括: Manage Ima ...

  5. 【IE】浏览器模式与文档模式 及其开发中处理方式

    原文:http://blog.csdn.net/neo_liu0000/article/details/7589731 什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和 ...

  6. 使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置

    参考博文: MySQL-(Master-Slave)配置  本人按照博友北在北方的配置已成功  我使用的是 mysql5.6.27版本. 使用Atlas实现MySQL读写分离 数据切分——Atlas读 ...

  7. ZOJ 3204 Connect them MST-Kruscal

    这道题目麻烦在输出的时候需要按照字典序输出,不过写了 Compare 函数还是比较简单的 因为是裸的 Kruscal ,所以就直接上代码了- Source Code : //#pragma comme ...

  8. USACO Subset 整数划分01背包

    又是去理解了一次01背包. 这道题目的意思就是给你一个N (N < 40)表示有一个集合{1,2,3,... n} 你要将它划分成相等的两个子集合,求有几种划分方式 如果N是奇数,那么显然不能由 ...

  9. perl 安装 ZooKeeper模块

    1072 ./configure --libdir=/usr/lib 1073 make 1074 make install 1075 cpan ZooKeeper [root@wx03 c]# pe ...

  10. HDU1316(求区间斐波那契数的个数)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1316 题意:给两个数a和b,其中它们可能很大,最大到10^100,然后求去区间[a,b]内有多少个fib数 ...