2016-05-16 2 views
0

У меня есть страница JSP, я пытаюсь загрузить данные из некоторого XML-файла, когда я запускаю страницу JSP я получаю следующее сообщение об ошибке:Исключение обработки JSP страница - DocumentBuilder.parse

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

В этой строке кода:

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

application.getRealPath ("/ news.xml")) должны возвращает что-то вроде этого:
C:/Ваш/путь/к/новый.xml.

Вот почему вы получили следующее сообщение об ошибке в вашем StackTrace:
java.net.MalformedURLException: неизвестный протокол: с
C:/... это просто не действует протокол.

  • Добавить новый.xml под вашу папку проекта где-то вне вашей папки webapp/WebContent. Получите доступ к нему с помощью относительного пути.

  • append "file: ///" для строки, которая application.getRealPath ("/ news.xml")) возвращает.
    db.parse("file:///" + application.getRealPath("/news.xml"));
    Путь к db.parse() будет выглядеть следующим образом:
    файла: /// C: /your/path/to/xml/news.xml

Либо вариант сделает трюк.

Надеюсь, это поможет.

+0

У меня этот файл. Я добавил код здесь. – DAVIDBALAS1

+0

Если у вас есть файл, вы можете получить к нему доступ с относительным путем вместо метода getRealPath(). –

+0

Можете ли вы объяснить, как? Путь: C: \ Users \ dodob \ Desktop \ לימודים \ מחשבים \ EEworkspacee \ Final \ WebContent \ news.xml Также есть ли проблемы с еврейскими буквами? Когда я добавил изображение, его не было. – DAVIDBALAS1

Смежные вопросы