Servlet上下文

  

一、Servlet上下文的基本概念

Servlet上下文又叫做:ServletContext。

当WEB服务器启动时,会为每一个WEB应用程序(webapps下的每个目录就是一个应用程序)创建一块共享的存储区域。

ServletContext也叫做“公共区域”,也就是同一个WEB应用程序中,所有的Servlet和JSP都可以共享同一个区域。

ServletContext在WEB服务器启动时创建,服务器关闭时销毁。

//通过当前Servlet类的对象,得到与它关联的ServletContext对象,也就是上下文
ServletContext application = this.getServletContext();

//HttpSession(私有区域) 与 ServletContext(公共区域) 的区别是什么?
1、作用范围不同:HttpSession是针对每一个客户端浏览器单独有一个。
         ServletContext是针对每一个WEB应用程序有一个
2、存活时间不同:HttpSession第一次访问服务器,服务器端调用request.getSession()时创建,访问间隔时间超过30分钟就销毁。
         ServletContext服务器启动时创建,服务器停止时销毁。

【ServletContext的5大作用】

1.获取web的上下文路径

String getContextPath();

2.获取全局的参数

String getInitParameter(String name);

Enumeration getInitParameterNames();

3.和域对象相关的

void setAttribute(String name,Onject object);

Object getAttribute(String name);

void removeAttribute(String name);

域对象(域对象就是在不同资源之前来共享数据,保存数据,获取数据)

ServletContext是我们学习的第一个域对象(Servlet共有三个域对象ServletContext、HttpServletRequest、HttpSession)

4. 请求转发

RequestDispatcher getRequestDispatcher(String path);

5.读取web项目的资源文件

 二、Servlet会话

1、理解会话的作用

会话——浏览器请求一次服务器,服务器接收请求,处理之后,给出响应,这就是一次会话。

因为HTTP协议是一种“无状态”协议(断开连接式协议),也就是服务器给客户端浏览器响应之后,就会断开网络连接。下次客户端浏览器请求服务器时会再建立网络连接。实际上HTTP协议是为了保证服务器的性能。而这种情况下,默认服务器是不会记录客户端浏览器的信息的。

会话跟踪——在多次浏览器跟服务器的会话过程中,服务器必须要记录客户端浏览器的一些信息,这个叫会话跟踪。

2、会话跟踪原理

试想一下储户和银行的交互过程:

浏览器跟服务器交互的过程与其类似

三、HttpSession的使用

对于HttpSession来说,每个独立的浏览器窗口就是一个不同的客户端,会为它们分配不同的会话ID。

/*
得到会话对象
request.getSession() 方法有两重含义
1、如果浏览器是第一次请求服务器,则请求中没有会话ID,此时会分配ID,创建空间
2、如果浏览器不是第一次请求服务器,则请求中存在会话ID,此时会返回原来的HttpSession对象
*/
HttpSession session = request.getSession();

HttpSession何时被创建,何时被销毁呢?

创建:第一次请求服务器,服务器端的Servlet调用了 request.getSession()方法时被创建。

销毁:如果浏览器间隔时间超过30分钟没有访问服务器,则服务器会销毁对应的HttpSession对象。(默认30分钟是可以配置的。)

<session-config>
<session-timeout>30</session-timeout>
</session-config>

void setAttribute(String key, Object value);    存入键值对
Object getAttribute(String key);                根据键取出对应的值
HttpSession又被称为“私有作用域”,或者也叫做“私有区域“

使用HttpSession实现保存用户信息及登录验证!

URL重写

我们前面如果要给Servlet传递数据,都是通过表单提交。

除了这种方式之外,还有一种常见的形式,就是:URL重写

URL重写的办法就是在URL地址之后传递请求参数:

格式:URL?参数名1=值1&参数名2=值2……

四、总结

1、 HttpServlet是所有我们自己编写的Servlet的父类。我们要通常要重写它的 doGet() 或 doPostt()方法。

Servlet的生命周期是怎样的?

首次访问:实例化——>初始化 init() ——> 服务 service() 根据请求是GET还是POST——> 调用 doGet() 或 doPost()

后续访问:服务 service() 根据请求是GET还是POST ——> 调用 doGet() 或doPost()

在服务器上,Servlet始终只有一个对象!

服务器关闭时:销毁 destroy()

2、  HttpServletRequest是请求对象,服务器会在有客户端请求的时候创建这个对象来保存请求的数据。

常用方法:

void setCharacterEncoding(编码方式)        设置请求内容的编码方式

String getParameter(参数名称)             得到请求参数(表单提交,URL重写)的值

HttpSession getSession()                    得到一个私有区域。

首次调用:请求中没有SessionID,会创建一个新对象

后续调用:请求中有SessionID,  会得到原来的对象

3、  HttpServletResponse是响应对象,Servlet处理之后的结果会放到里面,由服务器发送给客户端浏览器。

常用方法:

void setCharacterEncoding(编码方式)         设置响应内容的编码方式

PrintWriter getWritter()                             得到一个用来向客户端浏览器发送HTML内容的输出流对象

