1、servlet技术简介1Servlet 是什么?Servlet是使用Java Servlet 应用程序设计接口(API)及有关类和办法 Java 程序。除了 Java Servlet API,Servlet 还可以使用用以扩展和添加到 API Java 类软件包。Servlet 在启用 Java Web 服务器上或应用服务器上运营并扩展了该服务器能力。Java servlet对于Web服务器就好象Java applet对于Web浏览器。Servlet装入Web服务器并在Web服务器内执行,而applet装入Web浏览器并在Web浏览器内执行。Java Servlet API 定义了一种serv
2、let 和Java使能服务器之间一种原则接口,这使得Servlets具备跨服务器平台特性。Servlet 通过创立一种框架来扩展服务器能力,以提供在 Web 上进行祈求和响应服务。当客户机发送祈求至服务器时,服务器可以将祈求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机响应。 当启动 Web 服务器或客户机第一次祈求服务时,可以自动装入 Servlet。装入后, Servlet 继续运营直到其他客户机发出祈求。Servlet 功能涉及范畴很广。例如,Servlet 可完毕如下功能:(1) 创立并返回一种包括基于客户祈求性质动态内容完整 HTML页面。(2) 创立可嵌
3、入到既有 HTML 页面中一某些 HTML 页面(HTML 片段)。(3) 与其他服务器资源(涉及数据库和基于 Java 应用程序)进行通信。(4) 用各种客户机解决连接,接受各种客户机输入,并将成果广播到各种客户机上。例如,Servlet 可以是多参加者游戏服务器。(5) 当容许在单连接方式下传送数据状况下,在浏览器上打开服务器至applet新连接,并将该连接保持在打开状态。当容许客户机和服务器简朴、高效地执行会话状况下,applet也可以启动客户浏览器和服务器之间连接。可以通过定制合同或原则(如 IIOP)进行通信。(6) 对特殊解决采用 MIME 类型过滤数据,例如图像转换和服务器端涉及
4、(SSI)。(7) 将定制解决提供应所有服务器原则例行程序。例如,Servlet 可以修改如何认证顾客。2Servlet 生命周期Servlet 生命周期始于将它装入 Web 服务器内存时,并在终结或重新装入 Servlet 时结束。(1) 初始化在下列时刻装入 Servlet:如果已配备自动装入选项,则在启动服务器时自动装入在服务器启动后,客户机初次向 Servlet 发出祈求时重新装入 Servlet 时装入 Servlet 后,服务器创立一种 Servlet 实例并且调用 Servlet init() 办法。在初始化阶段,Servlet 初始化参数被传递给 Servlet 配备对象。(2
5、) 祈求解决对于到达服务器客户机祈求,服务器创立特定于祈求一种“祈求”对象和一种“响应”对象。服务器调用 Servlet service() 办法,该办法用于传递“祈求”和“响应”对象。service() 办法从“祈求”对象获得祈求信息、解决该祈求并用“响应”对象办法以将响应传回客户机。service() 办法可以调用其他办法来解决祈求,例如 doGet()、doPost() 或其他办法。(3) 终结当服务器不再需要 Servlet,或重新装入 Servlet 新实例时,服务器会调用 Servlet destroy() 办法。3. Java Servlet APIJava Servlet 开发
6、工具(JSDK)提供了各种软件包,在编写 Servlet 时需要用到这些软件包。其中涉及两个用于所有 Servlet 基本软件包:javax.servlet 和 javax.servlet.http。可从sun公司Web站点下载 Java Servlet 开发工具。 下面重要简介javax.servlet.http提供HTTP Servlet应用编程接口。HTTP Servlet 使用一种 HTML 表格来发送和接受数据。要创立一种 HTTP Servlet,请扩展 HttpServlet 类, 该类是用专门办法来解决 HTML 表格 GenericServlet 一种子类。 HTML 表单是
7、由 和 标记定义。表单中典型地包括输入字段(如文本输入字段、复选框、单选按钮和选取列表)和用于提交数据按钮。当提交信息时,它们还指定服务器应执行哪一种Servlet(或其他程序)。 HttpServlet 类包括 init()、destroy()、service() 等办法。其中 init() 和 destroy() 办法是继承。(1) init() 办法在 Servlet 生命期中,仅执行一次 init() 办法。它是在服务器装入 Servlet 时执行。可以配备服务器,以在启动服务器或客户机初次访问 Servlet 时装入 Servlet。 无论有多少客户机访问 Servlet,都不会重复
8、执行 init() 。缺省 init() 办法普通是符合规定,但也可以用定制 init() 办法来覆盖它,典型是管理服务器端资源。 例如,也许编写一种定制 init() 来只用于一次装入 GIF 图像,改进 Servlet 返回 GIF 图像和具有各种客户机祈求性能。另一种示例是初始化数据库连接。缺省 init() 办法设立了 Servlet 初始化参数,并用它 ServletConfig 对象参数来启动配备, 因而所有覆盖 init() 办法 Servlet 应调用 super.init() 以保证依然执行这些任务。在调用 service() 办法之前,应保证已完毕了 init() 办法。(
9、2) service() 办法service() 办法是 Servlet 核心。每当一种客户祈求一种HttpServlet 对象,该对象service() 办法就要被调用,并且传递给这个办法一种“祈求”(ServletRequest)对象和一种“响应”(ServletResponse)对象作为参数。在 HttpServlet 中已存在 service() 办法。缺省服务功能是调用与 HTTP 祈求办法相应 do 功能。例如, 如果 HTTP 祈求办法为 GET,则缺省状况下就调用 doGet() 。Servlet 应当为 Servlet 支持 HTTP 办法覆盖 do 功能。由于 HttpSe
10、rvlet.service() 办法会检查祈求办法与否调用了恰当解决办法,不必要覆盖 service() 办法。只需覆盖相应 do 办法就可以了。当一种客户通过HTML 表单发出一种HTTP POST祈求时,doPost()办法被调用。与POST祈求有关参数作为一种单独HTTP 祈求从浏览器发送到服务器。当需要修改服务器端数据时,应当使用doPost()办法。当一种客户通过HTML 表单发出一种HTTP GET祈求或直接祈求一种URL时,doGet()办法被调用。与GET祈求有关参数添加到URL背面,并与这个祈求一起发送。当不会修改服务器端数据时,应当使用doGet()办法。Servlet响应
11、可以是下列几种类型:一种输出流,浏览器依照它内容类型(如text/HTML)进行解释。一种HTTP错误响应,重定向到另一种URL、servlet、JSP。(3) destroy() 办法destroy() 办法仅执行一次,即在服务器停止且卸装Servlet 时执行该办法。典型,将 Servlet 作为服务器进程一某些来关闭。缺省 destroy() 办法普通是符合规定,但也可以覆盖它,典型是管理服务器端资源。例如,如果 Servlet 在运营时会合计记录数据,则可以编写一种 destroy() 办法,该办法用于在未装入 Servlet 时将记录数字保存在文献中。另一种示例是关闭数据库连接。当服
12、务器卸装 Servlet 时,将在所有 service() 办法调用完毕后,或在指定期间间隔过后调用 destroy() 办法。一种Servlet 在运营service() 办法时也许会产生其他线程,因而请确认在调用 destroy() 办法时,这些线程已终结或完毕。(4) GetServletConfig()办法GetServletConfig()办法返回一种 ServletConfig 对象,该对象用来返回初始化参数和ServletContext。ServletContext 接口提供关于servlet 环境信息。(5) GetServletInfo()办法GetServletInfo()
13、办法是一种可选办法,它提供关于servlet 信息,如作者、版本、版权。当服务器调用sevlet Service()、doGet()和doPost()这三个办法时,均需要 “祈求”和“响应”对象作为参数。“祈求”对象提供关于祈求信息,而“响应”对象提供了一种将响应信息返回给浏览器一种通信途径。javax.servlet 软件包中有关类为ServletResponse和ServletRequest,而javax.servlet.http 软件包中有关类为HttpServletRequest 和 HttpServletResponse。Servlet 通过这些对象与服务器通信并最后与客户机通信。S
14、ervlet 能通过调用“祈求”对象办法获知客户机环境,服务器环境信息和所有由客户机提供信息。Servlet 可以调用“响应”对象办法发送响应,该响应是准备发回客户机。4.2 创立HTTP Servlet创立一种 HTTP Servlet,普通涉及下列四个环节:1. 扩展 HttpServlet 抽象类。2. 重载恰当办法。如覆盖(或称为重写)doGet() 或doPost()办法。3. 如果有 HTTP 祈求信息话,获取该信息。用 HttpServletRequest 对象来检索 HTML 表格所提交数据或 URL 上查询字符串。“祈求”对象具有特定办法以检索客户机提供信息,有3个可用办法:
15、getParameterNames(),getParameter(),getParameterValues()。4. 生成 HTTP 响应。HttpServletResponse 对象生成响应,并将它返回到发出祈求客户机上。它办法容许设立“祈求” 标题和“响应”主体。“响应”对象还具有 getWriter() 办法以返回一种 PrintWriter 对象。使用 PrintWriter print() 和 println() 办法以编写 Servlet 响应来返回给客户机。或者,直接使用out对象输出关于HTML文档内容。一种servlet样例(ServletSample.java)如下:imp
16、ort java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;public class ServletSample extends HttpServlet / 第一步: 扩展 HttpServlet 抽象类。public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException / 第二步:重写doGet()办法String myName =
17、 ;/ 第三步:获取HTTP 祈求信息java.util.Enumeration keys = request.getParameterNames();while (keys.hasMoreElements();key = (String) keys.nextElement();if (key.equalsIgnoreCase(myName)myName = request.getParameter(key);if (myName = )myName = Hello;/ 第四步:生成 HTTP 响应。response.setContentType(text/html);response.set
18、Header(Pragma,No-cache);response.setDateHeader(Expires,0);response.setHeader(Cache-Control,no-cache);out.println(Just a basic servlet);out.println();out.println(Just a basic servlet);out.println ( + myName + ,this is a very basic servlet that writes an HTML page.);out.println (For instructions on ru
19、nning those samples on your WebSphere应用服务器,+open the page:);out.println(http:/your.server.name/IBMWebAs/samples/index.aspl);out.println(where your.server.name is the hostname of your WebSphere应用服务器.);out.println();out.flush();上述ServletSample类扩展 HttpServlet 抽象类、重写doGet()办法。在重写doGet()办法中,获取HTTP 祈求中一种任
20、选参数(myName),该参数可作为调用 URL 上查询参数传递到 Servlet。使用示例如下:。*调用 Servlet要调用 Servlet 或 Web 应用程序,请使用下列任一种办法:由 URL 调用、在 标记中调用、在 标记中调用、在 JSP 文献中调用、在 ASP 文献中调用。1. 由 URL 调用 Servlet这里有两种用 Servlet URL 从浏览器中调用该 Servlet 办法:(1) 指定 Servlet 名称:当用 WebSphere应用服务器 管理器来将一种 Servlet 实例添加(注册)到服务器配备中时,必要指定“Servlet 名称”参数值。例如,可以指定将h
21、i作为HelloWorldServlet Servlet 名称。要调用该 Servlet,需打开 。也可以指定 Servlet 和类使用同一名称(HelloWorldServlet)。在这种状况下,将由 。(2) 指定 Servlet 别名:用 WebSphere应用服务器 管理器来配备 Servlet 别名,该别名是用于调用 Servlet 快捷 URL。快捷 URL 中不涉及 Servlet 名称。2. 在 标记中指定 Servlet可以在 标记中调用 Servlet。HTML 格式使顾客能在 Web 页面(即从浏览器)上输入数据,并向 Servlet 提交数据。例如:AMFM(用于放置文
22、本输入区域标记、按钮和其他提示符。)ACTION 特性表白了用于调用 Servlet URL。关于METHOD 特性,如果顾客输入信息是通过 GET 办法向 Servlet 提交,则 Servlet 必要优先使用 doGet() 办法。反之,如果顾客输入信息是通过 POST 办法向 Servlet 提交,则 Servlet 必要优先使用 doPost() 办法。使用 GET 办法时,顾客提供信息是查询字符串表达 URL 编码。无需对 URL 进行编码,由于这是由表单完毕。然后 URL 编码查询字符串被附加到 Servlet URL 中,则整个 URL 提交完毕。URL 编码查询字符串将依照顾客
23、同可视部件之间交互操作,将顾客所选值同可视部件名称进行配对。例如,考虑前面 HTML 代码段将用于显示按钮(标记为 AM 和 FM),如果顾客选取 FM 按钮,则查询字符串将包括 name=value 配对操作为broadcast=fm。由于在这种状况下,Servlet 将响应 HTTP 祈求,因而 Servlet 应基于 HttpServlet 类。Servlet 应依照提交给它查询字符串中顾客信息使用 GET 或 POST 办法,而相应地使用 doGet() 或 doPost() 办法。3在 标记中指定 Servlet当使用 标记来调用 Servlet 时,犹如使用 标记同样,无需创立一种
24、完整 HTML 页面。作为代替,Servlet 输出仅是 HTML 页面一某些,且被动态嵌入到原始 HTML 页面中其他静态文本中。所有这些都发生在服务器上,且发送给顾客仅是成果 HTML 页面。建议在 Java 服务器页面(JSP)文献中使用 标记。请参阅关于 JSP 技术原始 HTML 页面中包括 和 标记。 Servlet 将在这两个标记中被调用,且 Servlet 响应将覆盖这两个标记间所有东西和标记自身。如果顾客浏览器可以看到 HTML 源文献,则顾客将看不到 和 标记。要在 Domino Go Webserver 上使用该办法,请启用服务器上服务器端涉及功能。某些启用过程将会涉及到
25、添加特殊文献类型 SHTML。当 Web 服务器接受到一种扩展名为 SHTML Web 页面祈求时,它将搜索 和 标记。对于所有支持 Web 服务器,WebSphere应用服务器 将解决 SERVLET 标记间所有信息。下列 HTML 代码段显示了如何使用该技术。使用 NAME 和 CODE 属性带来了使用上灵活性。可以只使用其中一种属性,也可以同步使用两个属性。 NAME 属性指定了 Servlet 名称(使用 WebSphere应用服务器管理器配备),或不带 .class 扩展名 Servlet 类名。CODE 属性指定了 Servlet 类名。使用 WebSphere应用服务器 时,建议
26、指定 NAME 和 CODE,或当 NAME 指定了 Servlet 名称时,仅指定 NAME。如果仅指定了 CODE,则会创立一种 NAME=CODE Servlet 实例。装入 Servlet 将假设 Servlet 名称与 NAME 属性中指定名称匹配。然后,其他 SHTML 文献可以成功地使用 NAME 属性来指定 Servlet 名称,并调用已装入 Servlet。NAME 值可以直接在要调用 Servlet URL 中使用。如果 NAME 和 CODE 都存在,且 NAME 指定了一种既有 Servlet,则普通使用 NAME 中指定 Servlet。由于 Servlet 创立了某
27、些 HTML 文献,因此当创立 Servlet 时,将也许会使用 HttpServlet 一种子类,并优先使用 doGet() 办法(由于 GET 办法是提供信息给 Servlet 缺省办法)。另一种选项是优先使用 service() 办法。此外, CODEBASE 是可选,它指定了装入 Servlet 远程系统 URL。请使用 WebSphere应用服务器 管理器来从 JAR 文献配备远程 Servlet 装入系统。在上述标记示例中,initparm1 是初始化参数名,value 是该参数值。可以指定各种“名称-值”对集合。运用 ServletConfig 对象(被传递到 Servlet i
28、nit() 办法中) getInitParameterNames() 和 getInitParameter() 办法来查找参数名和参数值字符串数组。在示例中,parm1 是参数名,并在初始化 Servlet 后被才被设立某个值。由于只能通过使用“祈求”对象办法来使用以 标记设立参数,因此服务器必要调用 Servlet service() 办法,以从顾客处传递祈求。要获得关于顾客祈求信息,请使用 getParameterNames()、getParameter() 和 getParameterValues() 办法。初始化参数是持续。假设一台客户机通过调用一种包括某些初始化参数 SHTML 文献
29、来调用 Servlet。并假设第二台客户机通过调用第二个 SHTML 文献来调用同一种 Servlet,且该 SHTML 中未指定任何初始化参数。那么第一次调用 Servlet 时所设立初始化参数将始终可用,并且通过所有其他 SHTML 文献而调用所有后继 Servlet 都不会更改该参数。直到 Servlet 调用了 destroy() 办法后,才干重新设立初始化参数。例如,如果另一种 SHTML 文献指定了另一种不同初始化参数值,虽然已此时已装入了 Servlet,但该值仍将被忽视。4在 JSP 文献中调用 Servlet可以从 JavaServer 页面(JSP)文献中调用 Servle
30、t。请参阅JSP技术某些。5在 ASP 文献中调用 Servlet如果在 Microsoft Internet Information Server(IIS)上有遗留 ASP 文献,并且无法将 ASP 文献移植成 JSP 文献时,可用 ASP 文献来调用 Servlet。在 WebSphere应用服务器 中 ASP 支持涉及一种用于嵌入 Servlet ActiveX 控制,下面简介ActiveX 控制AspToServlet 办法和属性。该办法阐明如下:(1) String ExecServletToString(String servletName);执行 ServletName,并将其输
31、出返回到一种字符串中。(2) ExecServlet(String servletName);执行 ServletName,并将其输出直接发送至 HTML 页面。(3) String VarValue(String varName);获得一预置变量值(其他格式)。(4) VarValue(String varName,String newVal);设立变量值。变量占据总大小应不大于 0.5 个千字节(Kbyte)。且仅对配备文献使用这些变量。其属性如下:Boolean WriteHeaders;若该属性为真,则 Servlet 提供标题被写入顾客处。缺省值为假。Boolean OnTest;若该属性为真,服务器会将消息记录到生成 HTML 页面中。缺省值为假。下列ASP 脚本示例是以 Microsoft Visual Basic Scripting(VBScript)书写。 Starting the ASP-Java Servlet demoLets check the variablesHeaders were written Headers were not written The End .
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100