我创建了一个像这样的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部分真的很小,你可以看到。这是怎么发生的,我该如何解决这个问题?
我想要实现的是首先检查会话是否有效,如果不是则重定向。若然,则显示内容。内容非常大而且静态,但我无法控制它:(。无论如何,我能实现这个目标吗?
答案 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来完成这项工作。