2013-01-10 54 views
0

我已經創建一個JSP頁面這樣的: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部分非常小。這是怎麼發生的?我該如何解決這個問題?

我想要實現的是首先檢查會話是否有效,如果不是則重定向。如果是,則顯示內容。內容是相當大的,靜態的,但我無法控制它:(。反正我可以做到這一點?

+0

這是一個很大的頁面;你怎麼可能維護它?除此之外,一個JSP頁面被編譯爲一個servlet - 無關緊要,你不明確*調用write;你如何看待產出?看看生成的文件。 –

+0

根據你的編輯,這個問題與是否使用重定向無關。要親自看到它,請刪除整個'<% %>'塊,您會發現問題仍然存在。我的回答也告訴我,這個奇怪的'redirect'邏輯與這一切無關(通過**「Unrelated」**語句)。 – BalusC

回答

1

,但我沒有使用「out.write」功能在所有

JSP是在內部使用它的,你知道,JSP文件是在「JSP compile」步驟中被轉換爲擴展爲HttpServlet的Java類,並且所有內容都以Java代碼結尾。使用運行時JSP包括使用<jsp:include> spli把大片段分成不同的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腳本小程序,標籤,表情等),是將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作爲作業。

+0

感謝BalusC。一個簡單的問題:「它不包含任何JSP腳本,標籤,表達式等」它可以包含javascript表達式嗎? – neo

+0

呃,JavaScript不是Java/JSP的一部分。它只是HTML的一部分。你知道,Java/JSP是一個HTML代碼生產者。 HTML運行在webbrowser中,而不是webserver。 JavaScript也是如此。另外,術語「javascript表達式」沒有任何意義。 – BalusC