要调用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提交数据。例如:
- ﹤FORMMETHOD="GET"ACTION="/servlet/myservlet"﹥
- ﹤OL﹥
- ﹤INPUTTYPE="radio"NAME="broadcast"VALUE="am"﹥AM﹤BR﹥
- ﹤INPUTTYPE="radio"NAME="broadcast"VALUE="fm"﹥FM﹤BR﹥
- ﹤/OL﹥
- (用于放置文本输入区域的标记、按钮和其它的提示符。)
- ﹤/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代码段显示了如何使用该技术。
- ﹤SERVLET NAME="myservlet" CODE="myservlet.class" CODEBASE="url" initparm1="value"﹥
- ﹤PARAM NAME="parm1" VALUE="value"﹥
- ﹤/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)书写的。
- ﹤%
- ' Small sample asp file to show the capabilities of the servlets and the ASP GateWay ...
- %﹥
- ﹤H1﹥ Starting the ASP-﹥Java Servlet demo﹤/H1﹥
- ﹤%
- ' Create a Servlet gateway object and initialize it ...
- Set javaasp = Server.CreateObject("AspToServlet.AspToServlet")
- ' Setting these properties is only for the sake of demo.
- ' These are the default values ...
- javaasp.OnTest = False
- javaasp.WriteHeaders = False
- ' Add several variables ...
- javaasp.VarValue("gal") = "lag"
- javaasp.VarValue("pico")= "ocip"
- javaasp.VarValue("tal") = "lat"
- javaasp.VarValue("paz") = "zap"
- javaasp.VarValue("variable name with spaces") = "variable value with spaces"
- %﹥
- ﹤BR﹥
- Lets check the variables
- ﹤%
- Response.Write("variable gal = ")
- Response.Write(javaasp.VarValue("gal"))
- %﹥
- ﹤BR﹥
- ﹤%
- Response.Write("variable picopico = " & javaasp.VarValue("pico"))
- %﹥
- ﹤BR﹥
- ﹤HR﹥
- ﹤%
- galout = javaasp.ExecServletToString("SnoopServlet")
- If javaasp.WriteHeaders = True Then
- %﹥
- Headers were written ﹤%
- Else
- %﹥
- Headers were not written ﹤%
- End If
- Response.Write(galout)
- %﹥
- ﹤H1﹥ The End ...﹤/H1﹥
调用Servlet的方法也是根据程序员自身的要求来,那么以上的这些方法希望对你在工作中要实现调用Servlet有帮助。
【编辑推荐】