我创建了一个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部分确实很小,可以看到。这是怎么发生的,我怎么解决这个问题?
我想要实现的是首先检查会话是否有效,如果无效则重定向。如果是,那么显示内容。内容是相当大的和静态的,但我没有控制它:(。不管怎样,我能做到这一点吗?
JSP在内部使用它。您知道,JSP文件是在"JSP编译"步骤中转换为扩展但我没有使用"out "。
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过滤器。