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 接口时。在这种情况下,需要保证所有的新方法都被实现。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/