Java Servlet简述


发布于 2016-02-05 / 36 阅读 / 0 评论 /
Servlet是一个接口,全称为javax.servlet.Servlet

1.Servlet概述

Servlet是一个接口,全称为javax.servlet.Servlet,在servlet-api包中。

简单来说,Servlet=Server+Applet。Servlet提供基于“请求-响应”模式的web服务。

Servlet容器是用于管理和装载Servlet,是服务端程序。当客户请求来到是,Servlet容器获取请求,然后调用Servlet,并把Servlet的执行结果返回给客户。常见的Servlet容器有jetty和tomcat。

2.servlet生命周期

Servlet接口中定义了三个和生命周期有关的方法:init、service、destroy。如下图所示:

每个到达Web Server的请求都会转化为ServletRequest,然后由Servlet Container创建对应的线程调用对应Servlet的service方法。JVM启动时,调用init方法进行Servlet的初始化;JVM退出时,调用destroy的方法对Servlet进行销毁。

(1)init():Servlet初始化,将<init-param>参数封装到ServletConfig中,每个Servlet支持设置一个或多个<inti-param>。ServletConfig只属于当前Servlet,不是全局的。ServletContext是全局的,且可动态回收。

(2)service():对请求进行处理。

(3)destroy():Servlet销毁之前,由Servlet容器回调,主要是做一些资源回收和清理的工作。

3.ServletMapping匹配规则

按以下规则,优先级从高到低进行匹配:

(1)精确路径匹配

(2)最长路径匹配

(3)扩展名匹配

(4)默认匹配或者放弃

4.会话数据保存

会话数据保存主要由两种方式:Cookie和Session。

4.1.Cookie

Cookie是保存在客户端(浏览器)的会话数据,通过明文保存,安全性较低,浏览器对单个cookie的大小有限制(4kb)以及对同一个域名下的总cookie数量也有限制(20个)。

一般来说,cookie用于存储少量的不太敏感的数据,在不登录的情况下,完成服务器对客户端的身份识别。

4.1.1.基于Cookie的访问流程

第一次访问工作流程(Cookie未生成)如下:

(1)第一步:浏览器往服务器发送HTTP请求。

(2)第二步:服务器根据需要生成Cookie对象,并把一些数据保存在该对象中。

(3)第三步:服务器把Cookie对象放在HTTP响应头中,并把响应返回给浏览器。

(4)第四步:浏览器接收到响应后,提取该Cookie,保存在浏览器端。

第二次及以后访问(请求中已带Cookie信息)的工作流程:

(1)第一步:浏览器把Cookie对象放在HTTP请求头中,往服务器发送请求。

(2)第二步:服务器提取Cookie,根据数据进行响应。

4.1.2.Cookie有效时间

为了保证安全,Cookie是有有效期的,也就是可用的累计时间,到具体时间失效。默认会话结束Cookie失效;或者通过setMaxAge设置Cookie有效期。

4.1.3.Cookie共享问题

假设在一个tomcat服务器中,部署了多个web项目,那么这些web项目是否能够共享cookie呢?默认情况下,cookie是不能共享的,但是我们可以通过Cookie.setPath(String path)方法来设置cookie的获取范围。如果要共享,则可以把path设置为“/”,这样对于当前tomcat服务器所有的url都可共用一个cookie。

如果在不同的tomcat服务器中,则需要通过setDomain来解决cookie的共享问题。setDomain(String path)中如果设置一级域名相同,那么多个服务器之间cookie可以共享。例如:

setDomain(“.baidu.com”)——那么tieba.baidu.com和news.baidu.com中cookie可以共享。

4.2.Session

Session的特点主要有两点:

(1)数据保存在服务端

(2)安全性相对较好

4.2.1.基于Session的访问流程

第一次访问工作流程如下:

(1)浏览器往服务器发送HTTP请求。

(2)服务端根据请求需求生成Session对象,设置唯一编号,并把需要数据记录到对象中。

(3)服务器把Session的唯一编号(Session Id)放到HTTP响应的Cookie对象中。并把响应返回给浏览器。

(4)浏览器接收到HTTP响应,把Cookie对象保存下来。

第二次及以后访问的工作流程:

(1)浏览器把带有Session Id的Cookie对象放在HTTP请求头中,往服务器发送请求。

(2)服务器收到请求,从Cookie中取出 Session Id,找到Session对象。辨别用户后,就可以对请求进行个性化响应。

4.2.2.Session有效时间

也叫有效期,通过间隔时间设置有效期,以最后一次访问时间为起点计时。

默认30分钟;可通过setMaxInactiveInterval设置有效期;可通过invalidate使session失效。