【问题标题】:<c:out value="Test"/> inside jspx doesn't show in browserjspx 中的 <c:out value="Test"/> 不显示在浏览器中
【发布时间】:2013-09-04 19:40:19
【问题描述】:

当我尝试通过添加来测试我的 jstl 库(jstl-1.1.2.jar 和标准 1.1.2.jar)时,它不会在浏览器中显示任何内容。

这是我的 home.jspx:

<?xml version="1.0" encoding="utf-8"?>
<jsp:root
    xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns="http://www.w3.org/1999/xhtml"
    version="2.1">

<jsp:directive.page contentType="text/html" pageEncoding="UTF-8" />
<jsp:output omit-xml-declaration="true" />
<jsp:output doctype-root-element="HTML"
            doctype-system="about:legacy-compat" />

<html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>gdgdfgdg</title>

</head>
<body>
<h1>fsdf</h1>
<c:out value="Test"/>
</body>
</html>

</jsp:root>

添加了必要的罐子。不知道是什么问题。

编辑:

这是源代码,浏览器接收到:

<!DOCTYPE HTML SYSTEM "about:legacy-compat">
<html lang="en">
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
    <title>gdgdfgdg</title>
  </head>
  <body>
    <h1>fsdf</h1>
    <c:out value="TEST"/>
  </body>
</html>

我向 maven 添加了以下依赖项,它正确加载了顶部描述的正确 jar ..

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.1.2</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>

【问题讨论】:

  • 你需要更具体。您究竟是如何安装 JSTL 的?生成的 HTML 输出到底是什么?您的意思是,当您在浏览器中打开页面并执行右键单击并查看源代码时,您会看到&lt;c:out&gt; 仍然是原始的且未解析的吗?到目前为止,您似乎根本没有正确安装 JSTL。将[jstl]标签悬停在问题下方,然后单击信息链接获取说明。
  • 刚刚编辑了我的问题.. 抱歉,谢谢
  • 不,不,JSTL标签根本没有被正确解析!您不应该在生成的 HTML 输出中看到任何 JSP 标记库工件。它们应该由服务器解析和执行并生成 HTML 输出(网络浏览器根本不理解 JSP,它只理解 HTML)。您应该在生成的 HTML 输出中只看到 TEST 而不是 &lt;c:out value="TEST"/&gt;。好吧,回到原因:你原来是在使用 Maven。对不起,这超出了我的范围。我至少添加了[maven] 标签,以便您得到正确的关注。祝你好运。
  • 但是整个标签不解释为文本?这怎么可能发生?谢谢你的帮助..
  • 我不知道你到底是什么意思,所以我会忽略那部分。事实上,JSTL 标签并没有被解析。可能的原因是没有声明或安装 JSTL。它已正确声明,因此可能未安装。换句话说,JSTL 不存在于 webapp 的运行时类路径中。就您而言,Maven 负责该部分。所以 Maven 配置明显有问题。也许你使用了完全错误的坐标。

标签: jsp maven jstl jspx


【解决方案1】:

提供的 jspx 在我的环境 Tomcat 6.0 和以下环境中工作正常:

<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jstl-impl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>el-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>

根据Apache,1.1.2 taglibs 应该可以在 Tomcat 5.0 或更高版本上运行,但是由于您在 jspx 的头部包含了 JSP 2.1 版本,因此您需要在 Servlet 规范 2.5 或更高版本的服务器上运行,例如作为Tomcat 6。

您最好的选择是使用我提供的依赖项并确保您的 servlet 容器是最新的。

【讨论】:

    【解决方案2】:

    如果一切正常,试试这个简单的 .jsp 页面。测试页使用随机 fmt 和 c 特征。

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ 
        taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%@
        page contentType="text/html; charset=UTF-8" pageEncoding="ISO-8859-1"
        import="java.util.*,
        java.text.*
        "
    %><%
    
    String var0 = "Foodoo0 " + System.currentTimeMillis();
    pageContext.setAttribute("var1", "Foodoo1 " + System.currentTimeMillis());
    pageContext.setAttribute("var2", "Foodoo2 " + System.currentTimeMillis());
    
    double distance = 1234.567;
    pageContext.setAttribute("distance", distance);
    
    %><!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <title>Test page</title>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    </head>
    <body>
    
    var0=<%= var0 %> <br/>
    var1=${var1} <br/>
    <c:out value="COut Foo" /> <br/>
    var2=<c:out value="${var2}" /> <br/>
    
    <br/>
    Use locale fi_FI<br/>
    <fmt:setLocale value="fi_FI" scope="page" />
    <c:set var="distanceEL" value="${distance}" />
    fmt0=${distance} | ${distanceEL} <br/>
    fmt1=<fmt:formatNumber pattern="0.0" value="${distance}" /> <br/>
    fmt2=<fmt:formatNumber pattern="0.00" value="${distanceEL}" /> <br/>
    fmt3=<%= new DecimalFormat("0.0").format(distance) %>
    
    <br/>
    Use locale en_US<br/>
    <fmt:setLocale value="en_US" scope="page" />
    <c:set var="distanceEL" value="${distance+3456.78}" />
    fmt0=${distance} | ${distanceEL} <br/>
    fmt1=<fmt:formatNumber pattern="0.0" value="${distance}" /> <br/>
    fmt2=<fmt:formatNumber pattern="0.00" value="${distanceEL}" /> <br/>
    fmt3=<%= new DecimalFormat("0.0").format(distance) %>
    
    </body>
    </html>
    

    我在 Tomcat6 服务器中使用过这些库,但它们有点旧。懒得更新了,因为 Tomcat6 本身就是一个遗留物。

    • lib/jstl-api-1.2.jar
    • lib/jstl-impl-1.2.jar
    • lib/el-api.jar_OLD(重命名旧的 tomcat .jar 以禁用它)
    • lib/el-api-1.1.jar
    • lib/el-impl-1.1.jar

    这些是我在 Tomcat7 服务器中使用的文件,Tomcat7 有 lib/el-api.jar 和 lib/jasper-el.jar 都可以。无需更新它们。

    • javax.servlet.jsp.jstl-api-1.2.1.jar
    • javax.servlet.jsp.jstl-1.2.2.jar

    http://search.maven.org/#browse|707331597http://search.maven.org/#browse|-1308691387 链接下载新鲜的罐子。

    确保在 mywebapp/WEB-INF/web.xml 文件中使用正确的 webapp 规范版本属性。 这是 Tomcat6 网络应用程序。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
       xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    >
      <description>My webapp</description>
      <display-name>My webapp</display-name>
    </web-app>
    

    这就是Tomcat7 webapp。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0" 
    >
      <description>My webapp</description>
      <display-name>My webapp</display-name>
    </web-app>
    

    【讨论】:

    • OP 正在使用 JSPX 和 Maven。这个答案完全用 JSP 和“摆弄松散的 JAR 文件”完全取代了它们。这没有任何意义。
    • BalusC,让 OP 决定这是为了一一查明问题,Maven 配置、手动放置 .jar 或 jsp/jspx 文件我猜无论如何都不是重点。在解决 JSTL 问题时,它们已经足够接近了。谢谢。
    • 老兄,这就像告诉 Java 开发人员尝试 C#,因为由于配置问题,某些东西在 Java 中不起作用。为什么不直接从根本上解决配置问题呢?
    猜你喜欢
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2017-03-24
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多