Java 需要帮助理解TomcatServlet中的异常吗
我有以下例外:Java 需要帮助理解TomcatServlet中的异常吗,java,tomcat,servlets,servlet-filters,Java,Tomcat,Servlets,Servlet Filters,我有以下例外: Servlet.service() for servlet indexpage threw exception java.lang.NullPointerException at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:675) at org.apache.catalina.servlets.DefaultServlet.doHead(DefaultServlet.
Servlet.service() for servlet indexpage threw exception java.lang.NullPointerException
at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:675)
at org.apache.catalina.servlets.DefaultServlet.doHead(DefaultServlet.java:351)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at planplatform.cors.CorsFilter.doFilter(CorsFilter.java:61)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Unknown Source)
此异常中唯一属于我的代码是CorsFilter:
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
String origin = req.getHeader("Origin");
boolean shouldAllowCorsOnOrigin = allowCorsOnOrigin(origin);
if (shouldAllowCorsOnOrigin)
{
resp.addHeader("Access-Control-Allow-Origin", origin);
resp.addHeader("Access-Control-Allow-Credentials", "true");
resp.setHeader("Allow", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS");
String headers = req.getHeader("Access-Control-Request-Headers");
String method = req.getHeader("Access-Control-Request-Method");
resp.addHeader("Access-Control-Allow-Methods", method);
resp.addHeader("Access-Control-Allow-Headers", headers);
if ("options".equalsIgnoreCase(req.getMethod()))
{
resp.setContentType("text/plain");
resp.getWriter().flush();
return;
}
}
// Fix ios6 caching post requests
if ("post".equalsIgnoreCase(req.getMethod())) {
resp.addHeader("Cache-Control", "no-cache");
}
if (filterChain != null) {
filterChain.doFilter(req, resp);
}
shoulldAllowCorsonOrgin为false,因此代码不会进入大if
知道为什么会发生异常吗?您应该看看InExpage servlet,可能有问题,因为在stacktrace中,您在
servlet.service()
期间有空指针,servlet容器调用此方法以允许servlet响应请求。在此之前,执行init
方法(在indexpage)。你能在Expage servlet中给我们看一下吗?我会得到Tomcat的版本号,并查找该版本的DefaultServlet的源代码。我查阅了6.0.26,但堆栈跟踪中的行号与可能引发此错误的行号不一致
DefaultServlet中引发错误的方法取决于从其自身上下文或JNDI查找中获得的资源。在日志中进一步查看消息为“无资源”的异常。DefaultServlet.init()方法使用两个常量来查找资源——服务器环境是否有其中一个资源?CorstFilter的第61行是什么?filterChain.doFilter(req,resp);该异常不会在本地发生,但仅在生产服务器上发生,我无法在调试模式下再现。由于请求通过筛选器链,所以
CorsFilter
位于堆栈跟踪中,但它不是源于那里。您的indexpage
servlet是什么样子的?代码没有到达indexpage servlet。如果问题出现在indexpage servlet中,我会在堆栈中看到它吗?异常似乎发生在调用servlet本身之前,不是吗?servlet非常复杂,不幸的是我不能分享它的代码是的,这也是我尝试过的-行号没有任何意义。如果你需要帮助,你必须提供更多信息。服务器使用的是什么版本,您如何知道,以便其他人可以查看它?是的,诊断此版本需要tomcat的确切版本