我有一个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>
我甚至无法理解错误以及如何解决它。
答案 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
任何一个选项都可以解决问题。
希望它有所帮助。