一、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()方法同步。

servlet的配置和上下文的更多相关文章

  1. spring容器和上下文的理解

    spring容器和上下文的理解 spring框架现在使用的很多,这说明有其独特之处----依赖注入,很简单的四个字,在我们需要对象的时候,spring就可以给我们提供所需要的对象,对象的创建.销毁.管 ...

  2. NLog路由规则和上下文信息

    NLog配置路由规则和上下文信息 rules: 规则节点 logger:一个路由规则 <rules> <!--<logger name="*" writeT ...

  3. Django 学习第十一天——中间键和上下文处理器

    一.中间键的引入: Django中间件(Middleware)是一个轻量级.底层的"插件"系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. djang ...

  4. 理解JavaScript中的作用域和上下文

    JavaScript对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性. 函数可以接收不同的的上下文和作用域.这些概念为JavaScrip ...

  5. Servlet开发技术,创建,以及Servlet的配置,web.xml的配置

    直接上图,不废话!!! 第一:首先在Eclipse的包资源管理器中,单机鼠标右键,在弹出的快捷键菜单中选择“新建”/Servlet命令,在弹出的对话框中输入新建的Servlet所在的包和类名,然后单击 ...

  6. Servlet的配置

    让 Servlet 能响应用户请求,必须将 Servlet 配置在 Web 应用中. Servlet 3.0 中有两中配置方式:        1. 在 Servlet 类中使用 @WebServle ...

  7. paip.spring3 mvc servlet的配置以及使用最佳实践

    paip.spring3 mvc servlet的配置以及使用最佳实践 1. Web.xml 1 2. springMVC.xml 2 1. mvcAction .mvcAction 2 2. Res ...

  8. JavaWeb核心编程之(三.3)Servlet Init 配置

    Servlet初始化 可以传入一些参数 通过 <init-param>来配置 新建 servletinit项目 新建包 com.xiaoan.test->new Class(Test ...

  9. servlet笔记,配置与 http相关

    tomcat配置环境变量:        JAVA_HOME= 指向你的jdk的主目录(bin目录的上一层) server.xml: <Context path="/myweb2&qu ...

随机推荐

  1. C#窗体截屏,简单例子

    private void button1_Click(object sender, EventArgs e) { Rectangle rect = System.Windows.Forms.Syste ...

  2. BZOJ 3589 动态树(子树操作,链查询)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3589 题意:给出一棵有根树,两种操作:(1)以u为根的子树所有节点权值加上一个数字 ...

  3. UVA 1424 二 Salesmen

    Salesmen Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Pr ...

  4. Nodejs之socket广播

    nodejs发送udp广播还是蛮简单的,我们先写个服务器用于接收广播数据,代码如下: var dgram = require("dgram"); var server = dgra ...

  5. c#扩展方法的理解(一:初识)

    扩展方法是静态方法,是类的一部分,但是实际上没有放在类的源代码中. 扩展方法所在的类也必须被声明为static C#只支持扩展方法,不支持扩展属性.扩展事件等. 扩展方法的第一个参数是要扩展的类型,放 ...

  6. Zookeeper未授权访问

    l 漏洞名称: zookeeper未授权访问 l  漏洞影响版本: zookeeper l  漏洞细节: ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubb ...

  7. CG绘画笔记

    看一些比较好的作品:看作品哪些部分,部件,盔甲比较吸引人,提取一个比较好的点,进行组合创作. 逆光.切光布局构图 创作:故事.情感.经历.朋友.时代 灵感: 电影.音乐 变化(色彩)透视 空气透视视觉 ...

  8. scp指令的学习

    http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html scp是linux中功能最强大的文件传输命令,可以实现从本地到远程以及远程到 ...

  9. 01_Spring概述

    Spring概述 1.什么是Spring ? Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架 * JavaEE 程序在服务器端被分为三层(Web层[表现层].业 ...

  10. javascript权威指南笔记--javascript语言核心(一)

    1.javascript的数据类型分为两类:原始类型和对象类型. 原始类型包括字符串.数字.布尔值.null.undefined. 对象是属性的集合,每个对象都由“名/值”对构成.数组和函数是特殊的对 ...