void sendRedirect(URL地址)                     发送重定向(外部跳转)

4、  HttpSession 私有区域。

何时创建?

客户端浏览器第一次请求服务器,服务器端的Servlet调用了request.getSession()时创建。

何时销毁?

访问间隔时间超过30分钟(可以配置)就销毁。

SessionID是存储在客户端浏览器的内存中,而HttpSession对象存储在服务器端。每次客户端浏览器请求服务器时,会自动将SessionID发送给服务器。

常用方法:

void setAttribute(键,值)

Object getAttribute(键)

boolean isNew()

5、  ServletContext 公共区域

何时创建?

服务器启动时会为每一个WEB应用程序创建一个ServletContext。

何时销毁?

服务器停止时销毁。

时间: 2024-08-08 21:50:58

Servlet上下文的相关文章

Servlet 2.4 规范之第四篇:Servlet上下文

SRV.3.1    ServletContext接口说明 ServletContext接口定义了运行servlet的web应用中和servlet相关的视图信息.容器提供者负责提供ServletContext的一套具体实现.通过ServletContext对象,servlet能记录事件.获得资源引用,以及设置和保存当前context上其他servlet的一些属性信息. ServletContext以web应用的某一路径为根节点,例如,servlet上下文能写成http://www.mycorp.

Servlet 2.4 规范之第四篇:Servlet上下文最注坐卒揍琢

http://www.ebay.com/cln/1vz_jbnv/2015-01-30/166653198017 http://www.ebay.com/cln/ntx_ntnd/2015-01-30/166918113011 http://www.ebay.com/cln/pt3_hzzh/2015-01-30/166764520010 http://www.ebay.com/cln/r5d_thbr/2015-01-30/166738785014 http://www.ebay.com/cl

过滤器、监听器、上下文、servlet线程安全问题

就像名字写那样,过滤器可以过滤请求,比如对一些评论进行过滤.又不改原有代码的基础上可以加上一个过滤器,或者是登陆验证.集中在一个过滤器中处理.写一个类实现接口 Filter 之后一定要在配置文件中配置!!!监听器可以监听,上下文的概念. 过滤器: 什么是过滤器: servlet规范当中定义的一种特殊的组件,用来拦截servlet容器的调用过程. 会先调过过滤器的方法,过滤器决定是否向后继续调用就是调用servlet容器 容器收到请求之后 通常情况下会调用servlet的service方法来处理请

servlet起步

2.什么是Servlet Servlet是sun公司制定的用来扩展web服务器功能的组件规范,通俗理解为遵循Servlet规范开发的实现了某个功能的Java组件.该组件没有 main 方法,不能独立地运行,只能在Servlet容器中运行,容器管理其从创建到销毁的整个过程. 早期web服务器(Apache)不能处理动态页面,为了扩展该功能,web服务器将请求发送给帮助程序(tomcat)处理.tomcat就是Servlet容器, WEB-INF目录下的web.xml部署描述符文件是web应用的配置

javaWeb基础核心之一Servlet

既然是做JAVA开发的,先从一些基本的整理起来,算是知识回顾,加深记忆. 第一篇想到那理到哪,可能有点乱,不是太会排版,见谅,估计可能也就我自己看的懂. servlet在百度百科上的定义是这样的: Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况

浏览器访问Servlet

浏览器访问Servlet1.指定一个Servlet路径(                     在web.xml :              <servlet>              <servlet-name>随意命名</servlet-name>              <servlet-class>包名.类名</servlet-class>              <init-param>              

Servlet(二)

Servlet工作流程:1.Servlet装入和初始化 2.调用Servlet 3.处理请求 4.多个请求的处理 5.退出 destory() Servlet编程接口: 1.HttpServletRequest接口代表发送到HttpServlet的请求.这个接口封装了从客户机到服务器的通信.它可以包含客户机环境的信息,任何从客户机发送到Servlet的数据. 2.HttpServletResponse接口代表从HttpServlet返回客户机的响应.它通常是根据请求和Servlet访问的其他来源

Servlet简介

前言 1.servlet简介 a.b/s  架构 browser/server,就是客户端采用浏览器,服务器端采用web server.浏览器和   服务器端之间采用http协议进行通讯.相对于c/s架构的优势: 1.不需要关系通讯的问题,c/s架构需要自己写代码来定义通讯协议,难度比较大. 2.浏览器不需要单独安装,可维护性更好,c/s架构需要下载客户端. 服务器端负责通讯,我们可以使用servlet/jsp技术来显示业务逻辑,处理业务逻辑. b.组件和容器 组件:符合规范的可以单独部署的程序

Servlet监听器(Listener)

以下内容是翻译自http://www.journaldev.com/1945/servletcontextlistener-servlet-listener-example: 为什么使用Servlet Listener? 我们知道使用ServletContext,我们可以创建一个具有所有其他servlet可以访问的应用范围的属性,但是我们可以在部署描述符(web.xml)中将ServletContext init参数初始化为String.如果我们的应用程序是面向数据库的,并且我们要在数据库连接的