当我使用c:foreach时,我得到一个空白输出

时间:2012-03-19 11:08:16

标签: jsp jstl

jsp页面中的代码:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page import="GeneralClasses.FooClass" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <c:forEach var="fromArray" items="${array}">
        <p>
            ${fromArray}
        </p>
    </c:forEach>
</body>
</html>

以下是存储属性array

的类
package GeneralClasses;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class FooClass {
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
    String[] array = {"a","b","java","programming","OS"};
    request.setAttribute("array", array);
  }    
}

当我运行jsp文件时,我得到一个空白页面。如何使用c:foreach代码?

1 个答案:

答案 0 :(得分:1)

当JSTL标记没有运行时,你可能根本没有安装JSTL,或者你正在使用具有不同taglib URI的古老JSTL 1.0版本。验证JSTL是否已运行的最简单方法是在浏览器中打开页面,右键单击查看源。如果你看到JSTL标签仍在那里,那么肯定没有运行。

JSTL默认捆绑在更成熟的应用程序服务器中,但不包含在像Tomcat,Jetty等小而简单的servlet容器中。您需要在webapp的/WEB-INF/lib中删除必要的JSTL JAR文件文件夹或服务器的/lib文件夹。

有关更详细的背景信息,请see our JSTL wiki page

顺便说一句,你的servlet没有扩展HttpServlet而根本没有转发到JSP,但是我会假设在准备问题的代码时不小心过度简化了。如果您确实没有通过servlet请求JSP页面,那么原因就完全不同了。解决方案很简单:通过URL调用servlet,而不是JSP。在/WEB-INF中隐藏必要的JSP,以便最终用户永远不会无意中通过URL调用它。另见our servlets wiki page

整个<%@page import="GeneralClasses.FooClass" %>行也是不必要的。