Sky's blog

          我和我追逐的夢

          常用鏈接

          統計

          其他鏈接

          友情鏈接

          最新評論

          解決Jetty下EL版本沖突的問題

              今天用jetty做嵌入式web container,來做web項目的integration test,結果發現出現在渲染使用EL表達式的jsp頁面時出現異常:

              javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;

          Caused by: java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;
          at org.apache.jasper.compiler.JspUtil.getExpressionFactory(JspUtil.java:1189)
          at org.apache.jasper.compiler.JspUtil.validateExpressions(JspUtil.java:651)
          at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:760)
          at org.apache.jasper.compiler.Node$ELExpression.accept(Node.java:947)
          at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2297)
          at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2347)
          at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2353)
          at org.apache.jasper.compiler.Node$Root.accept(Node.java:499)
          at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2297)
          at org.apache.jasper.compiler.Validator.validate(Validator.java:1882)
          at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:223)
          at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
          at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
          at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
          at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)
          at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
          at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:594)
          at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:486)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
          at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:542)
          at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
          at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065)
          at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:413)
          at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
          at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
          at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:271)
          at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:98)
          at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
          at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
          at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1157)
          at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927)
          at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
          at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
          at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
          at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:594)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1366)
          at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
          at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1337)
          at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:484)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
          at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
          at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
          at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065)
          at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:413)
          at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
          at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
          at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
          at org.eclipse.jetty.server.Server.handle(Server.java:351)
          at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454)
          at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:890)
          at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:944)
          at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634)
          at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)
          at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77)
          at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609)
          at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)
          at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
          at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
          at java.lang.Thread.run(Thread.java:619)

              檢查了一下,發現javax.el.ExpressionFactory.newInstance()這個方法是EL2.2版本之后才有的方法,而在EL2.1之中是沒有這個方法的,問題很明顯:org.apache.jasper中試圖調用2.2版本的EL,當時提供的EL的版本是2.1版本,所以解決的方式無非就是兩個,要不降低org.apache.jasper的版本,要不提升el的版本。考慮到現在使用的jetty已經是最新的版本8.1.2.v20120308,因此提升EL的版本為2.2更為合適。

               修改pom.xml文件,將
          <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.1</version>
          <scope>provided</scope>
          </dependency>
               修改為2.2版本,上述問題順利解決,之前的el異常不再出現。

          posted on 2012-05-25 07:11 sky ao 閱讀(11115) 評論(2)  編輯  收藏 所屬分類: web

          評論

          # re: 解決Jetty下EL版本沖突的問題 2012-05-27 12:14 廈門注冊公司

          這個沖突很有感覺的  回復  更多評論   

          # re: 解決Jetty下EL版本沖突的問題 2014-10-13 16:17 樂森林

          為什么我測試了沒用  回復  更多評論   

          主站蜘蛛池模板: 阿坝| 庆安县| 香格里拉县| 黄陵县| 株洲市| 当雄县| 灵石县| 贵溪市| 望江县| 丰城市| 商水县| 田东县| 南岸区| 东源县| 镇原县| 彝良县| 象州县| 沂水县| 辉南县| 福海县| 马龙县| 炎陵县| 教育| 祁阳县| 海安县| 潞西市| 清丰县| 长阳| 景德镇市| 麻江县| 磐石市| 义乌市| 马关县| 奎屯市| 辽源市| 阿拉善盟| 青州市| 潮安县| 嘉鱼县| 仁寿县| 高要市|