关于jsp和servlet之间关系的问题。(100分)

W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
>>wukw, 我才问您一句话,您给我来这么多,想用口水淹死我啊。
对不起,我没有那个意思。
由于我所学甚浅,的确一直都在断章取义。
>>JSP 是 servlet 的 extension - 扩展
我以为Jsp的功能更强,所以猜测jsp会代替Servlet
>>Together, JSP technology and servlets provide an attractive alternative to ..
这句话我把注意力放到alternative这个词上了。
至于我举的例子,我也没看完,所以。。。
感谢您的教诲,有点明白了。
我还是埋头好好去学吧,不要在这里丢人了。
 
L

lql0459

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么那么多理论!还是来点实际的吧!
不贴了!给你一个连接:http://www.delphibbs.com/delphibbs/dispq.asp?lid=973997
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
JSP与Servlet关系密切,JSP页面在执行时首先就要编译成Servlet。其实除去转译和编译部分,JSP与Servlet的差异不是很大。在Servlet中可以使用的资源基本上都可以在JSP中使用。而且Servlet API对象与JSP内置对象的关系也十分密切。
Servlet概述
Servlet是Java 2.0中增加的一个全新功能。Servlet可以被认为是服务器端的Applet。Servlet被Web服务器执行,同applet被Web浏览器执行是很类似的。Servlet被Web服务器执行,同Applet被Web浏览器执行是很类似的。
Java Servlet是运行在请求和面向请求服务器上的模块,比如一个支持Java的Web服务器,和类似这样的场合。例如一个Servlet可以从一个HTML定单表中获取数据,然后用一些商业上的算法来更新公司相应的定单数据库。
也就是说:Servlet能够像CGI脚本一样扩展Web服务器功能,但Servlet占用很少的资源。
Servlet API,用来写Servlet程序的,编写Servlet已经不会像编写CGI脚本那样,关心一个Servlet是怎样被装载,Servlet运行的服务器环境是什么,或者用来传输数据的协议是什么等等。这样,Servlet就可以融合在不同的Web服务器中了。
Servlet可以相当有效地替代CGI脚本:可以方便的产生容易编写而且运行快的动态文本;可以很方便的调试寻找出程序问题;Servlet程序是用Java Servlet API开发的一种标准的Java扩展程序,但不是Java核心框架的一部分。
什么是Servlet
Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。
Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机JVM。
Servlet与Web服务器的关系类似于Applet与Web浏览器的关系(这也就是为什么被称为Servlet的原因)。可以将Servlet想象成没有前端界面的Applet。与Applet不同的是,由于Servlet运行在Web服务器端,因此Servlet是一个可信赖的程序,不受Java安全性的限制,拥有和普通Java应用程序一样的权限。
Servlet是CGI Script的一种替代技术,由于Servlet在性能、可移植性、代码重用等方面比CGI具有明显的优势,因此在未来的技术发展中,Servlet有可能彻底取代CGI。
Java Servlet特点及应用范围
Servlet程序在服务器端运行,动态地生成Web页面。与传统地CGI和许多其它类似CGI的技术相比,Java Servlet具有更高的高效,更容易使用,功能更强大,可移植性好,节省投资等特点。
Servlet的广泛应用包括以下几个方面:用于处理用户提交数据,允许人们之间的合作,转送请求,分布计算。
Servlet的结构
使用Servlet的流程如下:
Web浏览器客户端提出请求;
Web服务器接收该客户端请求并将其发送给Servlet,如果这个Servlet尚未被加载,则服务器加载这个Servlet给Java虚拟机并执行;
Servlet将接收Http请求,并执行某种处理;
Servlet向Web服务器返回应答的信息;
Web服务器将从这个Servlet收到的应答信息发送给客户端。
Servlet是符合由JavaServlet体系结构定义的特殊接口的Java对象。
在Servlet API中最重要的是Servlet interface(接口)。所有的Servlet都执行这个interface,执行的方式有很多种:或者是直接的,或者通过extending这个class执行它,如HttpServlet。这个Servlet interface提供安排Servlet与客户端联系的方法。Servlet编写者可以在开发Servlet程序时提供更多一些或所有的这样方法。
当一个Servlet接收来自客户端的调用请求,它接收两个对象:一个是ServletRequest,另外一个是ServletResponse。这个ServletRequest class概括从客户端到服务器之间的联系,而ServletResponse class概括从Servlet返回客户端的联系。
上面有关classes和interfaces描述构成了一个基本的Servlet框架。HTTP Servlet有一些附加的可以提供session-tracking capabilities的方法。Servlet编写者可以用这些API在有他人操作时维护Servlet与客户端之间的状态。
服务器装载运行Servlets:接收来自客户端的多个请求并返回数据给客户端。然后再删除移开Servlets。
当一个服务器装载Servlet时,会运行Servlet的init方法。这个方法不能反复调用,一旦方法不能反复调用,一旦调用就是再装载Servlet。直到服务器调用destroy方法卸载Servlet后才能再调用。
在服务器装载初始化后Servlet,Servlet就能够处理客户端的请求。用service方法做到这一点。每个客户端请求有它自己service方法:这些方法接收客户端请求,并且发回相应的响应。Servlets能够同时运行多个service。这是很重要的,这样service方法可以按一个thread-safe样式编写。
如:service方法更新Servlet对象中的一个字段field,这个字段可以同时存取的。假如某个服务器不能同时并发运行service方法,也可以用SingleThreadModel interface。这个interface保证不会有两个以上的线程threads并发运行。Servlet会一直运行到被服务器卸载为止。
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
Servlet开发初步
推荐:yxz 分类:JAVA 发布时间:2001-11-28 人气:86
--------------------------------------------------------------------------------
Servlet是Java语言在WEB服务器端的一种应用技术,未来Servlet将可能彻底取代CGI。本讲座将具体介绍Servlet的概念、开发、调试以及相应的应用实例。
  一、什么是Servlet?
  ·Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。
  ·Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。
  ·Servlet与Web服务器的关系类似于Applet与Web浏览器的关系(这也是为什么Servlet技术被称为Servlet的原因),我们可以将Servlet想象成没有前端界面(faceless)的Applet。与Applet不同的是,由于Servlet运行在Web服务器端,因此它是一个可信赖的程序,不受到Java安全性的限制,拥有和普通Java应用程序一样的权限。
  ·Servlet是CGI Script的一种替代技术,由于Servlet在性能、可移植性、代码重用等方面比CGI具有显著的优势,因此在未来的技术发展过程中,Servlet有可能彻底取代CGI。
  二、编写Servlet所需要的开发环境
  进行Servlet开发所需要的基本环境是JSDK以及一个支持Servlet的Web服务器。
  1.JSDK(Java Servlet Development Kit)
  JSDK包含了编译Servlet应用程序所需要的Java类库以及相关的文档。对于利用Java 1.1进行开发的用户,必须安装JSDK。JSDK已经被集成进Java 1.2 Beta版中,因此如果利用Java 1.2进行开发,则不必安装JSDK。
  JSDK可以在Javasoft公司的站点免费下载,其地址是
  http://jserv.javasoft.com/products/java-server/downloads/index.html
  2.支持Servlet的Web服务器
  Servlet需要运行在支持Servlet的Web服务器上。目前支持Servlet的Web服务器首推SUN公司的Java Web Server。如果现有的Web服务器不支持Servlet,则可以利用一些第三方厂商的服务器增加件(add-ons)来使Web服务器支持Servlet,这其中Live Software公司(http://www.livesoftware.com)提供了一种称为JRun的产品,通过安装JRun的相应版本,可以使Microsoft IIS和Netscape Web Server支持Servlet。
  三、开发Servlet的过程
  本文将以编写一个简单的Servlet(我们称之为HelloServlet)为例说明开发Servlet的过程。
  1.编写Servlet代码
  Java Servlet API是一个标准的Java扩展程序包,包含两个Package∶javax.servlet和javax.servlet.http。对于想开发基于客户自定义协议的开发者,应该使用javax.servlet包中的类与界面;对于仅利用HTTP协议与客户端进行交互的开发者,则只需要使用javax.servlet.http包中的类与界面进行开发即可。
  下面是一个典型的servlet的程序代码∶
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.io.*;
  import java.util.*;
  public class HelloServlet extends HttpServlet {
   public void init(ServletConfig config) throws ServletException {
    super.init(config);
   }
   public void service(HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException {
  String clientIPAddress = req.getRemoteAddr();
     res.setContentType(″text/html″);
   ServletOutputStream out = res.getOutputStream();
   out.println(″〈html〉″);
   out.println(″〈head〉〈title〉Hello World〈/title〉〈/head〉″);
   out.println(″〈body〉″);
   out.println(″〈h1〉Hello,You come from ″+clientIPAddress+″〈/h1〉″);
   out.println(″〈/body〉〈/html〉″);
   }
  }
  该servlet实现如下功能∶当用户通过浏览器访问该servlet时,该servlet向客户端浏览器返回一个HTML页面∶
  Hello, You come from 192.168.0.11
  其中192.168.0.11是客户端IP地址。程序代码的要点如下∶
  ·基于HTTP协议的servlet必须引入javax.servlet和javax.servlet.http包;
  ·HelloServlet从类HttpServlet派生,HttpServlet是GenericServlet的一个派生类,通过GenericServlet实现了Servlet界面。HttpServlet为基于HTTP协议的servlet提供了基本的支持;
  ·service()方法是servlet程序的入口点,当用户从浏览器调用servlet时,servlet将进入该方法。service()包含两个参数,HttpServletRequest对象包含了客户端请求的信息,可以通过该参数取得客户端的一些信息(例如IP地址、浏览器类型等)以及HTTP请求类型(例如GET、HEAD、POST、PUT等);HttpServletResponse对象用于完成Servlet与客户端的交互,通过调用HttpServletResponse.getOutputStream()客户取得向客户端进行输出的输出流,向客户端发送HTML页面。
  2.编译Servlet代码
  利用JDK 1.1对Servlet代码进行编译(假设Web服务器采用Java Web Server),其命令行为:
  c:/> javac -d c:/JavaWebServer/servlets HelloServlet.java
  进行编译时必须保证JSDK的Java Servlet类已经包含在CLASSPTH中,上述命令将编译后的.class代码放置在Java Web Server的Servlets目录下(如果你使用其他的Web Server,需要将.class代码放置在该Web Server指定的目录下)。
  3.将Servlet添加进Web Server
  由于Servlet是通过Web Server进行调用的,因此必须将其在Web Server中进行注册,以便Web Server能够正确的找到Servlet代码。对于Java Web Server来说,它提供了一个系统管理Applet,通过该Applet对我们的HelloServlet进行注册(在这里,我们将HelloServlet命名为firstServelt)。
  3.测试Servlet
  现在可以对HelloServlet进行测试了,打开浏览器,键入
  http://192.168.0.9/servlet/firstServlet
  其中192.168.0.9是安装有Java Web Server的机器IP地址。
  如果一切正常,在浏览器中将返回一个页面,输出“Hello,You come from 192.168.0.11”。其中192.168.0.11是运行浏览器的机器IP地址。
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
Servlets在网站中的应用前景如何及入门
推荐:yxz 分类:JAVA 发布时间:2001-11-26 人气:84
CGI(通用网关接口)脚本编程在网络管理员的心目中一直牢牢地占据着重要的位置。目前, CGI脚本在很多网站上得到了应用,这种情况是否会一直持续下去?
我们现在将了解一下另一种在服务器端进行程序设计的方法,即采用Java语言。Java servlets是Sun Microsystems公司关于Java无处不在的战略的下一步的重大目标。
CGI FYI
获取从网页传送到客户的数据,用CGI实现很简单。通过解析服务器上的环境变量,CGI 脚本通过使用在HTTP协议中定义的标准事件(类似于POST事件),可以读取客户传送来的数据。
CGI的原理很简单,但在网络开发应用中,CGI程序设计需要专门的技巧,因为脚本语言,尤其是用于CGI的Perl语言,掌握起来相当有难度。不少网络浏览器的客户端,有界面友好的工具和脚本语言,但在服务器端的开发难度较大。微软的Active Server Pages,简称 ASP,可以简化服务器端的开发,它的语法是基于Visual Basic的VBScript.
缺省情况下,当每个用户查看一个网址时,就会调用一个CGI脚本,于是就会在服务器上启动一个新的进程或者程序。这样做,代价太昂贵,所以Netscape和微软分别推出NSAPI和ISAPI模块,这样就可以克服性能限制。使用这些模块,服务器端的功能可以包含在DLL格式的文件,多个客户可以使用同一可执行文件。同样,开发这样的程序需要高级的技能。
Java可以来解救
同单一的开发语言相结合,且又容易管理,还可以有效地使用服务器端的资源,这就是Java servlets所带来的好处。只要你熟悉Java,就可以很容易地写出容易扩充且富有效率的Java servlets代码,(在Java Servlet Developer's Kit 中,Sun提供了一系列的类,为你做了大部分的工作,你可以从其网址http://www.javasoft.com/ 中下载)
Servlets在服务器上很容易配置。你可以得到一个方便的图形接口,来控制运行哪个servlets, 也可以容易地配置其它选项。这比管理CGI 脚本更容易,除此之外,你在更新servlets时,无需关闭服务器。
Servlets有其独特的优点,因为它们是用Java语言编写的,所以可以工作于流行的网络服务器上,包括:Netscape, Microsoft, Apache 和Sun公司自己开发的WebServer等服务器软件。 (现在,还有第三方的插件,可以让servlets运行在绝大部分平台上。你可以到Sun公司网站上去查询相关信息。) 这种跨平台的能力,对于那些在同一时间内,需要在不止一种平台上运行的网站来说,特别有用。你可以很容易地改变硬件平台,或者升级服务器,而无需改动服务器端的代码。
当然,在服务器上,你需要有Java虚拟机(JVM),Java虚拟机可以带来另外的好处,因为Java具有内在的垃圾搜集机制,你不会因出现servlet出错或者发生例外,而泄漏你的资源。从理论上讲,因为Java具有内在的安全机制,Java servlets比其竞争对手的同类产品更具健壮性。
另外一个依赖Java的原因是:Java可以访问数据库 (通过JDBC) 和进行分布式处理 (通过Java的远程方法调用,即RMI)。当然,你也可以不采用Java,可以在网站上的不同部分,采用多种语言和技术(用于创建动态HTML ,访问数据库,连接到不同的服务器)。而一旦使用Java,就可以完成上述的全部工作,这样Servlet模型就赋予Java一个崭新的,功能强大的角色,并且能够适应各种服务器。
创建一个Servlet
前面把Java servlet讲得这么动听,你也许会迫不急待地想试试servlet的用法。在这之前,你需要下载Sun公司的Servlet Developer's Kit,之后再安装网络服务器,最后用Symantec的 Visual Cafe用来编译Java源代码,本文中,我们创建了一个典型的Java servlet样本. (你可下载JServlet.zip文件)
该servlet例子可以在支持servlet的网络服务器上运行,向假想的客户发布销售信息,为了便于管理,SalesInfoServlet自己记录数据,当然它也可以不这样做,通过JDBC 连接到“活动”的数据源上,但这就需要额外的部件,使得发布一个演示用的应用程序步骤更加复杂。
一旦把例子网页在网络服务器上安装完毕,用浏览器打开ProductSalesDemo.html网页作为开始 (我们使用的是Netscape浏览器)。当客户调用一个servlet (在HTTP 中使用了标准的GET和POST事件),我们的ProductInfoServlet就根据客户的信息生成新的HTML 页面。这里的基本思想模仿的是一个简单的CGI-bin脚本的做法。事实上,为了保证向后的兼容性,Java servlets也可以运行CGI脚本,尽管它在Java中工作得更好。
让我们再来看一下ProductInfoServlet.java文件,以便了解Java servlets的一些细节。有人警告称:Sun公司已经推出JDK 1.2,所以servlets的一些细节,可能会随之而改变。回顾Java语言的简短历史,Java 开发者们一直具有开放性的思想,在新版本中,servlets的基本的工作原理不会改变。用户创建的servlet都需要通过Java关键字“extends”从HttpServlet 类中派生出来。HttpServer类及其相关类放在javax.servlet包中,该包中包含了额外的可以使用的服务器端的类。
你的servlet可具有很多有意义的功能,诸如具有内在的多任务机制,能够同网络服务器协同工作,配置灵活容易。对同一个Java小程序发生多次请求时,服务器的运行将更有效率。Servlet是由服务器负责加载和配置的。
创建网页
为了定制HTTP网页,我们需要重载或者定义doGet() 和do
Post() 方法,即裁剪这些方法。在这里,我们根据客户的选择,创建了一个新的网页,数据自身存储在Java小程序中的数组中,并且用定制的方法getSalesInfo()发送, clientArray 存储了一个客户记录的数组(实际上是个Java 向量容器),该数组存储基本的客户信息。在这里,我们使用clientID域,在salesArray容器(也是个向量)中进行“join”的编程操作,该容器存储单个的销售记录。把客户的数据同销售记录中的项目进行匹配,就可以构造出我们所要的数据。
在实际场合中,数据可以通过JDBC从数据库中获得。当客户端发送过来一个请求时,你可以使用Java的内在的String和 StringTokenizer类对经过servlet来回传输的数据,进行解析。通过使用String 和StringBuffer类,你可以创建新的HTML页。这里,我们构造了一个客户的基本信息的表单以及单个的货物销售记录清单。
采用server includes的方式,可以很容易地创建网页,我们可以在这些server includes填入客户数据,server includes所担任的角色是HTML的模板代码。(本例中使用的是SalesInfo.shtml)。一旦把定制的信息写到HTML模板文件中,我们可以立即创建客户数据,形成纯粹HTML语言格式文件,加上一些JavaScript脚本语言,没有在客户端使用Java语言。当然,如果在网络浏览器中使用Java部件,你可以完成功能更强的工作。
值得一提的是: servlets 并不仅仅适用于HTTP。 GenericServer类是个基本的servlet,可在页面中显示任何内容。Sun 的目标是让所有种类的网络服务,从标准的互联网协议,到特殊的协议,都可以采用servlets进行通信。但是,首先要让网络开发人员广泛接受servlets。我们的例子表明servlets的前景也许会很好,但是很难说开发者会放弃对CGI的喜爱。
有了servlets之后,Java的能力大大增强。作为在服务器端实现的技术,servlets速度快,功能强,适用于多种场合下的任务。一旦Java应用到服务器上,你会发现你的网站或者企业网中的程序的运行速度更快,也更容易维护。
原作者: Rich Dragan / 翻译:朱英
原出处: javadeveloper
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
用Java Servlets代替CGI
推荐:yxz 分类:JAVA 发布时间:2001-11-14 人气:70
从网络的早期阶段开始,人们就希望他们的网络服务器不仅能够显示静态文档,通用网关接口(CGI) 扩展了服务器的能力,但其代价是增加了额外的处理进程。FastCGI则把外部CGI 处理进程同网络服务器更紧密地集成在一起,另外,对于专有的,诸如NSAPI 和ISAPI 这样的服务器API,它们直接把外部进程以服务器插件的形式集成到服务器中。现在有了Java servlets,它们的功能强大,可以快速替代你现有的CGI程序。
什么是servlets?
就象applet扩充了网络浏览器的能力一样,servlets这个Java部件,扩充了网络服务器的能力。对于任何种类的服务器端的处理,Servlets可以作为server-side includes使用或者作为CGI程序(在JavaSoft的Java Web server中可以作为插件)执行。 Servlets可以移植,不象CGI和专有的API模块,你可以利用Java的“编写一次,到处运行”的机制,在你的企业中配置网络应用程序。Servlets的运行也很稳固,在 servlet 中你创建了一个数据库连接,下一次你访问servlet时连接仍然存在,这同CGI 程序不一样。Servlets也具有扩展性,所以你可以使用面向对象的程序设计方法,来减少开发时间。Servlets可以运行在任何支持servlet的网络服务器上。目前,servlet SDK除了支持JavaSoft的Java Web server,还支持Netscape, Apache 和IIS,以及大量第三方的网络服务器。
JSDK导游
为了创建servlets,你需要Java servlet SDK (JSDK),它可以从JavaSoft网站下载。JSDK包含诸如javax.servlet,javax.servlet.http等包,其中包含有你自己创建servlets时所需要的类和接口。对于sun.servlet 包来说,其中包含了网络服务器用来运行servlets所需要的类。 (对Servlet的支持通常是通过服务器插件的形式)。一旦你有了JSDK,你只要创建GenericServlet类的子类,并且重载若干方法。GenericServlet 定义了你应该重载的三种主要方法: init(), service()和destroy()。
init() :初始化你的servlet,诸如打开数据库连接。
destroy():在applet运行结束后,清除servlet 自身。
service():每次调用servlet时,就调用service()方法。有两个对象 ServletRequest和ServletResponse需要传送给servlet,用于处理客户请求。
为了帮助处理基于Web 的事务,JSDK 在 javax.servlet.http包中有个HttpServlet类。HttpServlet是从GenericServlet中派生出来的,它提供了service()的一个实现,该实现用于自动处理GET, HEAD和POST的请求。
HttpServlet类中的方法有doGet()和doPost()。一个典型的CGI servlet只需要实现doGet()和doPost()方法。do
Get()和doPost()的参数为HttpServletRequest和HttpServletResponse。
HttpServletRequest是个接口,该接口提供了从客户的请求获取信息的一些方法。例如, getParameter()方法返回在客户请求中的关键字/值对(或者从请求串中取得,或者从POSTed数据中取得)。
HttpServletResponse提供了输出流,使得servlet把HTML格式的输出返回给客户。
基本Servlet代码
代替你的CGI
下面为一段可以取代CGI程序的基本的servlet代码。Servlet完成如下的简单事情:列出由HTML表单搜集的关键字/值对(key/value)。
BasicCGIServlet处理POST,也用同样处理GET。所以doPost()和doGet()都调用doService()。doService()可以在子类中重载,以实现更多特定的功能。
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class BasicCGIServlet extends HttpServlet {
public BasicCGIServlet () {
super();
}
public voiddo
Post (HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doService(req, resp);
}
public voiddo
Get (HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doService(req, resp);
}
protected synchronized voiddo
Service (HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
// get an output stream to write to
ServletOutputStream out = resp.getOutputStream();
// set the content type for the response resp.setContentType (///"text/html///");
// optionally you should also set any special content-encoding
// and content length response headers, and return status codes // write out the response!
out.println (///"<html><head><title>Form Parameters</title></head><body
bgcolor=///////"white///////">///");
out.println (///"<table border=1>///");
out.println (///"<th>Key</th><th>Value</th>///");
for (Enumeration e = req.getParameterNames();
e.hasMoreElements();
) {
String key = (String) e.nextElement();
out.println (///"<tr><td>///" + key + ///"</td><td>///" + req.getParameter(key) + ///"</td></tr>///");
}
out.println (///"</table></body></html>///");
}
当调用req.getParameterNames()时,servlet请求对象读入表单数据,并且把它解码为关键字/值对(事实上,一旦第一次调用getParameterNames(),或者getParameterValues(),或者getParameter() 时,就进行解码)。 getParameterNames()返回所有关键字的列举。getParameter()返回同特定关键字相对应的值。当servlet请求被解析成关键字/值对时,每个关键字的值保存在String数组中,以便可以处理一个关键字有多个值的情况。调用getParameterValues(),返回的是String数组,而调用 getParameter()后,则仅返回String数组中的第一个元素。
你也许会注意到doService()是个同步化的方法。这是因为servlets 通常是在多线程环境下运行的。因为网络服务器创建的servlet对象只有一个实例,所以servlet必须能够对同时发生的请求提供服务。因此,Servlets需要确保:这些请求在访问共享资源时保持同步。这些共享资源包括实例变量,数据库连接和文件流等。
运行你的servlet
一旦编写好servlet,并且编译成功之后,你可以把它放到网络服务器中servlet别名目录中。就同服务器中的cgi-bin别名目录的作用一样,任何放在servlet 目录中的文件,一旦被作为url的一部分被请求时,将被作为servlets执行。例如,BasicCGIServlet可以通过如下的url调用: http://mycompany.com/servlet/BasicCGIServlet。你既可以直接调用该url (并且传送给servlet一个请求关键字/值对的串),也可以通过HTML表单中的一个动作来调用。要了解更多的支持servlet的网络服务器的信息,请参阅JSDK中的有关文档信息。
进一步的用法
GenericServlet和 HttpServlet提供了一个构建servlets的固定的基类。通过重载service()方法,你可以在它们的基础上进行构建。例如,你可以加入对响应缓存的支持(请参见HttpServlet 中的getLastModified()),也可以加入对HTTP 1.1方法的支持,等等。你甚至可以构建一个扩展的模板引擎。(有谁真的喜欢在他们的程序中内置HTML代码呢?)
另外一个用法是对JSDK进行扩展,使之除了支持标准的application/x-www-form-urlencoded mime 类型之外,还支持其他类型的表单编码。例如,你可以加入对multipart/form-data mime类型的支持,用于处理通过HTTP上载文件。接口方法getParameterNames(), getParameterValues()等等,都是在sun.servlet包中实现的,所以你需要配置JSDK ,以便加入这些支持。还有一种变通的方法,你可以自己实现有关方法,但那样做,就需要复制代码或者改变JSDK的语义。上面的这些方法都是可行的,但是没有哪一种是完美无缺的。
结论
现在你应该会自己创建Java servlets了,它们可以用来代替传统的Perl和C/C++ CGI程序。 Java的面向对象的特性和“编写一次,到处运行”的机制使得Java servlets的编写很简单。Servlet的稳固性,可以解决有关状态管理问题,而这些都是只用一次的CGI程序解决实际问题时通常会遇到的难题。 Servlets可以利用Java语言的所有功能,包括JDBC和RMI。由于大多数网络服务器都加入了对servlet的支持,Java将迅速成为开发企业级应用程序的一种可选语言。
 

曹晓钢

Unregistered / Unconfirmed
GUEST, unregistred user!
天哪,wukw你扔炸弹阿...
转了这么多东东
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
奇文共欣赏。 大家一起研究。
其中有一篇是我辛苦打字抄的,大侠你不谢我,我还等着小虾米来谢我呢!
对了,那个http://java.sun.com/products/servlet/download.html
这里有servelt.jar包的下载不了。
怎么办啊?
 

曹晓钢

Unregistered / Unconfirmed
GUEST, unregistred user!
哈,刚才写信问我的是你?
我可以下载的啊?
servlets包很容易找啊,到处都是。比如tomcat下载包里面就有一份。基本上每个java的IDE里面都会附带的。
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
嗯,酒足饭饱,又可以开始看书了。
(最美好的境界就是一边喝着咖啡,一边编Java的程序,双重享受:),可惜我就是不爱喝咖啡,Java编程也处在起步阶段)
曹大侠,别人回答的怎么和你的不一样?不过我还是倾向于你的回答,相信你的技术水平。
http://61.144.28.245/hjc/mycgi/bbs/topic.cgi?forum=2&amp;topic=2467&amp;show=0
我访问http://java.sun.com/products/servlet/download.html
sun的网页都出错了!晕,显示如下:
<IMG SRC="/images/ba
这个名字jakarta-tomcat-4.0.1.zip是Tomcat吗?
哦,太好了,发现了servlet.jar,
然后编辑autoexec.bat: path=c:/jdk1.3.1_02/bin;c:/servlet.jar;
这样写对吗?我试一试。
祝我好运!
 

曹晓钢

Unregistered / Unconfirmed
GUEST, unregistred user!
你到底在什么环境下编译这段代码?
这个帖子已经足够长了。建议你另开一个帖子。
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
帮忙,我另开了一个帖子,多谢!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1102953
 
Y

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
看看下面的 Chat 纪录,可以更好地了解 servlet 和 JSP
http://developer.java.sun.com/developer/community/chat/JavaLive/2002/jl0226.html
http://developer.java.sun.com/developer/community/chat/JavaLive/2001/jl1023.html
 
K

kylin_2000

Unregistered / Unconfirmed
GUEST, unregistred user!
看来“模式二”只是大家在嘴上说说而已,很少有人用。都是用“模式一”多。
居然这样来描述Servlet……#$#%$%^&amp;&amp;^&amp;**!@%$~@!!
 

曹晓钢

Unregistered / Unconfirmed
GUEST, unregistred user!
to kylin_2000
> 看来“模式二”只是大家在嘴上说说而已,很少有人用。都是用“模式一”多。
几乎我看到的所有的实现都是模式2.我不明白你是怎么“看来”的。
>居然这样来描述Servlet……#$#%$%^&amp;&amp;^&amp;**!@%$~@!!
您是在为上面讨论的那个部分鸣不平?请详细指出。多谢。
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
什么模式?是我贴的文章吗?
对或不对,请指教。
 
C

clever_boy_2000

Unregistered / Unconfirmed
GUEST, unregistred user!
首先jsp文件会由一个servlet程序编译成一个servlet类,(一般在/doc/WEN_INF/work下)
然后由软件服务器去编译由servlet程序生成的jsp文件的servlet类,然后执行.
 
L

lnboy

Unregistered / Unconfirmed
GUEST, unregistred user!
接受答案了.
 
顶部