Servlet入门1
1.1 关于Servlets
Servlets是JAVA 2.0中新增的一个全新功能。JAVA Servlets 是运行在请求/面向请求服务器上的模块,比如一个Java-enabled web 服务器, 和类似这样的延伸场合. 例如, 一个servlet可以从一个HTML订单表中获取数据然后用一些商业上的算法来更新公司相应的订单数据库。
也就是说:servlet能够象CGI脚本一样扩展WEB服务器功能,但是servlet占用很少密集资源,有很多用CGI脚本编制的一些站点由于访问量剧增,性能迅速下降,这是CGI脚本一个缺点。同时由于servlet 是用java编写的,因此是跨平台的。实际servlet是电子商务真正的开始。
Servlet API, 是用来写servlet的, 编写servlet是已没有CGI脚本那样诸如关心一个servlet是这样被装载, servlet运行的服务器环境是什么, 或者用来传输数据的协议是什么等等,这样servlets就可以融合在不同的web服务器中.
Servlet可以相当有效地替代CGI脚本: 它可以方便地产生容易编写而且运行快的动态文本. 可以很方便的调试寻找出程序问题. Servlet程序是用Java Servlet API开发的, a standard Java extension. 但不是Java 核心框架的一部分,可以作为通用的附加产品包被商家购买使用.
1.2 举例
下面是一些servlet应用范围:
用于处理HTML表单通过HTTPS产生POSTed数据, 包括买卖订单或信用卡数据. 因此servlet可以成为订单处理系统的一部分, 和产品存货数据库一道工作,也许可以用在在线支付系统上.
允许人们之间的合作. 一个servlet能并发处理多个请求; 他们可以使用在诸如在线会议这样的同步请求支持系统.
转送请求. Servlet可以转送请求给其他的服务器和servlets. 这就允许在镜象同样内容的几个服务器之间平衡负载. 按照任务类型或组织范围,可以允许被用来在几个服务器中划分逻辑上的服务器.
servlet 编写者们可以定义彼此之间共同工作的激活代理,每个代理者是一个servlet, 而且代理者能够在他们之间传送数据.
1.3 Servlet 结构总视
在具体掌握servlet之前,须对java语言有所了解。下面是基于您了解java基础上的,在Servlet API中最重要的是Servlet interface. 所有的servlets implement(执行)这个interface, 方式多种:或者是直接的,或者通过extending 这个class执行它,如 HttpServlet. 这个Servlet interface 提供安排servlet与客户端联系的方法. Servlet 编写者可以在他们开发 servlet程序时提供更多一些或所有的这样方法.
当一个servlet接收来自客户端的调用请求, 它接收两个对象: 一个是ServletRequest,另外一个是ServletResponse. 这个ServletRequest class 概括从客户端到服务器之间的联系, 而 ServletResponse class 概括从servlet 返回客户端的联系.
ServletRequest interface 可以获取到这样一些信息如由客户端传送的阐述名称,客户端正在使用的协议, 产生请求并且接收请求的服务器远端主机名. 它也提供获取数据流的servlet, ServletInputStream, 这些数据是客户端引用中使用HTTP POST 和 PUT 方法递交的. 一个ServletRequest的子类可以让 servlet获取更多的协议特性数据. 例如: HttpServletRequest 包含获取 HTTP-specific头部信息的方法.
ServletResponse interface 给出相应客户端的servlet方法. 它允许servlet 设置内容长度和回应的mime类型, 并且提供输出流, ServletOutputStream, 通过编写者可以发回相应数据. ServletResponse子类可以给出更多 protocol-specific容量的信息。 例如: HttpServletResponse 包含允许servlet 操作HTTP-specific头部信息的方法.
上面有关classes 和 interfaces描述构成了一个基本的Servlet框架. HTTP servlets有一些附加的可以提供session-tracking capabilities的方法. servlet编写者可以用这些API在有他人操作时维护servlet与客户端之间的状态.
1.4 Servlet Lifecycle
服务器装载运行servlets:接收来自客户端的多个请求并且返回数据给客户端. 然后在删除移开servlets. 这就是servlets lifecycle过程. 下面详细描述:
当一个服务器装载servlet时, 它运行servlet的 init 方法. 这个方法不能反复调用,一旦调用就是再装载servlet. 直到服务器调用 destroy 方法卸载 servlet后才能再调用.
在服务器装载初始化后servlet, servlet就能够处理客户端的请求. 用 service 方法做到这一点. 每个客户端请求有它自己service方法: 这些方法接收客户端请求, 并且发回相应的响应.
Servlets能同时运行多个service. 这是很重要的, 这样, service方法可以按一个thread-safe 样式编写. 如:service方法更新servlet对象中的一个字段field, 这个字段可以同时存取的. 假如某个服务器不能同时并发运行 service方法,也可以用SingleThreadModel interface. 这个 interface 保证不会有两个以上的线程threads并发运行.
Servlets一直运行到他们被服务器卸载。
在servlet的lifecycle中, 编写一个thread-safe编码以卸载servlet是很重要的。