Tomcat 8嵌入式模式下的JasperInitializer

我正在将嵌入式tomcat应用程序从7.0.59迁移到tomcat 8.0.20,在启动嵌入式服务器并尝试访问主页时更新了Tomcat版本之后,

NullPOinterException

ERROR {org.apache.catalina.core.ApplicationDispatcher} -  Servlet.service() for servlet bridgeservlet threw exception

java.lang.NullPointerException

at org.apache.jasper.JspCompilationContext.getTldResourcePath(JspCompilationContext.java:536)

at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:410)

at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:469)

at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1430)

at org.apache.jasper.compiler.Parser.parse(Parser.java:139)

at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)

at org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)

at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)

at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)

at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)

at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)

at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:570)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:356)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)

at org.wso2.carbon.ui.JspServlet.service(JspServlet.java:155)

at org.wso2.carbon.ui.TilesJspServlet.service(TilesJspServlet.java:80)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)

at org.eclipse.equinox.http.helper.ContextPathServletAdaptor.service(ContextPathServletAdaptor.java:37)

at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)

at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128)

at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:68)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)

at org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721)

at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466)

at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391)

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318)

at org.eclipse.equinox.http.servlet.internal.RequestDispatcherAdaptor.forward(RequestDispatcherAdaptor.java:30)

at org.eclipse.equinox.http.helper.ContextPathServletAdaptor$RequestDispatcherAdaptor.forward(ContextPathServletAdaptor.java:362)

at org.apache.tiles.servlet.context.ServletTilesRequestContext.forward(ServletTilesRequestContext.java:198)

at org.apache.tiles.servlet.context.ServletTilesRequestContext.dispatch(ServletTilesRequestContext.java:185)

at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:419)

at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:370)

at org.wso2.carbon.ui.action.ActionHelper.render(ActionHelper.java:52)

at org.wso2.carbon.ui.TilesJspServlet.service(TilesJspServlet.java:101)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)

at org.eclipse.equinox.http.helper.ContextPathServletAdaptor.service(ContextPathServletAdaptor.java:37)

at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)

at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128)

at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:68)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)

at org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:61)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99)

at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:49)

at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62)

at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)

at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)

at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:745)

我调试了tomcat8源,发现tldCache里面EmbeddedServletOption是null。这是设定好的onStartup的方法JasperInitializer

我该怎么做才能确保它被调用,或者如何org.apache.jasper.servlet.JasperInitializer.onStartup

在Web应用程序启动期间手动调用它?

我将tomcat 8嵌入应用程序中。

回答:

该问题的解决方案有些隐藏,似乎没有记录在案,但有时可以用一行代码解决。

context.addServletContainerInitializer(new JasperInitializer(), null);

我承认一旦添加服务器,启动速度很慢,但是现在可以正常使用了。

以上是 Tomcat 8嵌入式模式下的JasperInitializer 的全部内容, 来源链接: utcz.com/qa/423129.html

回到顶部