JSP常量字符串太长



我创建了一个jsp页面,如下所示:

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

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

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

我在某处读到有64k的限制。但是我没有用out。"Write"函数的全部内容,JSP部分确实很小,可以看到。这是怎么发生的,我怎么解决这个问题?

我想要实现的是首先检查会话是否有效,如果无效则重定向。如果是,那么显示内容。内容是相当大的和静态的,但我没有控制它:(。不管怎样,我能做到这一点吗?

但我没有使用"out "。

JSP在内部使用它。您知道,JSP文件是在"JSP编译"步骤中转换为扩展HttpServlet的Java类的,所有内容最终都是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过滤器。

最新更新