org.apache.jsp.foo_jsp._jspInit(foo_jsp.java:22) 处的 java.lang.NullPointerException

Posted

技术标签:

【中文标题】org.apache.jsp.foo_jsp._jspInit(foo_jsp.java:22) 处的 java.lang.NullPointerException【英文标题】:java.lang.NullPointerException at org.apache.jsp.foo_jsp._jspInit(foo_jsp.java:22) 【发布时间】:2011-06-20 15:33:27 【问题描述】:

我有带有虚拟 jsp 页面(名为 htmlcontent.jsp)的 spring mvc 应用程序。 jsp 只包含一个字符串:

HalloText

这就是jsp的全部内容。控制器如下所示:

package springapp.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HtmlContentController 

    @RequestMapping("/htmlcontent.htm")
    public String view() 
        return "htmlcontent";
    

bean 被添加到我的 springapp-web.xml 中

<bean id="htmlcontent" class="springapp.web.HtmlContentController">

我的 web.xml 中的 servlet 映射定义如下:

<servlet-mapping>
    <servlet-name>springapp</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

当我拨打以下电话时:

http://localhost:8080/spring-mvc-hsqldb/htmlcontent.htm

然后我得到一个 NullPointerException:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: java.lang.NullPointerException
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:536)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:368)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.NullPointerException
    org.apache.jsp.htmlcontent_jsp._jspInit(htmlcontent_jsp.java:22)
    org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:164)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:338)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.30 logs.

在 catalina.out 中没有针对此错误的任何堆栈跟踪。当我尝试将 URL 更改为 http://localhost:8080/spring-mvc-hsqldb/htmlcondsasdadastent.htm 时,我得到:

WARNUNG: No mapping found for HTTP request with URI [/spring-mvc-hsqldb/htmlcondsasdadastent.htm] in DispatcherServlet with name 'springapp'

所以我认为,那一定是正确的日志文件。有人可以给我一个提示,我做错了什么?为什么日志文件中没有空指针堆栈跟踪?

【问题讨论】:

这是哪个版本的tomcat? 如果使用@Controller 标记控制器,则无需在springapp-web.xml 中注册bean。你能发布你是如何配置你的视图解析器的吗?而且我认为您必须使用的网址是localhost:8080/htmlcontent.htm,而不是您正在使用的网址。 当我调用 localhost:8080/htmlcontent.htm 时,我得到 404 错误(请求的资源 (/htmlcontent.htm) 不可用。") 【参考方案1】:
java.lang.NullPointerException
    org.apache.jsp.htmlcontent_jsp._jspInit(htmlcontent_jsp.java:22)

_jspInit() 方法中的 NPE 表示类路径被 JSP 库污染,而 JSP 库的版本与您当前运行的 servlet 容器不同。

要解决此问题,您需要确保在您的 web 应用程序的 /WEB-INF/lib 和确定不在 JRE 的 JRE/libJRE/lib/ext 中。

Servletcontainer 特定的库属于 servletcontainer 本身(在 Tomcat 6 中,它们位于 Tomcat/lib 文件夹中),您不应该触摸它们,并且在类路径中的任何地方都不能有它们的副本或不同的 servletcontainer。

【讨论】:

奇怪的是sts模板包含这个jar`s。我必须从 pom.xml 中删除它们才能使其正常工作 @BalusC ,有没有博客说明如何使用和导入 servletcontainer 特定库和 servletcontainer 独立库?例如,导入 javax.servlet:javax.servlet-api:3.1 jar,它是独立的 jar,只在提供的 socpe 中制作,但 servlet-api.jar 等效/替换 servletcontainer 特定库中的那个?有没有比较的图表/表格列表?

以上是关于org.apache.jsp.foo_jsp._jspInit(foo_jsp.java:22) 处的 java.lang.NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

ICPC2021银川C

约数和

B20J_1419_Red Is Good_期望DP

最长公共子序列__java实现

bzoj_2676_Contra

bzoj1068