调用Servlet的多种方法浅析

开发 后端
调用Servlet是我们在编程过程中经常会用到的功能,那么如何调用Servlet呢?本文将会给你在多种形式下的调用浅谈些方法。

要调用Servlet或Web应用程序,请使用下列任一种方法:由URL调用Servlet、在﹤FORM﹥标记中调用Servlet、在﹤SERVLET﹥标记中调用Servlet、在JSP文件中调用Servlet、在ASP文件中调用Servlet。

1.由URL调用Servlet

这里有两种用Servlet的URL从浏览器中调用该Servlet的方法:

(1)指定Servlet名称:当用WebSphere应用服务器管理器来将一个Servlet实例添加(注册)到服务器配置中时,必须指定“Servlet名称”参数的值。例如,可以指定将hi作为HelloWorldServlet的Servlet名称。要调用该Servlet,需打开http://your.server.name/servlet/hi。也可以指定Servlet和类使用同一名称(HelloWorldServlet)。在这种情况下,将由http://your.server.name/servlet/HelloWorldServlet来调用Servlet的实例。

(2)指定Servlet别名:用WebSphere应用服务器管理器来配置Servlet别名,该别名是用于调用Servlet的快捷URL。快捷URL中不包括Servlet名称。

2.在﹤FORM﹥标记中指定调用Servlet

可以在﹤FORM﹥标记中调用Servlet。HTML格式使用户能在Web页面(即从浏览器)上输入数据,并向Servlet提交数据。例如:

  1. FORMMETHOD="GET"ACTION="/servlet/myservlet"﹥  
  2. ﹤OL﹥  
  3. INPUTTYPE="radio"NAME="broadcast"VALUE="am"﹥AM﹤BR﹥  
  4. INPUTTYPE="radio"NAME="broadcast"VALUE="fm"﹥FM﹤BR﹥  
  5. ﹤/OL﹥  
  6. (用于放置文本输入区域的标记、按钮和其它的提示符。)  
  7. ﹤/FORM﹥ 

ACTION特性表明了用于调用Servlet的URL。关于METHOD的特性,如果用户输入的信息是通过GET方法向Servlet提交的,则Servlet必须优先使用doGet()方法。反之,如果用户输入的信息是通过POST方法向Servlet提交的,则Servlet必须优先使用doPost()方法。使用GET方法时,用户提供的信息是查询字符串表示的URL编码。无需对URL进行编码,因为这是由表单完成的。然后URL编码的查询字符串被附加到ServletURL中,则整个URL提交完成。URL编码的查询字符串将根据用户同可视部件之间的交互操作,将用户所选的值同可视部件的名称进行配对。例如,考虑前面的HTML代码段将用于显示按钮(标记为AM和FM),如果用户选择FM按钮,则查询字符串将包含name=value的配对操作为broadcast=fm。因为在这种情况下,Servlet将响应HTTP请求,因此Servlet应基于HttpServlet类。Servlet应根据提交给它的查询字符串中的用户信息使用的GET或POST方法,而相应地使用doGet()或doPost()方法。

3.在﹤SERVLET﹥标记中指定调用Servlet

当使用﹤SERVLET﹥标记来调用Servlet时,如同使用﹤FORM﹥标记一样,无需创建一个完整的HTML页面。作为替代,Servlet的输出仅是HTML页面的一部分,且被动态嵌入到原始HTML页面中的其它静态文本中。所有这些都发生在服务器上,且发送给用户的仅是结果HTML页面。建议在Java服务器页面(JSP)文件中使用﹤SERVLET﹥标记。请参阅有关JSP技术

原始HTML页面中包含﹤SERVLET﹥和﹤/SERVLET﹥标记。Servlet将在这两个标记中被调用,且Servlet的响应将覆盖这两个标记间的所有东西和标记本身。如果用户的浏览器可以看到HTML源文件,则用户将看不到﹤SERVLET﹥和﹤/SERVLET﹥标记。要在DominoGoWebserver上使用该方法,请启用服务器上的服务器端包括功能。部分启用过程将会涉及到添加特殊文件类型SHTML。当Web服务器接收到一个扩展名为SHTML的Web页面请求时,它将搜索﹤SERVLET﹥和﹤/SERVLET﹥标记。对于所有支持的Web服务器,WebSphere应用服务器将处理SERVLET标记间的所有信息。下列HTML代码段显示了如何使用该技术。

  1. ﹤SERVLET NAME="myservlet" CODE="myservlet.class" CODEBASE="url" initparm1="value"﹥  
  2. ﹤PARAM NAME="parm1" VALUE="value"﹥  
  3. ﹤/SERVLET﹥ 

使用NAME和CODE属性带来了使用上的灵活性。可以只使用其中一个属性,也可以同时使用两个属性。NAME属性指定了Servlet的名称(使用WebSphere应用服务器管理器配置的),或不带.class扩展名的Servlet类名。CODE属性指定了Servlet类名。使用WebSphere应用服务器时,建议指定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创建了部分HTML文件,所以当创建Servlet时,将可能会使用HttpServlet的一个子类,并优先使用doGet()方法(因为GET方法是提供信息给Servlet的缺省方法)。另一个选项是优先使用service()方法。另外,CODEBASE是可选的,它指定了装入Servlet的远程系统的URL。请使用WebSphere应用服务器管理器来从JAR文件配置远程Servlet装入系统。

