如何在GWT项目中使用JSTL?

如何在GWT项目中使用JSTL?,gwt,jstl,Gwt,Jstl,我正在用GWT-2.0.3和eclipse插件构建一个GWT项目。 首先我尝试了JSTL1.2和servlet 2.5 我确实将jstl-1.2.jar添加到war/WEB-INF/lib 在web.xml中,我使用: <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.

我正在用GWT-2.0.3和eclipse插件构建一个GWT项目。 首先我尝试了JSTL1.2和servlet 2.5

  • 我确实将jstl-1.2.jar添加到war/WEB-INF/lib
  • 在web.xml中,我使用:

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" version="2.5">
    
    如果我将该项目部署到Tomcat6,它就可以正常工作。我在网上搜索,找到了一篇文章,所以我尝试了jstl-1.1和servlet2.4,但我仍然得到了这个例外。

    我发现GWT的jetty服务器版本应该是6.1,但我不确定,如果这是真的,它应该支持EE5,那么有人集成了GWT和JSTL吗?请帮忙!谢谢。

    我建议只切换到外部Java服务器(比如Tomcat,您似乎已经安装了它,它可以与您的配置配合使用)——问题要少得多,比尝试使用GWT附带的受损Jetty更容易

    有关说明,请参阅。如果你坚持使用GWT的Jetty,你将来只会遇到更多的问题


    更新,见下面Pascal Thivent的评论:

    @帕斯卡:很抱歉,我不是想说“切换到外部服务器,不要说话”,只是我看到很多人在配置GWT附带的Jetty时遇到问题-在某些情况下,这是因为配置与标准有所不同,因为GWT团队包括一个旧的/修改过的(我无法获得任何关于此的可靠信息)Jetty版本,例如,请参见此处的内容和评论,一些引用:

    注:我相信jetty的版本 随GWT一起装运的低于6.1.12和 因此,你必须去掉第一个 示例文档中的参数为 在码头6.1.12rc3中增加。参见 码头文件顶部的注释 页面


    据说Jetty支持servlet 2.5通过web.xml条目或 @资源注释。但是,我有 目前尚不清楚这是否得到支持 由GWT附带的Jetty版本提供。 如果有人知道 不是这样的,如果是这样的话,情况如何 好了,请告诉我

    当有人想要使用EJB时,会出现其他问题

    所有这些(可能以更简洁/隐晦的方式)都写在GWT的文档中——为此,我在上面提供了一个链接,指向解决此问题的确切段落。
    希望这能解决一些问题-切换到外部服务器似乎是最简单、最简单和最好的解决方案-没有“特殊GWT”配置,这意味着您可以使用将在生产中使用的相同配置/服务器,无需将配置迁移到Tomcat,迁移后无意外错误等


    webapp的运行时类路径可能与不同版本的EL-JAR文件(旧版本或不同appserver的版本)混杂在一起它缺少所提到的方法中的异常。我怀疑
    /WEB-INF/lib
    。去掉它,它通常已经由有问题的appserver提供,您不需要将它包含在您的webapp中。这适用于所有appserver库,例如
    servlet api.jar
    ,顺便说一句,以及consorts。您不应该将它复制到WEB应用程序中bapp的
    /WEB-INF/lib
    。这就给移植带来了麻烦。

    我在为我的应用程序引擎项目寻找修复JSTL时偶然发现了这个问题。我在谷歌的“Will It Play”页面上找到了答案。显然你必须添加

    添加到JSP页面以启用EL解析。

    我也遇到了这个错误

    我发现可以通过在EclipseJavaBuildPath->Order and Export对话框中将GWTSDK移动到类路径的底部来修复它

    但是,以下消息会中断GWT序列化:

    Mar 3, 2011 3:31:23 PM sun.reflect.NativeMethodAccessorImpl invoke0
    WARNING: Exception while dispatching incoming RPC call
    com.google.gwt.user.client.rpc.SerializationException: java.lang.reflect.InvocationTargetException
        at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:764)
        at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:727)
    
    您可以通过将GWT库移回类路径来解决这个问题,这使它看起来像是可以在Jetty中使用JSTL或GWT序列化,但不能同时使用两者


    (GWT2.1、JSTL1.2和servlet 2.5。)

    非常感谢,如果我切换到tomcat,我想我不能使用托管模式。没有特定问题的链接,没有提及特定问题,没有参考资料,什么都没有。我在这个答案中看到的唯一一件事是FUD,你是对的,我编辑了我的答案以澄清这一点,希望它不是FUD,而是更符合通常(高)的标准,所以:)这个解决方案对我有效:
    HTTP ERROR: 500
    
    javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
    RequestURI=/system/view/register.html
    
    Caused by:
    
    java.lang.AbstractMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
        at javax.servlet.jsp.jstl.core.LoopTagSupport.unExposeVariables(LoopTagSupport.java:587)
        at javax.servlet.jsp.jstl.core.LoopTagSupport.doFinally(LoopTagSupport.java:323)
        at org.apache.jsp.system.view_jsp._jspx_meth_c_forEach_0(view_jsp.java:267)
        at org.apache.jsp.system.view_jsp._jspx_meth_a_body_0(view_jsp.java:186)
        at org.apache.jsp.system.view_jsp._jspService(view_jsp.java:98)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:285)
        at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
        at org.app4j.test.DispatchServlet.doGet(DispatchServlet.java:133)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:324)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
        at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
        at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
    Powered by Jetty://
    
    java.lang.AbstractMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
    
    Mar 3, 2011 3:31:23 PM sun.reflect.NativeMethodAccessorImpl invoke0
    WARNING: Exception while dispatching incoming RPC call
    com.google.gwt.user.client.rpc.SerializationException: java.lang.reflect.InvocationTargetException
        at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:764)
        at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:727)