科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道在Java Web框架中创建VoiceXML页面

在Java Web框架中创建VoiceXML页面

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

对于绝大多数 Web 开发人员来说,输出 HTML、XHTML 乃至 XML 是一项微不足道的任务,它只不过是创建和部署 Web 应用程序的常规流程。从显示 Internet 页面到应答电话呼叫看似一个巨大的飞跃,但实际并非如此。在这篇文章中,您将看到相同的技术如何帮助您动态创建 Web 页面以

作者:中国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 文件了。但务必不要包含完整的文件路径,这会造成安全隐患!

动态 VoiceXML

    有了输出 VXML 文件的 servlet 之后,将其转换成动态输出 VXML 的 servlet(使用代码作为模型或模板)轻而易举。换句话说,您可以超越简单地载入静态的 VXML 文件,开始通过编程创建 VXML。

    当您开始考虑动态 VoiceXML 时,Java 平台就显示出了自己的优势。它提供了轻松输出 XML 的能力,还有与数据库、目录服务器、身份验证存储和会话的交互。此外,它还能够证实,构建动态 VXML 将消除基于语音的系统的部分刻板性。

    在这一节中,我将逐步为您介绍创建一个输出动态 VXML 的 Java servlet 的步骤。

通过 out.println() 输出 VXML

    您已经了解了如何访问 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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章