学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> JSP >> JAVA Servlets简介


JAVA Servlets简介


 ervlets是JAVA 2.0中新增的一个全新功能, Servlets是一种采用JAVA技术来实现CGI功能的一种技术。Servlet和CGI一样都是运行在WEB服务器上,用来生成WEB页面。

一、JAVA Servlets为什么优于传统的CGI
  JAVA Servlets比传统的CGI或其它CGI类似替代技术来说,效率更高,使用更方便,功能更强大,更小巧也更便宜:

1)效率,传统CGI对每一个HTTP请求都要产生一个新的进程。如果某个CGI程序是一个执行非常快的操作,打开进程的时间也许占用了大部分执行时间。而对JAVA Servlets来说,在JAVA 虚拟机上,每一个请求由一个‘小’JAVA线程(thread)响应,而不是一个`大`操作系统进程。类似地,传统CGI如果对同一个CGI程序有N个同时请求,这个CGI程序的代码将被导入内存N次。JAVA Servlets 产生N个线程,但只有一个JAVA Servlets CLASS的copy。同时JAVA Servlets比CGI有更多的优化选择,象预先计算,打开数据库连接等。

2)方便,JAVA Servlets能自动的粘贴和解码HTML表单数据,读和设置HTTP头,处理COOKIES,跟踪SESSIONS,等其它大量功能。

3)强大的功能,JAVA Servlets可以很容易的实现对CGI来说是不可能或很困难的事务。JAVA Servlets能直接和服务器进行通讯而CGI是不能的。

4)JAVA Servlets之间能共享数据,很容易实现诸如数据库连接池。它能方便的实现管理从REQUEST到REQUEST请求,简化SESSION和获取前一页面。而CGI之间通讯差,由于每个CGI程序的调用都开始一个新的进程,调用间通讯通常要通过文件进行,因而相当缓慢。同一台服务器上的不同CGI程序之间的通讯也相当麻烦。

5)调用时间:CGI程序是作为单独过程运行的,通常调用时间较长,这个间接成本在每次调用的时候都要发生。在使用解释器的时候调用时间会更长。而内存中的servlet可以非常迅速地加载。

6)安全:有些CGI版本有明显的安全弱点。即使是使用最新的标准和PERL等语言,系统也没有基本安全框架,而要靠一组事实上的规则。而java定义有完整的安全机制,包括ssl,ca认证,安全政策等规范。

7)小巧,JAVA Servlets使用JAVA编写,遵循标准API。它能直接或借助插件在几乎所有WEB服务器上运行。

8)价格低,显然,有很多都是FREE。

Servlet的一些应用范围:

1) 用于处理HTML表单:通过HTTP产生POSTed数据,包括买卖订单或信用卡数据。因此 vlet可以成为订单处理系统的一部分,和产品存货数据库一道工作,也许可以用在在线支付系统上。

2)允许人们之间的合作:一个servlet能并发处理多个请求;他们可以使用在诸如在线会议这样的同步请求支持系统。

3) 转送请求:Servlet可以转送请求给其他的服务器和servlets。这就允许在镜象同样内容的几个服务器之间平衡负载。按照任务类型或组织范围,可以允许被用来在几个服务器中划分逻辑上的服务器。

4) servlet 编写者们可以定义彼此之间共同工作的激活代理,每个代理者是一个servlet,而且代理者能够在他们之间传送数据。

二、Servlet的结构

  在具体掌握servlet之前,须对java语言有所了解。下面是基于您了解java基础上的,在Servlet API中最重要的是Servlet interface. 所有的servlets implement(执行)这个interface, 方式多种:或者是直接的,或者通过扩展类(class)执行它,如 HttpServlet。 这个Servlet interface 提供安排servlet与客户端联系的方法. Servlet 编写者可以在他们开发 servlet程序时提供更多一些或所有的这样方法.

  当一个servlet接收来自客户端的调用请求, 它接收两个对象: 一个是ServletRequest,另外一个是ServletResponse. 这个ServletRequest类概括从客户端到服务器之间的联系, 而 ServletResponse类概括从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头部信息的方法.

  上面有关类和 interfaces描述构成了一个基本的Servlet框架. HTTP servlets有一些附加的可以提供session-tracking capabilities的方法. servlet编写者可以用这些API在有他人操作时维护servlet与客户端之间的状态.