在上述的标记示例中,initparm1是初始化参数名,value是该参数的值。可以指定多个“名称-值”对的集合。利用ServletConfig对象(被传递到Servlet的init()方法中)的getInitParameterNames()和getInitParameter()方法来查找参数名和参数值的字符串数组。在示例中,parm1是参数名,并在初始化Servlet后被才被设置某个值。因为只能通过使用“请求”对象的方法来使用以﹤PARAM﹥标记设置的参数,所以服务器必须调用Servletservice()方法,以从用户处传递请求。要获得有关用户的请求信息,请使用getParameterNames()、getParameter()和getParameterValues()方法。

初始化参数是持续的。假设一台客户机通过调用一个包含某些初始化参数的SHTML文件来调用Servlet。并假设第二台客户机通过调用第二个SHTML文件来执行调用Servlet调用同一个Servlet,且该SHTML中未指定任何初始化参数。那么***次调用Servlet时所设置的初始化参数将一直可用,并且通过所有其它SHTML文件而调用的所有后继Servlet都不会更改该参数。直到Servlet调用了destroy()方法后,才能重新设置初始化参数。例如,如果另一个SHTML文件指定了另一个不同的初始化参数值,虽然已此时已装入了Servlet,但该值仍将被忽略。

4.在JSP文件中调用Servlet

可以从JavaServer页面(JSP)文件中调用Servlet。请参阅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,并将其输出返回到一个字符串中。

(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调用Servlet脚本示例是以Microsoft Visual Basic Scripting(VBScript)书写的。

  1. ﹤%  
  2. ' Small sample asp file to show the capabilities of the servlets and the ASP GateWay ...  
  3. %﹥  
  4. ﹤H1﹥ Starting the ASP-﹥Java Servlet demo﹤/H1﹥  
  5. ﹤%  
  6. ' Create a Servlet gateway object and initialize it ...  
  7. Set javaasp = Server.CreateObject("AspToServlet.AspToServlet")  
  8. ' Setting these properties is only for the sake of demo.  
  9. ' These are the default values ...  
  10. javaasp.OnTest = False 
  11. javaasp.WriteHeaders = False 
  12. ' Add several variables ...  
  13. javaasp.VarValue("gal") = "lag"  
  14. javaasp.VarValue("pico")= "ocip"  
  15. javaasp.VarValue("tal") = "lat"  
  16. javaasp.VarValue("paz") = "zap"  
  17. javaasp.VarValue("variable name with spaces") = "variable value with spaces"  
  18. %﹥  
  19. ﹤BR﹥  
  20. Lets check the variables  
  21. ﹤%  
  22. Response.Write("variable gal = ")  
  23. Response.Write(javaasp.VarValue("gal"))  
  24. %﹥  
  25. ﹤BR﹥  
  26. ﹤%  
  27. Response.Write("variable picopico = " & javaasp.VarValue("pico"))  
  28. %﹥  
  29.  
  30. ﹤BR﹥  
  31. ﹤HR﹥  
  32. ﹤%  
  33. galout = javaasp.ExecServletToString("SnoopServlet")  
  34. If javaasp.WriteHeaders = True Then  
  35. %﹥  
  36. Headers were written ﹤%  
  37. Else  
  38. %﹥  
  39. Headers were not written ﹤%  
  40. End If  
  41. Response.Write(galout)  
  42. %﹥  
  43. ﹤H1﹥ The End ...﹤/H1﹥ 

调用Servlet的方法也是根据程序员自身的要求来,那么以上的这些方法希望对你在工作中要实现调用Servlet有帮助。

【编辑推荐】

  1. Servlet配置及开发运行测试
  2. 选择JSP开发工具
  3. Servlet和JSP路径详细介绍
  4. 如何提升Servlet和JSP应用程序的效率
  5. JSP和Servlet中的几个编码的作用及原理
责任编辑:仲衡 来源: 网络学院
相关推荐

2024-01-12 08:40:56

Python计算质数质数

2009-07-09 14:32:39

2009-05-18 17:16:50

2009-07-27 14:41:33

ASP.NET调用存储

2009-10-20 15:39:20

Linux压缩

2009-07-08 12:56:32

编写Servlet

2009-07-09 13:04:37

Servlet接口

2009-07-06 13:18:35

Servlet方法

2022-07-05 15:15:11

Python日期命令

2010-08-16 16:39:48

DIV内容居中

2020-09-14 14:18:05

Vue和React

2009-09-18 13:47:17

CLR类库

2009-07-09 13:45:06

Servlet基本结构

2010-04-19 16:17:39

防火墙网络管理服务器安全

2009-07-06 09:23:51

Servlet定义

2009-07-08 10:02:41

Servlet 3.0

2009-02-25 09:52:14

类型转换.NET 强制转型

2019-03-27 14:41:41

Python数据库Windows

2021-07-05 15:22:03

Servlet过滤器客户端

2009-07-03 17:18:34

Servlet多线程
点赞
收藏

51CTO技术栈公众号