客户端与服务器端之间的通信过程:
客户端将请求发送到web服务器中,web服务器将客户请求发给servlet引擎来,servlet引擎调用相应的servlet来处理,servlet将处理结果返回给servlet引擎,最后servlet引擎将结果发送至客户端。
可见:servlet引擎是web服务器中的一个应用程序,客户端(浏览器)是通过servlet引擎来实现与servlet的通信的,servlet和servlet引擎之间采用servlet api来进行通信。
http协议的get和post请求,以及servelet中doget和dopost方法:
http://www.kesion.com/zzcd/html/355.html
http请求报文的格式:
HTTP请求包括三部分:请求行(Request Line),头部(Headers)和数据体(Body)。
其中,请求行由请求方法(method),请求网址Request-URI和协议 (Protocol)构成,而请求头包括多个属性,数据体则可以被认为是附加在请求之后的文本或二进制文件。
post和get的区别:
1. 数据存放位置:
get 请求:是将数据放在请求的url之后,是一个以"?"打头的查询字符串,比如常见的test.jsp?name=aaa&age=10这种格式。
post请求表示客户端请求的时候还要提交数据,比如提交form表单,要提交的数据会放到请求报文的body部分。
2. 安全性:
get请求:由于数据存放在url中,参数是可以直观看到的,安全性低。(例如:登陆的用户名和密码可不能用get)。
post请求:安全性更高
3. 传输数据量
get请求:由于http协议的限制,这样放在url之后的get请求的数据是受大小限制的,最大长度不超过1024字节。
post请求:是将数据放到了http的Content中,这就无大小的限制了,而且传输的数据不能直接被看到(登陆的用户名和密码一般采用post请求),大量的数据或是文件上传,都只能用post来传输。
servlet中的doget和dopost方法:
web服务器处理这些请求的时候,如果客户端提交的是get请求,则响应doget方法,如果客户端提交的是post请求,则响应dopost方法。这是web服务器在响应doservice方法时,由doservice方法分发下来的(详情请查看http协议和servlet生命周期方面的文章)
Servlet的线程安全问题:
如何开发线程安全的Servlet ?
1,变量的线程安全:这里的变量指字段和共享数据(如表单参数值)。
a,将参数变量本地化。多线程并不共享局部变量.所以我们要尽可能的在servlet中使用局部变量。
例如:String user = "";
user = request.getParameter("user");
b,使用同步块Synchronized,防止可能异步调用的代码块。这意味着线程需要排队处理。
在使用同板块的时候要尽可能的缩小同步代码的范围,尽量用同步代码块,不要用同步方法。特别是不要直接在sevice方法和响应方法上使用同步,这样会严重影响性能。
2, 属性的线程安全:ServletContext,HttpSession,ServletRequest对象中属性
a, ServletContext:(线程是不安全的)
ServletContext是可以多线程同时读/写属性的,线程是不安全的。要对属性的读写进行同步处理或者进行深度
Clone()。所以在Servlet上下文中尽可能少量保存会被修改(写)的数据,可以采取其他方式在多个Servlet中共
享,比方我们可以使用单例模式来处理共享数据。
b, HttpSession:(线程是不安全的)
HttpSession对象在用户会话期间存在,只能在处理属于同一个Session的请求的线程中被访问,因此Session对
象的属性访问理论上是线程安全的。
当用户打开多个同属于一个进程的浏览器窗口,在这些窗口的访问属于同一个Session,会出现多次请求,需要多个
工作线程来处理请求,可能造成同时多线程读写属性。这时我们需要对属性的读写进行同步处理:使用同步块
Synchronized和使用读/写器来解决。
c, ServletRequest:(线程是安全的)
对于每一个请求,由一个工作线程来执行,都会创建有一个新的ServletRequest对象,所以ServletRequest对象
只能在一个线程中被访问。ServletRequest是线程安全的。
注意:ServletRequest对象在service方法的范围内是有效的,不要试图在service方法结束后仍然保存请求对象的
引用。
3,使用同步的集合类:
使用Vector代替ArrayList,使用Hashtable代替HashMap。
HttpServlet API:
Servlet生命周期:
参考:张孝祥的书 p169-170
servlet引擎按照下面的过程来调用servlet程序:
1. 接收到访问某个servlet的http请求后,servlet引擎首先检查是否已经装载并创建该servlet实例对象。如果已经装载并创建了该实例对象,servlet引擎直接执行第5步;否则执行第2步。
2. 装载并创建了该实例对象。
3. 调用servlet实例对象的init()方法,执行servlet的初始化工作。
5. 创建一个用于封装http请求的HttpRequest对象和一个封装http相应信息的HttpResponse对象,然后调用servlet的service()方法(并将请求和相应对象传入方法)
6. 在一个web应用被停止或重新启动web服务器前,servlet引擎将卸载其中运行的servlet。servlet在被卸载前servlet引擎调用其destroy()方法执行一些清理工作,释放该servlet占用的资源。(servlet引擎卸载servlet后,servlet对象占用的内存空间将被java的垃圾回收器回收)
http://book.51cto.com/art/200808/84955.htm
http://wenku.baidu.com/view/f8690337ee06eff9aef807aa.html