三、Servlet的接口

  Servlet 从javax包的httpservlet类扩展,在HttpServlet中加入了一些附加的方法,这些方法可以被协助处理HTTP 基本请求的HttpServlet类中的方法service自动地调用。这些方法有:

  • doGet 用来处理HTTP的GET请求。
      这个GET操作仅仅允许客户从HTTP server上"取得"(GET)资源。重载此方法的用户自动允许支持方法HEAD。这个GET操作被认为是安全的,没有任何的负面影响,对用户来说是很可靠的。比如,大多数的正规查询都没有副作用。打算改变存储数据的请求必须用其他的HTTP方法。这要求方法也必须是个安全的操作。方法doGet的缺省执行将返回一个HTTP的BAD_REQUEST错误。
    方法doGet的格式:
    protected void doGet(HttpServletResquest request,
    HttpServletResponse response)
    throws ServletException,
    IOException;

  • doPost 用来处理HTTP的POST请求。
      这个POST操作包含了在必须通过此servlet执行的请求中的数据。由于它不能立即取得资源,故对于那些涉及到安全性的用户来说,通过POST请求操作会有一些副作用。
      方法doPost的缺省执行将返回一个HTTP的BAD_REQUEST错误。当编写servlet时,为了支持POST操作必须在子类HttpServlet中实现(implement)此方法。
    此方法的格式:
    protected void doPost(HttpServletResquest request,
    HttpServletResponse response)
    throws ServletException,
    IOException;

  • doPut用来处理HTTP的PUT请求。
      此PUT操作模拟通过FTP发送一个文件。对于那些涉及到安全性的用户来说,通过PUT请求操作也会有一些副作用。
    此方法的格式:
    protected void doPut(HttpServletResquest request,
    HttpServletResponse response)
    throws ServletException,
    IOException;

  • doDelete用来处理HTTP的DELETE请求。
      此操作允许客户端请求一个从server移出的URL。对于那些涉及到安全性的用户来说,通过DELETE请求操作会有一些副作用。
    方法doDelete的缺省执行将返回一个HTTP的BAD_REQUEST错误。当编写servlet时,为了支持DELETE操作,必须在子类HttpServlet中实现(implement)此方法。
    此方法的格式:
    protected void doDelete (HttpServletResquest request,
    HttpServletResponse response)
    throws ServletException,IOException;

  • doHead 用来处理HTTP的HEAD请求。
      缺省地,它会在无条件的GET方法执行时期中运行,但是不返回任何数据到客户端。只返回包含内容信息的长度的header。由于用到GET操作,此方法应该是很安全的(没有副作用)也是可重复使用的。此方法的缺省实现(implement)自动地处理了HTTPDE的HEAD操作并且不需要通过一个子类实现(implement)。
    此方法的格式:
    protected void doHead (HttpServletResquest request,
    HttpServletResponse response)
    throws ServletException,
    IOException;

  • doOptions用来处理HTTP的OPTIONS请求。
      此操作自动地决定支持什么HTTP方法。比如说,如果一个servlet的作者创建HttpServlet的子类并重载方法doGet,然后方法doOptions会返回下面的header:
    Allow:GET,HEAD,TRACE,OPTIONS
    一般不需要重载方法doOptions。
    此方法的格式:
    protected void doOptions (HttpServletResquest request, HttpServletResponse response)
    throws ServletException,
    IOException;

  • doTrace用来处理HTTP的TRACE请求。
    此方法的缺省执行产生一个包含所有在trace请求中的herder的信息的应答(response)。
    在开发servlet时,多数情况下需要重载此方法。
    此方法的格式:
    protected void doTrace (HttpServletResquest request,
    HttpServletResponse response)
    throws ServletException,
    IOException;

在开发以HTTP为基础的servlet中,Servlet开发者关心方法doGet和方法doPost即可。

四、Servlet的生命周期

  如果你写过java的小应用程序(Apple),那Servlet对你来说就不会太难,SZ更为简单因为Servlet不用考虑图形界面的应用,而与小应用程序一样,Servlet与有一个生命周期。Servlet的生命周期是当服务器装载运行servlets:接收来自客户端的多个请求并且返回数据给客户端. 然后在删除移开servlets.下面详细描述如下:

1)初始化时期
  当一个服务器装载servlet时, 它运行servlet的 init() 方法.

