2011-02-03 26 views
5

我有彈簧mvc應用與虛擬jsp頁面(名爲htmlcontent.jsp)。 jsp只包含一個字符串:java.lang.NullPointerException在org.apache.jsp.foo_jsp._jspInit(foo_jsp.java:22)

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' 

所以,我想,那一定是正確的日誌文件。有人可以給我一個提示,我做錯了什麼?爲什麼空指針堆棧跟蹤不在日誌文件中?

+0

哪個版本的tomcat是這樣的? – skaffman 2011-02-03 13:12:09

+0

如果使用@Controller標記控制器,則不需要在springapp-web.xml中註冊bean。你能發佈你如何配置你的View Resolver嗎?我認爲你必須使用的URL是http:// localhost:8080/htmlcontent.htm,而不是你正在使用的那個。 – Javi 2011-02-03 13:22:00

回答

21
java.lang.NullPointerException 
    org.apache.jsp.htmlcontent_jsp._jspInit(htmlcontent_jsp.java:22) 

一個NPE在_jspInit()方法表示比您當前運行的一個不同及以上版本servletcontainer的JSP庫類路徑中的污染。

要解決這個問題,你需要確保你有任何servletcontainer特定的庫如jsp-api.jarservlet-api.jarel-api.jar等在你的webapp的/WEB-INF/lib而且可以肯定不是在JRE的JRE/libJRE/lib/ext

ServletContainer特定的庫屬於servlet容器本身(在Tomcat 6中,它們位於Tomcat/lib文件夾內),您不應該觸摸它們,也不要在它們的類路徑中的任何地方重複它們或使用不同的servlet容器。

相關問題