处理JSP页面时发生异常 - DocumentBuilder.parse

时间:2016-05-16 06:15:07

标签: jsp

我有一个JSP页面,我尝试从某个xml文件加载信息,当我运行JSP页面时,我收到以下错误:

java.io.IOException: An exception occurred processing JSP page /guest/news.jsp at line 7

4: <%
5:  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
6:  DocumentBuilder db = dbf.newDocumentBuilder();
7:  Document doc = db.parse(application.getRealPath("/news.xml"));
8:  NodeList Title = doc.getElementsByTagName("Title");
9:  NodeList Date = doc.getElementsByTagName("Date");
10:     NodeList Text = doc.getElementsByTagName("Text");

堆栈跟踪:

Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


root cause
java.net.MalformedURLException: unknown protocol: c
    java.net.URL.<init>(Unknown Source)
    java.net.URL.<init>(Unknown Source)
    java.net.URL.<init>(Unknown Source)
    com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    org.apache.jsp.guest.news_jsp._jspService(news_jsp.java:120)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我无法理解这个错误以及它为什么会发生。

这是我的jsp和xml文件的代码:

JSP -

<%@ page contentType="text/html; charset=utf-8" language="java"
    import="javax.xml.parsers.DocumentBuilderFactory,javax.xml.parsers.DocumentBuilder,org.w3c.dom.*"
    errorPage=""%>
<%
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(application.getRealPath("/news.xml"));
    NodeList Title = doc.getElementsByTagName("Title");
    NodeList Date = doc.getElementsByTagName("Date");
    NodeList Text = doc.getElementsByTagName("Text");
    NodeList Picture = doc.getElementsByTagName("Picture");
    NodeList Journalist = doc.getElementsByTagName("Journalist");
%>

<html>
<head>
<title>חדשות</title>
<style type="text/css">
td {
    align: right;
    direction: rtl;
}
</style>
</head>
<body>
    <br />
    <h1 align="center" style="color: red">חדשות</h1>
    <marquee behavior="scroll" height="400" width="80%" direction="UP">
        <table width="70%" align="center">
            <%
                int i;
                for (i = 0; i <= Title.getLength() - 1; i++) {
            %>
            <tr>
                <td
                    style="border-style: double; border-color: aqua; border-right-color: white;">
                    <h6><%=Title.item(i).getFirstChild().getNodeValue()%></h6> <%=Text.item(i).getFirstChild().getNodeValue()%>
                    <h6 style="color: red"><%=Date.item(i).getFirstChild().getNodeValue()%></h6>
                    <h6 style="color: blue"><%=Journalist.item(i).getFirstChild().getNodeValue()%></h6>
                </td>
                <td style="border-style: double; border-color: aqua;"><img
                    src='<%="../img/" + Picture.item(i).getFirstChild().getNodeValue()%>'
                    width="200" /></td>
            </tr>
            <%
                }
            %>
        </table>
    </marquee>
</body>
</html>

XML -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<xmldata>
    <message>
        <Title>תלמידים שובתים בחמש רשויות: "חייבים להתייחס אלינו"</Title>
        <Date>08.05.16</Date>
        <Text>במסגרת "השביתה הנודדת" שעליה הכריזה מועצת התלמידים לא הגיעו
            התיכוניסטים לבתי ספר באופקים, יקנעם, ראש העין, רמת גן ודיר אל-אסד.
            מחר יושבתו חמש רשויות אחרות. "אי-אפשר להתעלם מהפגיעה בנו", הם אומרים</Text>
        <Picture>2.jpg</Picture>
        <Journalist>איתי בלומנטל</Journalist>
    </message>
    <message>
        <Title>מלא אך שפוי: התוכנית להורדת מחירי הלחם המלא </Title>
        <Date>03/05/2016</Date>
        <Text>משרד הבריאות נחוש לפקח על מחירי הלחם המלא כדי שכולנו נוכל להנות
            מהייתרונות של לחם בריא, כי מסתבר שלייצר אותו לא עולה יותר מלייצר את
            הלחם הרגיל.
        </Text>
        <Picture>3.jpg</Picture>
        <Journalist>נגה ניר נאמן</Journalist>
    </message>
</xmldata>

我甚至无法理解错误以及如何解决它。

1 个答案:

答案 0 :(得分:1)

在这行代码中:

 Document doc = db.parse(application.getRealPath("/news.xml"));

application.getRealPath(&#34; /news.xml"))必须返回如下内容:
C:/Your/path/to/new.xml 即可。

这就是你在stacktrace中出现以下错误的原因:
java.net.MalformedURLException:未知协议:c
C:/ ... 根本就不是有效的协议。

  • 将new.xml放在webapp / WebContent文件夹之外的某个项目文件夹下。使用相对路径访问它。

  • 追加&#34; file:///&#34;到 application.getRealPath(&#34; /news.xml"))返回的字符串。
    db.parse("file:///" + application.getRealPath("/news.xml"));
    db.parse()的路径如下所示:
    file:/// C:/your/path/to/xml/news.xml

任何一个选项都可以解决问题。

希望它有所帮助。