2012-08-22 71 views
0

下面的行:調用的getServletContext在JSP生產的NullPointerException

<%! ServletContext context = getServletContext(); %> 
在jsp頁面

生成以下錯誤:

Uncaught exception from servlet 
javax.servlet.UnavailableException: java.lang.NullPointerException 
at org.mortbay.jetty.servlet.ServletHolder.makeUnavailable(ServletHolder.java:415) 
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:458) 
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:249) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:326) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135) 
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:447) 
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:452) 
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:458) 
at com.google.tracing.TraceContext.runInContext(TraceContext.java:698) 
. 
. 
. 

該web應用程序上GAE(谷歌應用服務引擎)上運行。可能是我得到這個錯誤的原因是什麼?當我在jsp中使用上述語句時,我做了什麼錯誤?

+0

是否提供web.xml而沒有錯誤? – MaVRoSCy

回答

4

有了這<%! %>你基本上聲明一個實例變量,所以實例化過程中得到初始化,但是ServletContext只有通過getServletContext()init(ServletConfig)被稱爲可用。在實例化之前調用這個實例方法是不可能的,因爲在實例化之前沒有實例的方法。

我不知道爲什麼你需要這個。也許你不知道隱含變量application,它已經在scriptlet範圍內可用?這已經代表了ServletContext。只需要時直接使用它。例如。

<% application.setAttribute("foo", "bar"); %> 

無關到具體的技術問題,你一個設計問題:Java code in JSP files should be avoided

相關問題