public void init(ServletConfig config) throws ServletException
{ super.init(); //一些初始化的操作,如数据库的连接 }

  需要记住的是一定要在init()结束时调用super.init().init()方法不能反复调用,一旦调用就是重装载servlet. 直到服务器调用destroy方法卸载servlet后才能再调用.

2)Servlet的执行时期

  在服务器装载初始化servlet后, servlet就能够处理客户端的请求. 用 service 方法做到这一点. 每个客户端请求有它自己service方法: 这些方法接收客户端请求, 并且发回相应的响应.Servlets能同时运行多个service. 这是很重要的, 这样, service方法可以按一个thread-safe 样式编写. 如:service方法更新servlet对象中的一个字段field, 这个字段可以同时存取的. 假如某个服务器不能同时并发运行 service方法,也可以用SingleThreadModel interface. 这个 interface 保证不会有两个以上的线程threads并发运行. 在Servlet执行期间其最多的应用是处理客户端的请求并产生一个网页。其代码如下:

PrintWriter out = response.getWriter();
out.println("$#@60;html$#@62;");
out.println("$#@60;head$#@62;$#@60;title$#@62;"# Servlet $#@60;/title$#@62;$#@60;/head$#@62;");
out.println("$#@60;body$#@62;");
out.println("Hello World");
out.println("$#@60;/body$#@62;$#@60;/html$#@62;");
out.close();

3)Servlet结束时期

  Servlets一直运行到他们被服务器卸载。在结束的时需地收回在init()方法中使用的资源,在Servlet中是通过destory()方法来实现的。
public void destroy()
{
//回收在init()中启用的资源,如关闭数据库的连接等。
}

五、Servlet应用实例

  现在我们来一个简单的例子来说明Servlet的应用,其完全成的功能是读取表单的内容并输出到浏览器上。

test.html test.java
$#@60;html$#@62;
$#@60;title$#@62;表单应用例子$#@60;/title$#@62;
$#@60;meta http-equiv="Content-Type" content="text/html;charset=gb2312"$#@62;
$#@60;/head$#@62;
$#@60;body bgcolor="#FFFFFF"$#@62;
$#@60;form method="post" action="\servlet\test"$#@62;
$#@60;p$#@62;姓名:
$#@60;input type="text" name="name"$#@62;
$#@60;/p$#@62;
$#@60;p$#@62; Email:
$#@60;input type="text" name="email"$#@62;
$#@60;/p$#@62;
$#@60;p$#@62;意见:
$#@60;textarea name="yj"$#@62;$#@60;/textarea$#@62;
$#@60;/p$#@62;
$#@60;p$#@62;
$#@60;input type="submit" name="Submit" value="发送"$#@62;
$#@60;/p$#@62;
$#@60;/form$#@62;
$#@60;/body$#@62;
$#@60;/html$#@62;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;


public class test extends HttpServlet {
private DBConnectionManager connMgr;
//Initialize global variables
public void init(ServletConfig config) throws ServletException {
super.init(config);

}

//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
String name=request.getParameter("name");
String mail=request.getParameter("mail");
ServletOutputStream out=response.getOutputStream ();
out.println("$#@60;html$#@62;");
out.println("$#@60;head$#@62;$#@60;title$#@62;servlet表单应用例子$#@60;/title$#@62;$#@60;/head$#@62;");
out.println("$#@60;body$#@62;");
out.println(name);
out.println("$#@60;br$#@62;");
out.println(mail);
out.println("$#@60;/body$#@62;$#@60;/html$#@62;");
out.close();
}

//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}

public void destroy() {

}

}

  把test.html放入web服务器的根目录下,而test.java 这个servlet编译成class后一般都放在web服务器的class目录下,在resin中是放在doc\WEB-INF\classes目录下,而resin能在运行时自动编译,报所以直接报test.java 放在doc\WEB-INF\classes目录下即可。



技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

好!!!!!...
游客 发表于2008-4-16 21:04:08
对"JAVA Servlets简介"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 JAVA Servlets简介 相关内容
Google搜索中 JAVA Servlets简介 相关内容
雅虎中 JAVA Servlets简介 相关内容
Sogou搜索中 JAVA Servlets简介 相关内容

相关软件 最新回复帖子:

·JAVA Servlets简介
·用Freehand轻松实现位图矢量化
·用Java构造自己的媒体播放器
·一张图透彻讲解Photoshop蒙版
·另类方法 教你四种神奇电脑开机方法
·高性能 高弹性JSP和Servlet性能优化
·巧用AutoCAD对象选择技巧提高制图效率
·AutoCAD造型实例:十字形螺丝刀头
·利用AutoCAD拉伸面命令绘制哑铃
·在AutoCAD中快速做好等分点


  相关软件 JAVA Servlets简介相关文章
JSP简介(二) JSP简介(一)
ASP与JSP的比较 一个无状态的会话beans示例(5)
Insprise 运用于服务器的容器 Enterprise JavaBean专题二
EJB概述(下) EJB概述(上)