Java Servlet 总结

Servlet是一个接口,接口中有5个方法:init、service、destroy、getServletInfo、getServletConfig。对于Servlet来说,生命周期就是init,service,destroy三步,其中service可能会调用多次。

GenericServlet实现了Servlet接口,它只是通用的Servlet,和协议无关。

HttpServlet继承了GernericServlet,增加了doGet、doPost等方法,需要开发者去复写,默认动作是报错。在service方法中还检测了LastModify,看情况返回304 Not Modified。

我们日常生活中所说的Servlet一般是指HttpServlet。因此Servlet完整的生命周期是init、service、doGet/doPost、destroy。init方法是在Servlet被实例化之后调用的,service方法是在请求到达之后调用的。

Servlet和CGI的区别。Servlet一个实例可以服务多个请求,每个请求使用一个单独的线程,一般Web容器中会使用线程池技术,所以每个请求的额外开销非常少。而CGI每个请求需要启动一个单独的进程。进程的开销比线程要大很多,因此Servlet性能更加优越。

Servlet不是线程安全的,它没有多线程保护机制。在Servlet中,每个请求都会有一个专门的线程进行处理。如果多个请求同时到来,那么同一个Servlet对象中的service方法会被这些线程同时调用。为了保护多线程的安全,可以让Servlet类实现SingleThreadModel接口。这种方法一次只能处理一个请求,因此性能很差。不过也有Web容器会建立对象池,也就是每个线程一个Servlet对象,这样性能稍微好一点。如果需要更好的性能,还需要手动加入代码同步块。如果允许的话,使用ThreadLocal来定义变量。Java面试题经常会问到“Servlet是否线程安全?”其实这种描述容易给新手造成误解,“什么?大名鼎鼎的Servlet居然也有安全问题?”个人认为更加明确一点的描述应该是“你在实现Servlet中的service方法时,要不要考虑多线程的问题?为什么?”

Java Servlet 总结,布布扣,bubuko.com

时间: 2024-10-13 15:32:23

Java Servlet 总结的相关文章

JavaWeb之Java Servlet完全教程(转)

Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servlet必须部署在Java servlet容器才能使用.虽然很多开发者都使用Java Server Pages(JSP)和Java Server Faces(JSF)等Servlet框架,但是这些技术都要在幕后通过Servlet容器把页面编译为Java Servlet.也就是说,了解Java Servle

Java Servlet系列之Servlet生命周期

Servlet生命周期定义了一个Servlet如何被加载.初始化,以及它怎样接收请求.响应请求,提供服务.在讨论Servlet生命周期之前,先让我们来看一下这几个方法: 1. init()方法 在Servlet的生命周期中,仅执行一次init()方法,它是在服务器装入Servlet时执行的,可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet.无论有多少客户机访问Servlet,都不会重复执行init(): 2. service()方法 它是Servlet的核心,每当

Mac OS中Java Servlet与Http通信

Java中一个Servlet其实就是一个类,用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序.Servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序.Java Servlet技术为这些应用定义了一个特定于HTTP的servlet类,基类是HttpServlet.Servlet本身是有生命周期的,有兴趣的可以搜索其他文章,实现Java Servlet与Http通信,本文中需要下JDK(http://www.oracle.com/tech

java servlet调用带有多个返回结果集的存储过程

一.mysql存储过程 这里我先说下我这个功能实现的逻辑及途中遇到的一些问题.这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要返回更多结果集也是一样的,如果需要判断,就继续增加存储过程参数,如果不需要判断就直接在存储过程中,增加查询的SQL语句即可).实现这个功能还有更简单的方法,可以写SQL关联语句查询出两张表的结果,返回一个组合的结果集.我这里当然是为了实现这个效果,所以把它的实现复杂化了.继续说下我今天在mysql上

关于Java Servlet编译的问题

    Servlet(Server Applet),全称Java Servlet,未有中文译文.是用java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者. Servlet运行于支持Java的应用服务器中.从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协

Java Servlet解析

Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servlet必须部署在Java servlet容器才能使用.虽然很多开发者都使用Java Server Pages(JSP)和Java Server Faces(JSF)等Servlet框架,但是这些技术都要在幕后通过Servlet容器把页面编译为Java Servlet.也就是说,了解Java Servle

Java Servlet完全教程

Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servlet必须部署在Java servlet容器才能使用.虽然很多开发者都使用Java Server Pages(JSP)和Java Server Faces(JSF)等Servlet框架,但是这些技术都要在幕后通过Servlet容器把页面编译为Java Servlet.也就是说,了解Java Servle

J2EE 13规范(3)-Java Servlet

Servlet简介: 一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过"请求-响应"编程模型来访问的应用程序.虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序.Java Servlet技术为这些应用程序定义了一个特定于HTTP的 servlet类. javax.servlet和javax.servlet.http包为编写servlet提供了接口和类.所有的servlet都必须实现Servlet接口,

Java Servlet工作原理问答

导读 本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化.共享变量和多线程处理. 问题:Servlet是如何工作的?Servlet 如何实例化.共享变量.并进行多线程处理? 假设我有一个运行了大量 Servlet 的 web 服务器.通过 Servlet 之间传输信息得到 Servlet 上下文,并设置 session 变量. 现在,如果有两名或更多使用者向这个服务发送请求,接下来 session 变量会发生什么变化?究竟是所有用户都是用共同的变量