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>