Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Servlet jsp的Servlet.service()会引发此异常?_Java_Jsp - Fatal编程技术网

Java 为什么Servlet jsp的Servlet.service()会引发此异常?

Java 为什么Servlet jsp的Servlet.service()会引发此异常?,java,jsp,Java,Jsp,我得到以下错误,可能是什么问题 我的上下文描述符: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schem

我得到以下错误,可能是什么问题

我的上下文描述符:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
   <servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>controller.UploadServlet</servlet-class>
  </servlet>
   <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/UploadServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

问题出在JSP中,很可能是在运行时对空对象调用方法

它发生在_jspInit()调用中,这有点不寻常。。。问题代码可能是一个方法声明,如



更新:我只是通过重写_jspInit()方法复制了这个。这就是你在做的吗?如果是这样,则不建议这样做-这就是为什么它以一个u.

开头,它可能是由类路径污染引起的。检查您的
/WEB-INF/lib
不包含类似
jspapi-*.jar

的内容,我有这个错误;它发生了一些自发的,页面将停止在浏览器中间的HTML标签(而不是一段代码)。真是莫名其妙

结果是,我让一个变量超出范围,垃圾收集器将其清除,然后我尝试使用它。因此,似乎是随机的时间

举一个更具体的例子。。。在一个方法中,我有如下内容:

Foo[] foos = new Foo[20];
// fill up the "foos" array...
return Arrays.asList(foos); // this returns type List<Foo>
Foo[]foos=newfoo[20];
//填充“foos”数组。。。
返回数组。asList(foos);//这将返回类型列表
现在在我的JSP页面中,我调用了该方法并使用它返回的List对象。列表对象由该“foos”数组支持;但是,当我从方法返回时,数组超出了范围(因为它是一个局部变量)。因此,在返回后不久,垃圾收集器清除了“foos”数组,而我对该列表的访问导致了一个NullPointerException,因为它的底层数组现在已被清除

当我写上面的方法时,我真的想知道这是否会发生


更深层次的根本问题是过早的优化。我想要一个列表,但我知道我正好有20个元素,所以我想我应该尝试比
newarraylist(20)
更高效,后者只设置初始大小为20,但可能比我使用的方法效率更低。当然,为了修复它,我只是创建了我的ArrayList,填充它,然后返回它。没有更奇怪的错误。

如果您的项目是基于Maven的,请记住为servlet api、jsp api等依赖项设置范围。否则,这些JAR将被导出到WEB-INF/lib,从而污染Tomcat服务器中的JAR。这会导致痛苦的问题

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.1</version>
  <scope>provided</scope>
</dependency>

javax.servlet
servlet api
2.5
假如
javax.servlet.jsp
jsp api
2.1
假如

我尽了最大的努力去遵循上面给出的答案。但我有以下同样的理由

注意:这适用于maven+eclipse+tomcat部署,尤其是SpringMVC面临的问题

1-如果您包括servlet和jsp依赖项,请在范围中标记它们

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
        <scope>provided</scope>
    </dependency>

它似乎来自于youy index.jsp文件,您能通过它吗?手动删除jar文件解决了这个问题。谢谢。thx这是我的情况,我怎样才能避免这种情况再次发生?我有同样的问题,但即使删除了文件,它仍然抛出相同的异常。如果您能帮助我,我将不胜感激,我的问题是,我有相同的错误,但我没有那个库,我有jsr173_api.jar、jsr181-api.jar、jsr250-api.jar和jaxb-api.jar,这会引起问题吗?从这个文件夹中删除jar解决了我的问题。Thanksi已经设置了上述范围,但它仍在发生,还有其他提示吗?
<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
        <scope>provided</scope>
    </dependency>
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
    <exclusions>
        <exclusion>
            <artifactId>servlet-api</artifactId>
            <groupId>javax.servlet</groupId>
        </exclusion>
        <exclusion>
            <artifactId>jsp-api</artifactId>
            <groupId>javax.servlet.jsp</groupId>
        </exclusion>
    </exclusions>
</dependency>