在JSP中使用已从servlet传递的变量?

时间:2014-06-23 16:46:30

标签: java xml jsp servlets

我试图在我从servlet传递的JSP中使用xml字符串。变量很好。我使用代码:

request.setAttribute("xml",xmlDoc_str2);
request.getRequestDispatcher("./jsp/pdirdetail.jsp").forward(request, response);

但是,我不确定如何在jsp端使用它。我需要解析它并在JSP中读取它。我使用的代码是:

<%=request.getAttribute("xml") %>
<%
        try{
            DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(${xml}));
        }
        catch(Exception e){}

    %>

显然,我并不喜欢我引用该变量的方式。我不确定是否有另一种方法可以做到这一点,或者我是否遗漏了某些东西。

1 个答案:

答案 0 :(得分:1)

您应该尝试使用 XML Tag Library ,这样可以轻松指定和选择XML文档的各个部分。

问题在于线下。你不能在Scriptlet中混合使用JSTL。

new StringReader(${xml})

始终try to avoid Scriptlet使用JSP Standard Tag Library或JSP表达式语言。


使用XML标记库的示例代码:

XML:

<books>
<book>
  <name>Padam History</name>
  <author>ZARA</author>
  <price>100</price>
</book>
<book>
  <name>Great Mistry</name>
  <author>NUHA</author>
  <price>2000</price>
</book>
</books>

的Servlet

// assign the XML in xmlDoc_str2 and set it as request attribute
request.setAttribute("xml",xmlDoc_str2);
request.getRequestDispatcher("./jsp/pdirdetail.jsp").forward(request, response);

JSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

<html>
<head>
  <title>JSTL x:parse Tags</title>
</head>
<body>
<h3>Books Info:</h3>

<x:parse xml="${xml}" var="output"/>
<b>The title of the first book is</b>: 
<x:out select="$output/books/book[1]/name" />
<br>
<b>The price of the second book</b>: 
<x:out select="$output/books/book[2]/price" />

</body>
</html>

输出:

Books Info:
The title of the first book is:Padam History
The price of the second book: 2000