Java Servlet概论
Servlet与其他普通的server扩展机制有以下进步:
因为它采用了不同的进程处理模式,所以它比CGI更快。
它使用了许多Web服务器都支持的标准的API。
它继承了Java的所有优势,包括易升级以及平台无关性。
它可以调用Java所提供的大量的API的功能模块。
JavaTM servlets是一个不受平台约束的Java小程序,它可以被用来通过多种方法扩充一个Web服务器的功能。你可以把Servlet理解成Server上的applets,它被编译成字节码,这样它就可以被动态地载入并用效地扩展主机的处理能力。
Servlet与applets不同的地方是,它不运行在Web浏览器或其他图形化的用户界面上。Servlet通过servlet引擎运行在Web服务器中,以执行请求和响应,请求、响应的典型范例是HTTP协议。
一个客户端程序,可以是一个Web浏览器,或者是非其他的可以连接上Internet的程序,它会访问Web服务器并发出请求。这个请求被运行在Web
服务器上的Servlet引擎处理,并返回响应到Servlet。Servlet通过HTTP将这个响应转发到客户端。
在功能上,Servlet与CGI、NSAPI有点类似,但是,与他们不同的是:Servlet具有平台无关性。
Servlet的生命周期
一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除。Servlet的生命周期被javax.servlet.Servlet这个接口所定义。
所有的Java Servlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行。Servlet引擎是Web 服务器按照Java Servlet API定制的扩展。Servlet引擎提供网络服务,能够理解MIME请求,并提供一个运行Servlet的容器。
javax.servlet.Servlet接口定义了在Servlet的生命周期中特定时间以及特定顺序被调用的方法。
Servlet的解析和载入
Servlet引擎解析并载入一个Servlet,这个过程可以发生在引擎启动时,需要一个Servlet去响应请求时,以及在此之间的任何时候。
Servlet引擎利用Java类载入工具载入一个Servlet,Servlet引擎可以从一个本地的文件系统、一个远程的文件系统以及网络载入Servlet。
Servlet的初始化
Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。
在初始化过程中,javax.servlet.Servlet接口的init()方法提供了Servlet的初始化信息。这样,Servlet可以对自己进行配置。
init()方法获得了一个Servlet配置对象(ServletConfig)。这个对象在Servlet引擎中执行,并允许Servlet通过它获处相关参数。这个对象使得Servlet能够访问ServletContext对象。
Servlet处理请求
Servlet被初始化之后,它已经可以处理来自客户端的请求,每一个来自客户端的请求都被描述成一个ServletRequest对象,Servlet的响应被描述成一个ServletResponse对象。
当客户端发出请求时,Servlet引擎传递给Servlet一个ServletRequest对象和一个ServletResponse对象,这两个对象作为参数传递到service()方法中。
Servlet也可以执行ServletRequest接口和ServletResponse接口。ServletRequest接口使得Servlet有权使用客户端发出的请求。Servlet可以通过ServletInputStream对象读取请求信息。
ServletResponse接口允许Servlet建立响应头和状态代码。通过执行这个接口,Servlet有权使用ServletOutputStream类来向客户端返回数据。
多线程和映射
在多线程的环境下,Servlet必须能处理许多同时发生的请求。例外的情况是这个Servlet执行了SingleThreadModel接口,如果是那样的话,Servlet只能同时处理一个请求。
Servlet依照Servlet引擎的映射来响应客户端的请求。一个映射对包括一个Servlet实例以及一个Servlet返回数据的URL,例如:HelloServlet with /hello/index.html。
然而,一个映射可能是由一个URL和许多Servlet实例组成,例如:一个分布式的Servlet引擎可能运行在不止一个的服务器中,这样的话,每一
个服务器中都可能有一个Servlet实例,以平衡进程的载入。作为一个Servlet的开发者,你不能假定一个Servlet只有一个实例。
Servlet的卸载
Servlet引擎并不必需保证一个Servlet在任何时候或在服务开启的任何时候都被载入。Servlet引擎可以自由的在任何时候使用或清除一个Servlet。因此,我们不能依赖一个类或实例来存储重要的信息。
当Servlet引擎决定卸载一个Servlet时(例如,如果这个引擎被关闭或者需要让资源),这个引擎必须允许Servlet释放正在使用的资源并存储有关资料。为了完成以上工作,引擎会调用Servlet的destroy()方法。
在卸载一个Servlet之前,Servlet引擎必须等待所有的service()方法完成或超时结束(Servlet引擎会对超时作出定义)。当一
个Servlet被卸载时,引擎将不能给Servlet发送任何请求。引擎必须释放Servlet并完成无用存储单元的收集
Servlet映射技术
作为一个Servlet引擎的开发者,你必须对于如何映射客户端的请求到Servlet有大量的适应性。这份说明文档不规定映射如何发生。但是,你必须能够自由地运用下面的所有技术:
映射一个Servlet到一个URL
例如,你可以指定一个特殊的Servlet它仅被来自/feedback/index.html的请求调用。
映射一个Servlet到以一个指定的目录名开始的所有URL
例如,你可以映射一个Servlet到/catalog,这样来自
/catalog/、
/catalog/garden和/catalog/housewares/index.html的请求都会被映射到这个Servlet。但是来自
/catalogtwo 或/catalog.html的请求没被映射。
映射一个Servlet到所有以一个特定的字段结尾的所有URL
例如,你可以映射一个来自于所有以in.thtml结尾的请求到一个特定的Servlet。
映射一个Servlet到一个特殊的URL /servlet/servlet_name。
例如,如果你建立了一个名叫listattributes的Servlet,你可以通过使用/servlet/listattributes来访问这个Servlet。
通过类名调用Servlet
例如,如果Servlet引擎接收了来自/servlet/com.foo.servlet.MailServlet的请求,Servlet引擎会载入这个com.foo.servlet.MailServlet类,建立实例,并通过这个Servlet来处理请求。
Servlet环境
ServletContext接口定义了一个Servlet环境对象,这个对象定义了一个在
Servlet引擎上的Servlet的视图。通过使用这个对象,Servlet可以记录事件、得到资源并得到来自Servlet引擎的类(例如
RequestDispatcher对象)。一个Servlet只能运行在一个Servlet环境中,但是不同的Servlet可以在Servlet引擎
上有不同的视图。
如果Servlet引擎支持虚拟主机,每个虚拟主机有一个Servlet环境。一个Servlet环境不能在虚拟主机之间共享。
Servlet引擎能够允许一个Servlet环境有它自己的活动范围。
例如,一个Servlet环境是属于bank应用的,它将被映射到/bank目录下。在这种情况下,一个对getContext方法的调用会返回/bank的Servlet环境。
HTTP会话
HTTP是一个没有状态的协议。要建立一个有效的Web服务应用,你必须能够识别一个连续的来自远端的客户机的唯一的请求。随着时间的过去,发展了许多会话跟踪的技术,但是使用起来都比较麻烦。
Java Servlet API提供了一个简单的接口,通过这个接口,Servlet引擎可以有效地跟踪用户的会话。
建立Session
因为HTTP是一个请求-响应协议,一个会话在客户机加入之前会被认为是一个新的会话。加入的意思是返回会话跟踪信息到服务器中,指出会话已被建立。在客户端加入之前,我们不能判断下一个客户端请求是目前会话的一部分。
在下面的情况下,Session会被认为是新的Session。
客户端的Session在此之前还不知道
客户端选择不加入Session,例如,如果客户端拒绝接收来自服务器的cookie
作为一个Servlet的开发者,你必须决定你的Web应用是否处理客户机不加入或不能加入Session。服务器会在Web服务器或Servlet规
定的时间内维持一个Session对象。当Session终止时,服务器会释放Session对象以及所有绑定在Session上的对象。
绑定对象到Session中
如果有助于你处理应用的数据需求,你也许需要绑定对象到Session中,你可以通过一个唯一的名字绑定任何的对象到Session中,这时,你需要使用HttpSession对象。任何绑定到Session上的对象都可以被处理同一会话的Servlet调用。
有些对象可能需要你知道什么时候会被放置到Session中或从Session中移开。你可以通过使用
HttpSessionBindingListener接口获得这些信息。当你的应用存储数据到Session中,或从Session中清除数据,
Servlet都会通过HttpSessionBindingListener检杳什么类被绑定或被取消绑定。这个接口的方法会通报被绑定或被取消绑定的
对象。
分享到:
相关推荐
JavaServlet概论 Servlet与其他普通的server扩展机制有以下进步: 因为它采用了不同的进程处理模式,所以它比CGI更快。 它使用了许多Web服务器都支持的标准的API。 它继承了Java的所有优势,包括易升级以及平台无关...
1. **Servlet概论**:Servlet是Java API的一部分,它允许开发者创建能够动态响应客户端请求的服务器端程序。Servlet生命周期包括加载、初始化、服务、销毁等阶段。通过实现Servlet接口或继承HttpServlet类,开发者...
该开发程序员毕业于新乡学院,主修计算机科学与技术,学习了 Java 开发与编程、C++、数据结构与算法、数据库系统概论、PHP 网站开发、Linux 基础与编程、HTML 网站开发、操作系统和计算机网络等课程。 工作经验 该...
### Java语言概论与基础知识详解 #### Java语言的鲁棒性与执行模式 Java作为一种广泛使用的编程语言,其鲁棒性体现在多个方面。鲁棒性指的是程序能够处理各种异常情况而不崩溃的能力。Java通过以下特性确保了其...
SSH框架概论是Java EE平台中的一种轻量级企业应用平台,主要使用Struts 2+Spring+Hibernate进行整合开发。该课程的目标是让学生能够熟练运用当前流行的java开源框架:Struts、Hibernate以及Spring来构建灵活、易于...
第1章 毕业设计概论 1.1 毕业设计的目的和要求 1.2 毕业设计的选题 1.3 毕业设计的步骤 1.4 计算机专业毕业设计的特殊性 1.5 本章小结 第2章 使用java进行毕业设计 2.1 java体系结构 2.2 java...
第9讲“Java Web编程”则进一步扩展了Java的应用范围,介绍了Servlet、JSP(Java Server Pages)等Web开发技术,为构建动态网站和Web应用打下基础。 最后的"JavaCourse"可能是整个课程的总结或索引,提供了整个学习...
开发Java应用时,常常使用Tomcat作为Web服务器,它轻量级、稳定且易于配置,能够支持Java Servlet和JavaServer Pages(JSP)。JSP是Java Web开发中用于创建动态网页的技术,它结合HTML和Java代码,使用户界面设计和...
- 内容概述:这两本书分别从不同的角度讲解了Java Server Pages (JSP) 和 Servlet 技术的应用与实践。 - 关键知识点: - JSP页面的基本构成。 - Servlet的工作原理及生命周期。 - 如何通过JSP和Servlet实现动态...
##### 2.1 数据库概论 - **数据库的概念与分类:** 了解关系型数据库的基本原理。 - **SQL语言基础:** 掌握SQL语言的基本语法,包括数据定义语言(DDL)、数据操纵语言(DML)等。 ##### 2.2 数据库安装 - **MySQL...
**JSF概论** JavaServer Faces(JSF)是Java平台上的一个用于构建Web应用程序的MVC(Model-View-Controller)框架。JSF旨在简化开发过程,提供组件化、事件驱动的用户界面,并与Java EE环境无缝集成。在本文中,...
该系统采用 Myeclipse 9 作为开发平台,Tomcat 6.0 作为 Web 服务器,JDK1.5 作为 Java 开发包,jsp、servlet 和 javabean 框架技术作为主要开发技术,Sqlserver 作为数据库服务器。 系统的主要功能包括: 1. 构件...
3.9JAVAEE_原生servlet_ORACLE教务信息管理系统(源码+sql+文档+视频).zip 建筑学: 必修课: 画法几何、建筑制图、阴影透视、工程测量、建筑力学(一)、 建筑设计基础(一)、 建筑设计基础(二)、建筑...
实验八的主题是“通过JDBC方式访问数据库”,这是数据库概论课程中的一项重要实践内容。JDBC(Java Database Connectivity)是Java语言中用于与各种数据库交互的一种标准接口,由Sun Microsystems开发并定义,现已...
9. **Java Web开发**:孙鑫的《Java Web开发详解》、林上杰和林康司的《JSP2.0技术手册》以及许川佩、张民和张婧的《基于Ajax的J2EE安全应用框架》涵盖了Web开发的各个方面,包括Servlet、JSP、AJAX等。 10. **J2EE...
JSP使得内容生成和显示分离,强调可重用组件,简化页面开发,支持多种应用模型,如Servlet和JavaBean,同时与XML技术融合,为未来扩展提供了可能。 - **Java语言**:Java在系统中主要用于数据库连接程序,实现与...
该专业课程包括 Java 开发与编程、C++、数据结构与算法、数据库系统概论、PHP 网站开发、Linux 基础与编程、HTML 网站开发、操作系统和计算机网络等。 其次,从专业技能中,我们可以看到该工程师熟练掌握了 JAVAEE ...
- **Servlet**:作为Java Web应用的核心,Servlet处理HTTP请求,实现服务器端的功能。 - **JDBC**:Java数据库连接,用于数据库操作,支持SQL语句执行,实现数据的存取。 通过以上分析,基于MVC设计模式的Java ...