扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年9月22日
关键字:
在本页阅读全文(共9页)
部分可选的附加项
您可能希望向 servlet 代码中添加一些小附加项。它们都不是必需的,但都会给现有的版本增加一些健壮性和文档。
首先,您可能想允许用户通过 POST 请求访问 VXML。这可能在用户单击表单上的一个按钮时发生,该表单将对 VoiceXMLServlet
作出一个 POST 请求。在 servlet 中处理这一操作非常简单,只要编写一个委托已有 doGet()
方法的 doPost()
即可,如下所示:
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doGet(req, res); } |
另外一个简单的附加项用于允许浏览器切实获知您正在输出一个 VXML 文件的内容。为此,设置 servlet 中的 Content-disposition
响应头,如下:
// Let the browser know that XML is coming
out = res.getOutputStream();
res.setContentType("text/xml");
res.setContentLength((int)vxml.length());
res.addHeader("Content-Disposition",
"attachment; filename=" + vxml);
|
现在读取您的响应的浏览器(或其他代码)就可以发现所服务的 VXML 文件了。但务必不要包含完整的文件路径,这会造成安全隐患!
有了输出 VXML 文件的 servlet 之后,将其转换成动态输出 VXML 的 servlet(使用代码作为模型或模板)轻而易举。换句话说,您可以超越简单地载入静态的 VXML 文件,开始通过编程创建 VXML。
当您开始考虑动态 VoiceXML 时,Java 平台就显示出了自己的优势。它提供了轻松输出 XML 的能力,还有与数据库、目录服务器、身份验证存储和会话的交互。此外,它还能够证实,构建动态 VXML 将消除基于语音的系统的部分刻板性。
在这一节中,我将逐步为您介绍创建一个输出动态 VXML 的 Java servlet 的步骤。
您已经了解了如何访问 ServletOutputStream
,然后在输出流中插入字节。但如果从源(例如一个静态 VXML 文件)传输到输出流的不仅仅是字节,那么直接处理字节的方式几乎无法管理控制。
如果您希望自行创建 VXML,最好使用 PrintWriter
。利用这个类,您可发出整个字符串,使之对于创建和输出动态内容更为有用。这只需要对代码略加修改,如下所示:
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String vxmlDir = getServletContext().getInitParameter("vxml-dir"); BufferedInputStream bis = null; ServletOutputStream out = null; try { // Load the VXML file File vxml = new File(vxmlDir + "/" + VXML_FILENAME); FileInputStream fis = new FileInputStream(vxml); bis = new BufferedInputStream(fis); // Let the browser know that XML is coming PrintWriter out = res.getOutputStream(); res.setContentType("text/xml"); res.setContentLength((int)vxml.length()); // Output content using PrintWriter } finally { if (out != null) out.close(); if (bis != null) bis.close(); } } |
另外,不要忘记导入 java.io.PrintWriter
类:它不会自动成为对您的 servlet 的代码基可用。
使用 PrintWriter,您现在可以输出基于字符串的内容了。例如,清单 6 输出与 清单 1 相同的 VXML,但是通过 servlet 输出,并未从静态文件载入 VXML 内容。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。