我不能使用JSTL标记读取rss

时间:2011-01-16 07:08:41

标签: jsp jstl

我想从其他网站上阅读rss。但我无法阅读rss。我使用Netbeans,我已经添加了JSTL库。我可以使用forEach标签,但每次使用xml标签时都会显示错误。这是我读取rss的代码。我不知道如何用JSTL标签读取rss请帮帮我。


<!-- Filename: ShowStudents.jsp -->
<%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<HTML>
<BODY>
<c:import var="xmlDoc" url="http://www.manager.co.th/RSS/Home/Breakingnews.xml"/>
<x:parse var="parsedDocument" xml="${xmlDoc}"/>
<table>
<tr>
<th>Title : </th>
<th>Link : </th>
</tr>

<x:forEach select="$parsedDocument/channel/item"> // This code I ever been change to $parsedDocument/rss/channel/ and $parsedDocument/rss/channel/title ,but it show same error. 
<tr>
<td> <x:out select="title" /> </td>
<td> <x:out select="link" /> </td>
</tr>
</x:forEach>
</table>
</BODY>
</HTML>

当我运行此代码时,它显示如下错误。如何用JSTL标签读取rss请帮帮我。

  

描述服务器遇到了   内部错误()阻止了它   完成此请求。

     

例外

     

org.apache.jasper.JasperException:   javax.servlet.ServletException:   javax.servlet.jsp.JspException:   org.xml.sax.SAXParseException:内容   不允许在prolog中。   org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:527)   org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)   org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)   org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)   javax.servlet.http.HttpServlet.service(HttpServlet.java:717)   Filter.ThaiRequest.doFilter(ThaiRequest.java:38)   org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

     

根本原因

     

javax.servlet.ServletException:   javax.servlet.jsp.JspException:   org.xml.sax.SAXParseException:内容   不允许在prolog中。   org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)   org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)   org.apache.jsp.test_jsp._jspService(test_jsp.java:101)   org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)   javax.servlet.http.HttpServlet.service(HttpServlet.java:717)   org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)   org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)   org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)   javax.servlet.http.HttpServlet.service(HttpServlet.java:717)   Filter.ThaiRequest.doFilter(ThaiRequest.java:38)   org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

     

根本原因

     

org.xml.sax.SAXParseException:内容   不允许在prolog中。   com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)   com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)   org.apache.taglibs.standard.tag.common.xml.ParseSupport.parseInputSource(ParseSupport.java:227)   org.apache.taglibs.standard.tag.common.xml.ParseSupport.parseInputSourceWithFilter(ParseSupport.java:193)   org.apache.taglibs.standard.tag.common.xml.ParseSupport.parseReaderWithFilter(ParseSupport.java:199)   org.apache.taglibs.standard.tag.common.xml.ParseSupport.parseStringWithFilter(ParseSupport.java:206)   org.apache.taglibs.standard.tag.common.xml.ParseSupport.doEndTag(ParseSupport.java:138)   org.apache.jsp.test_jsp._jspx_meth_x_005fparse_005f0(test_jsp.java:150)   org.apache.jsp.test_jsp._jspService(test_jsp.java:80)   org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)   javax.servlet.http.HttpServlet.service(HttpServlet.java:717)   org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)   org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)   org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)   javax.servlet.http.HttpServlet.service(HttpServlet.java:717)   Filter.ThaiRequest.doFilter(ThaiRequest.java:38)   org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

更新

现在我可以在servlet中用JDOM读取xml,但是我无法在jsp文件中显示。我可以在servlet中显示xml中的所有数据。我不知道如何仅在jsp文件中显示title和link标签中的数据。请帮帮我。

try {

     ReadXMLFile rxml = new ReadXMLFile();
     NodeList nodes = (NodeList) rxml.readXML();
     for (int i = 0; i < nodes.getLength(); i++) {

       /* I can display all data from xml. I want to display data from title and link tag only in JSP file. */
     System.out.println(nodes.item(i).getNodeValue());

        }

1 个答案:

答案 0 :(得分:1)

http://www.manager.co.th/RSS/Home/Breakingnews.xml处的文档似乎以Byte-Order-Mark开头。

在Java中,只有在XML解析器直接从输入流中读取时才会正确处理。但是,在您的情况下,您正在将文档读入String,然后将该String传递给<x:parse>标记,并且因为它是从String中读取的,所以它不处理BOM,它认为它是垃圾,并为您提供“prolog中不允许内容”错误。

我认为这在JSP / JSTL中不易修复。我认为您需要编写一个自定义标记来直接从输入流解析文档,或者使用MVC结构在servlet / controller中进行解析,然后转发到JSP以显示数据。