Java JSTL在GoogleAppEngine和#x27;s开发服务器,但在远程服务器上工作

Java JSTL在GoogleAppEngine和#x27;s开发服务器,但在远程服务器上工作,java,google-app-engine,jstl,Java,Google App Engine,Jstl,正如标题所说,我的JSTL标记在我的开发服务器上不起作用,但在Google的实际服务器上起作用 我将代码简化为最简单的代码,以确保代码没有任何错误,下面是我得到的 JSP 奇怪的是,在开发服务器和远程服务器上都能工作。其他核心标签不起作用。如果我尝试添加fmt标记,它们也不起作用 有什么想法吗 您需要将JSTL JAR放在/WEB-INF/lib中,或者至少放在您在本地开发中使用的servletcontainer的/lib文件夹中 您应该不提取JAR并用松散的TLD文件将webapp弄乱,也不要

正如标题所说,我的JSTL标记在我的开发服务器上不起作用,但在Google的实际服务器上起作用

我将代码简化为最简单的代码,以确保代码没有任何错误,下面是我得到的

JSP

奇怪的是,
在开发服务器和远程服务器上都能工作。其他核心标签不起作用。如果我尝试添加fmt标记,它们也不起作用


有什么想法吗

您需要将JSTL JAR放在
/WEB-INF/lib
中,或者至少放在您在本地开发中使用的servletcontainer的
/lib
文件夹中

您应该提取JAR并用松散的TLD文件将webapp弄乱,也不要在
web.xml
中的任何地方引用它。如果你已经做了,撤销一切。您也不需要手动将其添加到Eclipse构建路径。只需放入
/WEB-INF/lib
文件夹就足够了

另见:

您需要将JSTL JAR放在
/WEB-INF/lib
中,或者至少放在您在本地开发中使用的servletcontainer的
/lib
文件夹中

您应该提取JAR并用松散的TLD文件将webapp弄乱,也不要在
web.xml
中的任何地方引用它。如果你已经做了,撤销一切。您也不需要手动将其添加到Eclipse构建路径。只需放入
/WEB-INF/lib
文件夹就足够了

另见:

    • 谷歌搜索没有返回任何有用信息的事实已经表明,这个问题是我的配置所特有的

      唉,我终于找到了问题的症结所在,我只是发布了解决方案,以防有人遇到这个让我担心了好几天的问题

      事实证明,我已经将Tomcat的servlet-api.jar和jstl-jar添加到Eclipse的默认JRE库中,以避免每次都必须将它们添加到WEB-INF\lib中(即窗口>首选项>Java>已安装的JRE>编辑>添加外部jar)

      一旦我开始在GAE中开发,这个配置就开始与AppEngine自己的servlet-api.jar和jstl jar发生冲突


      答案就是从JRE库中删除Tomcat JAR

      谷歌搜索没有返回任何有用信息的事实已经表明,这个问题是我的配置所独有的

      唉,我终于找到了问题的症结所在,我只是发布了解决方案,以防有人遇到这个让我担心了好几天的问题

      事实证明,我已经将Tomcat的servlet-api.jar和jstl-jar添加到Eclipse的默认JRE库中,以避免每次都必须将它们添加到WEB-INF\lib中(即窗口>首选项>Java>已安装的JRE>编辑>添加外部jar)

      一旦我开始在GAE中开发,这个配置就开始与AppEngine自己的servlet-api.jar和jstl jar发生冲突


      答案就是从JRE库中删除Tomcat JAR

      谢谢巴卢斯克,但还是没有饼干。这就是我现在所做的:1)清理所有内容:从WEB-INF\lib中删除jstl,从WEB.xml(即
      )中删除对标记库的所有引用,确保没有松散的TLD,2)将jstl-1.2.jar读入WEB-INF\lib,并且没有将其添加到构建路径,3)将以下内容添加到jsp
      。我也认为它应该起作用,但我没有!奇怪的是,就像以前一样,它仍然可以在谷歌的远程服务器上工作。问题是如何使它在本地开发服务器上工作。另外,标记
      确实有效,所以我想可能GAE的本地配置中有某种东西阻止了其他标记的工作…?它可以在所有普通的servlet容器上工作,比如Tomcat、Glassfish、JBoss、,然而,我必须承认,我从来没有与GAE合作过,我看到过一些像这样的奇怪的问题被张贴在这里。因此,我认为它需要在本地GAE级别进行更改/修复。尽管如此,还是要感谢。我让它在Tomcat上运行,所以我知道你是从哪里来的。我在谷歌上搜索了一下,似乎你需要将
      web.xml
      声明为Servlet 2.4:试试看。谢谢BalusC,但仍然没有cookie。这就是我现在所做的:1)清理所有内容:从WEB-INF\lib中删除jstl,从WEB.xml(即
      )中删除对标记库的所有引用,确保没有松散的TLD,2)将jstl-1.2.jar读入WEB-INF\lib,并且没有将其添加到构建路径,3)将以下内容添加到jsp
      。我也认为它应该起作用,但我没有!奇怪的是,就像以前一样,它仍然可以在谷歌的远程服务器上工作。问题是如何使它在本地开发服务器上工作。另外,标记
      确实有效,所以我想可能GAE的本地配置中有某种东西阻止了其他标记的工作…?它可以在所有普通的servlet容器上工作,比如Tomcat、Glassfish、JBoss、,然而,我必须承认,我从来没有与GAE合作过,我看到过一些像这样的奇怪的问题被张贴在这里。因此,我认为它需要在本地GAE级别进行更改/修复。尽管如此,还是要感谢。我让它在Tomcat上运行,所以我知道你是从哪里来的。我搜索了一下,似乎你需要将
      web.xml
      声明为Servlet 2.4:试试看。
      <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isELIgnored="false"%>
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
      <title>Page Title</title>
      </head>
      <body>
          <c:choose>
              <c:when test="${2+2==4}">sum works</c:when>
              <c:otherwise>sum doesn't work</c:otherwise>
          </c:choose>
      </body>
      
      HTTP ERROR 500
      Problem accessing /index.html. Reason: 
      
          javax/servlet/jsp/tagext/TagSupport
      
      Caused by:
      
      java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagSupport
          at java.lang.ClassLoader.findBootstrapClass(Native Method)
          at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:927)
          at java.lang.ClassLoader.loadClass(ClassLoader.java:298)
          at com.google.appengine.tools.development.DevAppServerClassLoader.loadClass(DevAppServerClassLoader.java:87)
          at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
          at java.lang.ClassLoader.defineClass1(Native Method)
          at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
          at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
          at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
          at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
          at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
          at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
          at java.security.AccessController.doPrivileged(Native Method)
          at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
          at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
          at com.google.appengine.tools.development.DevAppServerClassLoader.loadClass(DevAppServerClassLoader.java:87)
               ...