test.xml
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<customer>
<name>小名</name>
</customer>
</xml>
a.jsp
<%@ page contentType= "text/html;charset = gb2312" language = "java"%>
<%@ page import  = "javax.xml.parsers.DocumentBuilder,
javax.xml.parsers.DocumentBuilderFactory,
javax.xml.parsers.*,
javax.xml.transform.*,
javax.xml.transform.dom.DOMSource,
javax.xml.transform.stream.StreamResult,
org.w3c.dom.*,
java.io.*
"%>
<%
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(pageContext.getServletContext().getResourceAsStream("/test.xml"));
doc.normalize();
NodeList names = doc.getElementsByTagName("name");
String name = names.item(0).getFirstChild().getNodeValue();
name = new String(name.getBytes("gb2312"));
out.println(name);
%>为什么我执行a.jsp后会报错:
org.apache.jasper.JasperException: InputStream cannot be null
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.IllegalArgumentException: InputStream cannot be null
javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
org.apache.jsp.sast.a_jsp._jspService(a_jsp.java:56)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

解决方案 »

  1.   

    可能是xml文件没有找到
      建议lz先写一个判断文件是否存在
     存在的话在继续
      

  2.   

    为什么找不到xml文件,我放在同一个文件夹下面的,是不是要设置什么,测试环境winxp Tomcat5.0.27 。我运行其他jsp程序都很正常。
      

  3.   

    ("test.xml")) 改成这个试试~~
      

  4.   

    你用Tomcat环境来试一下好吗?
      

  5.   

    pageContext.getServletContext().getResourceAsStream("/test.xml")
    你把这个打印下  看看这个路径下 是否有那个xml文件
      

  6.   

    http://topic.csdn.net/u/20090831/12/94ba0bed-077c-4a89-97fb-cc14776b5c8a.html
    你可以看看我上个帖子给人家的那个例子
    你也可以写一个
      File   dir   =   new   File(pageContext.getServletContext().getResourceAsStream("/test.xml"));   
      if(dir.exists()){
       System.out.println("Th文件存在");  
    }else{
       System.out.println("文件不存在");  
    }
     
       
      

  7.   

    org.apache.jsp.sast.a_jsp._jspService(a_jsp.java:56)查看一下56行
      

  8.   

      File  dir  =  new  File("D:\\Tomcat 5.0\\webapps\\ROOT\\aa\\test.xml");  
      if(dir.exists()){ 
      out.println("Th文件存在");  
    }else{ 
      out.println("文件不存在");  

    文件判断是有的。
      

  9.   


    晕 你要看看pageContext.getServletContext().getResourceAsStream("/test.xml"))
    是否==D:\\Tomcat 5.0\\webapps\\ROOT\\aa\\test.xml
      

  10.   

    root cause java.lang.IllegalArgumentException: InputStream cannot be null 
    javax.xml.parsers.DocumentBuilder.parse(Unknown Source) 
    org.apache.jsp.sast.a_jsp._jspService(a_jsp.java:56) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802) Xml文件没有找到,路径不对,或者把你项目结构说一下,帮你检查一下
      

  11.   

    谢谢你们的回答,我是看到网上jsp读取xml文件的一个例子后在我自己的电脑上做实验,我就是把test.xml和a.jsp二个文件放在tomcat的ROOT文件夹下的aa文件夹里,我认为("/test.xml")就表示在同一个文件夹里,但不行,我换成("/bb/test.xml"),把test.xml文件放在ROOT文件夹下的bb文件夹里就可以了,这是为什么?
      

  12.   

    pageContext.getServletContext().getResourceAsStream("/test.xml")) 
     这个路径是自动获取
    D:\\Tomcat 5.0\\webapps\\ROOT\\aa\\test.xml 
    这个是写死的--------------------
    早给你说了  你把两个打印下  
    你就能看出两者不同了