JSP常量字符串太长

时间:2013-01-10 16:56:19

标签: html jsp

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

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

html tage中的内容大约是100k。现在当我尝试编译并在netbean / glassfish中运行时,我收到一条错误消息:

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

我在某处读到了64k的限制。但我根本不使用“out.write”函数,jsp部分真的很小,你可以看到。这是怎么发生的,我该如何解决这个问题?

我想要实现的是首先检查会话是否有效,如果不是则重定向。若然,则显示内容。内容非常大而且静态,但我无法控制它:(。无论如何,我能实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

  

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

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

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

E.g。

<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 scriptlet,标签,表达式等) ,是将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 filter来完成这项工作。