注:sevlet的生命周期中,servlet的初始化和销毁只会发生一次,因此init()和destroy()方法只能被servlet容器调用一次,儿service()方法取决与servlet被客户端访问的次数。
分享到:
相关推荐
【Servlet原理详解】 Servlet是Java Web技术的核心组件,它提供了服务器端处理HTTP请求的能力。Servlet容器,如Tomcat,是Servlet运行的环境,它管理和调度Servlet的生命周期,使得开发者能够专注于业务逻辑,而...
### servlet原理的概述 在深入探讨servlet的原理之前,我们先来定义一下servlet是什么。Servlet是一种服务器端的Java应用程序,它运行在容器(如Tomcat)内,用于处理客户端请求并生成动态响应。Servlet可以被视为...
【Tomcat5&Servlet 原理】 Tomcat 是一个开源的、基于Java的Web应用服务器,主要用于执行Servlet和JSP。Tomcat5是其第五个主要版本,它遵循Servlet和JavaServer Pages(JSP)规范,为开发和部署Java Web应用程序...
本章节将深入探讨Servlet的原理和实践,帮助你理解如何在实际项目中运用这项技术。 1. **C/S与B/S架构** C/S(Client/Server)架构是一种传统的两层架构,客户端直接与服务器通信。而B/S(Browser/Server)架构,...
java视屏\5.WEB SERVER\6.Servlet原理.mp4
Servlet运行原理图,描述servlet运行的步骤方向和servlet运行过程
### Servlet 运行原理及生命周期详解 #### 一、Servlet简介 Servlet 是 Java Web 开发中的一个重要组成部分,它主要用于处理客户端发送至服务器端的 HTTP 请求,并返回相应的响应结果。Servlet 技术允许开发者以 ...
### Servlet工作原理详解 #### 一、Servlet简介与工作流程 Servlet是一种服务器端的Java应用程序,主要用于接收客户端发送的HTTP请求,并返回响应结果。Servlet在Java Web开发中扮演着核心角色,它负责处理用户...
在深入理解Servlet的原理之前,我们先明确一下Servlet的基本概念。Servlet是一个Java类,遵循Servlet API规范,由Web服务器加载并执行,用于扩展服务器的功能,特别是处理客户端的HTTP请求。在本篇文章中,我们将...
JSP (JavaServer Pages) 和 Servlet 是 Java EE (Java Platform, Enterprise Edition) 中用于开发动态Web应用的两种技术。它们可以用于创建动态网站内容,将业务逻辑和HTML页面分离,便于维护和开发。JSP是一种基于...
详细讲解servlet的机制及使用方法,其中有非常容易理解的实例和图解,推荐。
Servlet 工作原理解析
SERVLET 基本原理 SERVLET 基本原理是指 SERVLET 的装载、初始化、服务和销毁等过程。SERVLET 是一种小型的 Java 程序,可以在 Web 服务器中运行,提供动态网页服务。 SERVLET 生命周期是指 SERVLET 从创建到销毁...
2. Servlet原理:Servlet是Java编程语言中处理HTTP请求的服务器端组件。它们接收来自客户端的请求,处理数据,然后返回响应。在图片上传功能中,Servlet将处理文件的接收、验证和存储。 3. 图片上传流程: - 用户...
### Servlet容器工作原理 #### 一、概述 Servlet容器,如Tomcat,是Java Web应用的基础组成部分之一。本文旨在深入探讨Tomcat中的Servlet容器工作原理,重点解释Servlet容器如何加载和管理Servlet,以及如何处理...