Servlet名称的由来:
Servlet由字面上可以看出是指运行在服务器端的小程序,大家应该曾经听说过Java Applet这个东东,它是指运行在客户端的Java小程序.
在这之前处理动态网页一般的时候都是使用CGI(公共网关接口)来处理,但是CGI处理请求的时候是这样的,每得到一个请求,它就会创建一个新的进程来进行处理,这样对计算机资源的消耗可能是有点大的.
而Servlet的处理过程就完全不一样了, 当Servlet每接受到一个请求, 是使用一个线程来进行处理的,而Servlet本身始终只保持一个实例.所以我们可以下一个这样的结论,Servlet是单实例多线程的运行方式,每个请求在一个独立的线程中运行,而提供服务的Servlet实例只有一个。
拿Tomcat来说吧,在配置文件中你可以配置最大线程数和最小线程数,线程池在Web容器初始化的时候,初始了最小线程数个工作线程,当一个请求过来时,需要判断是静态资源还是映射到某个servlet,如果是servlet的话就去找,如果当前的servlet没有被初始化,初始化时会调用Servlet的init方法.那么会创建一个这个Servlet的实例,下次有线程需要用到这个Servlet的时候直接使用就可以了. 使用的时候会调用Servlet的service方法.
由上面这样的工作方式,你也许会发现,Servlet对象里的对象成员是线程不安全的,比如说某个线程修改了Servlet对象中的一个属性,那么另一个线程读取的时候是读取的修改之后的值.所以我们一般情况下是不会在Servlet中定义成员变量的.
为此我做了一个小小的实验,本实验使用的构建工具为maven,如果你想要运行或部署此demo相当的简单,只需安装配置好maven后,然后在项目的根目录下 输入 mvn jetty:run 即可,mvn会帮你自动安装jetty和相关插件的.
package com.luke;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet
{
private int openCount=0;
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException
{
doPost(httpServletRequest, httpServletResponse);
}
protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException
{
int countLocal = 0;
openCount++;
countLocal++;
PrintWriter printWriter = httpServletResponse.getWriter();
printWriter.println("openCount = " + openCount);
printWriter.println(" localCount = " + countLocal);
}
}
每一个新的请求都会将这个Servlet的成员变量+1,所以openCount一直在变,本例只是想说明Servlet是线程不安全的.
分享到:
相关推荐
geoserver跨域所需jar包,下载自https://mvnrepository.com,拷贝到geoserver的bin目录下修改xml即可,参考https://www.cnblogs.com/wanfeng/p/9288578.html
本文将深入探讨`gwt-integration.zip`中的`gwt-integration-master`项目以及与`sip-servlets-spec-3.0.534.zip`相关的SIP Servlets规范,探讨如何将两者结合,以提高Web应用的开发效率和功能。 首先,`gwt-...
Java Head First Servlets and JSP All you need to start as Java Web Component Developer! Begginers Guide
标题 "sip-servlets-core-api-3.0.540.zip" 提供的信息表明,这是一个与SIP(Session Initiation Protocol)相关的软件库,核心API版本为3.0.540。SIP是一种应用层协议,常用于多媒体通信系统,如VoIP(Voice over ...
Head First Servlets&JSP;-第2版-高清扫描版-带详细书签 高清扫描版,书签比较详细,和目录一样
《Servlets与JSP核心编程》的高级版,"More-Servlets-and-JSP",是一本深入探讨Java Web开发的书籍,主要聚焦在Servlets和JSP(JavaServer Pages)技术上。Servlets是Java平台上的服务器端编程模型,而JSP则是用于...
《Core-Servlets-and-JSP》是一本深入探讨Servlet和JSP核心技术的书籍,主要针对Web开发中的核心组件进行详细讲解。Servlet和JSP是Java Web开发中的两大基石,它们为构建动态、交互式的Web应用提供了强大的支持。...
"servlets-examples.rar_servlets-examples"压缩包包含了一系列Servlet的示例代码,这些例子对于学习和理解Servlet的工作原理以及如何在实际项目中应用Servlet至关重要。 Servlet的核心概念主要包括以下几点: 1. ...
"servlets-examples"是一个专门针对Servlet的示例集合,它包含了一系列的实例,旨在帮助开发者更好地理解和掌握Servlet技术。 在这个压缩包文件中,你将找到多种Servlet相关的应用场景,这些示例涵盖了Servlet的...
Java Servlets和JSP(JavaServer Pages)是Java Web开发中的核心技术,用于构建动态网站和Web应用程序。在Java世界中,它们提供了服务器端编程的能力,允许开发者处理HTTP请求,生成响应,并与数据库或其他后端系统...
首先,我们来看"dropwizard-servlets-0.7.0-rc2.zip",这是Dropwizard框架的一个组成部分。Dropwizard是一个用于构建高性能、生产就绪的Java web服务的工具集。它由Coda Hale、Yammer团队创建,集成了许多优秀的开源...
Murach's Java Servlets and JSP, 3rd Very good introduction on servlet and jsp.
《Head First Servlets and JSP》是学习Java服务器端编程的经典教材,中文版的第二版为读者提供了深入浅出的学习路径,特别适合初学者和有经验的开发者进行自我提升。这本书详细介绍了Servlets和JSP(JavaServer ...
本教程的"java-servlets-jsp-tutorial-en.pdf"将详细讲解Servlets、JSP和Structs的使用方法,包括基础概念、配置、开发实践和示例代码,帮助读者掌握这些核心技术。通过学习,开发者将有能力构建复杂的企业级Web应用...
head first servlets&jsp;(第二版)并没有给你一大堆需要死记硬背的条条框框;它能将知识直接送入你的大脑。你会通过不寻常的方式同servlet和jsp打交道,可以学得更深入、更快捷。读完全书后,你会看到一个全新的...
### Head First Servlets and JSP 2nd Edition #### 标题解读: - **Head First Servlets and JSP 2nd Edition**:本书是Head First系列中的一个版本,专注于Servlets和JavaServer Pages (JSP)技术的学习。作为第二...
《Head First Servlets and JSP》是一本针对初学者深入浅出讲解Servlets和JSP技术的书籍。这本书以其独特的教学方式,通过丰富的图形、幽默的插图和非线性的学习路径,帮助读者轻松理解复杂的Web开发概念。以下是该...
Java Servlets 和 Java Server Pages(JSP)是Java Web开发中的核心技术,用于构建动态网站和Web应用程序。本书“Java Servlets and Java Server Pages JSP”深入探讨了这两个关键概念,旨在提供详尽的内容来帮助...