Chap.1 概述
1.1 什么是Servlet?
Servlet是一种基于Java技术的Web组件,由容器管理,产生动态内容。像其他基于Java技术的组件一样,servlet是平台无关的Java类,它被编译成平台中立的字节码,由支持Java技术的Web服务器动态的加载和执行。容器,有时称为Servlet引擎,是提供Servlet功能的Web服务器扩展。Servlet与Web客户端通过由Servlet容器实现的请求/响应模式交互。
1.2 什么是Servlet容器?
Servlet容器是Web服务器或应用程序服务器的一部分,它通过发送请求和响应来提供网络服务,解码基于MIME的请求,编码基于MIME的响应。Servlet容器还通过servlet的生命周期控制和管理servlet。
Servlet容器可以被构建到Web服务器主机,或者通过服务器本地的扩展API作为附加组件被安装到Web服务器中。Servlet容器也可以被构建到或者可能被安装到支持Web的应用程序服务器上。
所有的servlet容器必须支持HTTP作为请求和响应的协议,但是额外的基于请求/响应的协议,例如HTTPS(SSL之上的HTTP)也可以支持。容器必须实现的HTTP规范的版本是HTTP/1.0和HTTP/1.1。因为容器可能有RFC 2616(HTTP 1.1)中描述的缓存机制,它可以在客户端请求被传送到servlet之前修改请求,也可以在响应发送到客户端之前修改响应,或者也可以使用与RFC 2616一致的方式不将请求传送到servlet来响应请求。
Servlet容器可以在servlet执行的环境中设置安全限制。在Java 2平台标准版(Java EE, v.1.3 或者以上) 或Java 2平台企业版(Java EE, v.1.3 或者以上) 环境中,这些限制应该通过使用Java 2平台定义的权限架构来设置。例如,高级的应用程序服务器可能限制线程对象的创建,来保证容器中的其他组件不受到负面影响。
J2SE 1.3是在Java平台下构建servlet容器的最低版本。
1.3 例子
以下是事件的典型序列:
1. 客户端(例如Web浏览器)访问Web服务器,创建HTTP请求。
2. 请求被Web服务器接收,并且传递到servlet容器。Servlet容器可以和Web服务器主机运行在同一个进程中,或者在同一个主机的不同进程中,或者是不同主机的不同进程中来处理请求。
3. Servlet容器根据servlet配置确定调用哪个servlet,同时使用表示请求和响应的对象调用它。
4. Servlet使用request对象查找远程用户是谁,请求中传递了什么HTTP POST参数,以及其他相关数据。Servlet执行程序的逻辑,同时生成数据发送回客户端。它通过响应对象将数据发送回客户端。
5. 一旦servlet完成处理请求,servlet容器保证响应被正确的刷新,同时将控制权交回Web服务器主机。
1.4 比较Servlet和其他技术
在功能上,servlet介于公共网关接口(CGI)和专用服务器扩展,例如Netscape Server API(NSAPI)或Apache Modules之间。
Servlet与其他服务器扩展机制相比,有以下优势:
•通常比CGI脚本更快,因为它使用不同的处理模型。
•使用很多Web服务器支持的标准API。
•有Java编程语言的所有优点,包括易于开发和平台独立。
•可以访问大量的Java平台上有效的API。
1.5 与Java 2平台企业版的关系
Java Servlet API v.2.4是Java 2平台企业版v1.4必须的API。Servlet容器和部署在其中的servlet,为了在J2EE环境中执行,必须遵循在J2EE规范中描述的额外的要求。
1.6 与Java Servlet Version 2.3规范的兼容性
本节描述了采用了本版本规范的兼容性问题。
1.6.1 HttpSessionListener.sessionDestroyed
在以前版本的规范中,这个方法定义为:通知session无效。
在2.4版本中,这个方法变成:通知session将要变成无效。
这样在session无效之前进行通知。如果代码假定以前的状态,那么必须修改成新的状态。
1.6.2 ServletRequest 方法 getRemotePort, getLocalName,getLocalAddr, getLocaPort
在本版本的规范中,以下的方法被加入到ServletRequest接口中。
public int getRemotePort()
返回发送请求的客户端或者最后代理的IP源端口。
public java.lang.String getLocalName()
返回接收请求的IP接口的主机名称。
public java.lang.String getLocalAddr()
返回接收请求的接口的IP地址。
public int getLocalPort()
返回接收请求的接口的IP端口号。
注意,这个附加变化变化导致一些情况下代码不兼容,例如,当开发者实现ServletRequest 接口时。在这种情况下,需要保证所有的新方法都被实现。
分享到:
相关推荐
人工智能-深度学习-tensorflow
人工智能毕业设计&课程设计
基于ssm的中小型企业财务管理录系统.zip
这个资源是一个基于Spring Boot和MySQL的洗衣店订单管理系统的完整源码。它包括了所有的源代码文件,以及一个详细的文档,可以帮助你理解和运行这个系统。这个系统的主要功能包括:用户注册和登录,下单,查看订单,修改订单,删除订单等。用户可以在系统中选择洗衣服务,然后提交订单。系统会自动计算订单的总价,并将其显示在用户的订单列表中。用户还可以查看自己的历史订单,以及每个订单的详细信息。此外,系统还包括了一个管理员模块。管理员可以查看所有的订单,以及对订单进行管理。他们可以修改订单的状态,例如将订单标记为已完成,或者取消订单。这个系统使用了Spring Boot框架,这是一个非常流行的Java开发框架,它可以帮助你快速地开发和部署应用程序。同时,系统也使用了MySQL数据库,这是一个广泛使用的关系型数据库,它可以存储大量的数据,并提供高效的查询功能。总的来说,这个资源是一个非常完整的洗衣店订单管理系统的源码,它可以帮助你理解如何使用Spring Boot和MySQL来开发一个实际的应用程序。无论你是正在学习Java编程,还是已经有一定的开发经验,都可以从这个资源中学到很多有用的知识和技能。
W9825G6KH-6I SDRAM,256Mb(32MB,16Mbx16),3.3v 动态随机存取存储器
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
人工智能毕业设计&课程设计
asp代码ASP基于web的学校新闻发布系统开发(论文+源代码+开题报告+文献综述+外文翻译)本资源系百度网盘分享地址
三菱PLC例程源码PLC 气压程式本资源系百度网盘分享地址
三菱PLC例程源码PLC通过RS485 对FR系列变频的控制本资源系百度网盘分享地址
基于ssm的学生档案管理系统.zip
这是一个基于Java语言开发的elfinder 2.x版本Web文件管理器后端设计,包含63个文件,其中主要文件类型包括49个Java源文件、3个XML文件、2个PNG图片文件、2个Markdown文档、1个gitattributes文件、1个gitignore文件、1个LICENSE文件、1个Properties文件、1个types文件和1个未知类型的文件。该项目提供了丰富的文件管理功能,包括自定义文件视图和自定义文件操作,为用户提供了高效、便捷的文件管理体验。
使用DS Client在PPT中动态展示分子三维结构
基于ssm+vue的汽车站车辆运管系统.zip
算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
DS在生物药物领域的解决方案
三菱PLC例程源码SBR废水处理本资源系百度网盘分享地址
人工智能毕业设计&课程设计
人工智能-深度学习-tensorflow
基于ssm电子病历系统.zip