0

我创建了一个这样的jsp页面:

 <%  Object myName  = session.getAttribute("name"); 
     if(myName == null)
     {   String redirectURL = "http://www.google.com";  
         response.sendRedirect(redirectURL); 
     }
 %>
 <html>  ... some content ... </html>

html 标记内的内容约为 100k。现在,当我尝试在 netbean/glassfish 中编译和运行它时,我收到一条错误消息:

constant string too long
out.write("<html>.......</html>

我在某处读到它有 64k 的限制。但我根本没有使用“out.write”函数,如您所见,jsp 部分非常小。这是怎么发生的,我该如何解决?

我想要实现的是首先检查会话是否有效,如果没有则重定向。如果是,则显示内容。内容很大而且是静态的,但我无法控制它:(。无论如何我能做到这一点吗?

4

1 回答 1

1

但我根本没有使用“out.write”功能

JSP 在内部使用它。您知道,JSP 文件在“JSP 编译”步骤中转换为扩展的 Java 类HttpServlet,所有内容都以 Java 代码结束。签出服务器工作文件夹中生成的代码以自己查看。

使用运行时 JSP 包括<jsp:include>用于将大片段拆分为单独的 JSP 文件。

例如

<body>
    <jsp:include src="/WEB-INF/header.jsp" />
    <jsp:include src="/WEB-INF/menu.jsp" />
    <p>Content</p>
    <jsp:include src="/WEB-INF/footer.jsp" />
</body>

或者,如果这不符合具体的功能要求,如果 HTML 内容真的是静态的(即它不包含任何 JSP 脚本、标签、表达式等),另一种方法是将 HTML 内容放在它自己的some.html文件并由JSTL <c:import>引用。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
...
<body>
    <c:import url="some.html" />
</body>

这样它就不会成为 JSP 源代码的一部分。


与具体问题无关,您的重定向逻辑缺少return语句。执行重定向时,所有剩余的 JSP 代码仍会被调用。此外,如果您对所有 JSP 文件重复此scriptlet,您会质疑是否不能更好地使用servlet 过滤器来完成这项工作。

于 2013-01-10T16:58:46.990 回答