。牢記大多數的JSP都應當是只讀的視圖,而由頁面bean來提供模型。
。應當一起設計JSP和JSP bean
。在盡可能合理的情況下,把業務邏輯從JSP中移走。具體于HTTP的邏輯(如,對Cookie的處理)屬于bean或支持類中,而不是JSP中。
。盡量把條件邏輯放在控制器中而不是放在視圖中。
。為JSP、包含的文件、JSP Bean和實現擴展標記的類使用遵循標準的命名慣例。如:
jsp控制器 xxxxController.jsp
被包含的: jsp _descriptiveNameOfFragment.jsp
jsp頁面模型bean: <pagename>Bean 如loginBena.java
jsp會話bena: xxxxSessionBean
標記類 : xxxxTag,xxxxTagExtraInfo
。應當在JSP中避免使用頁面引入指令。import指令會促使類的實列化而不是jsp bean的實例化:
不用:<%@ page import = "com.java.util.*" %>
而用:<% java.util.List l = new java.util.LinkedList(); %>
。jsp不應該直接去訪問請求參數。bean應當執行這樣的處理過程并且輸出所處理的模型數據。
。jsp不應當訪問屬性文件,或者使用JNDI。bean可以訪問屬性。
。如果jsp bean具有的所有的屬性不能夠從頁面請求中被映射到,就要盡力在<jsp:useBean>標記中設置屬性。
。應當避免設計既顯示表單又處理結果的頁面。
。在jsp中避免代碼重復。把要重復的功能放在一個包含的jsp、bean或標記擴展中,使得它能夠被重用。
。jsp bean應當永遠不要去產生HTML
。在jsp中應該避免使用out.pringln()發放來產生頁面內容。
。jsp層不應該直接訪問數據,這包括JDBC數據庫訪問和EJB訪問。
。在長度上,scriptlests的代碼最好不要超過5行。
。除了jsp bean之外,jsp不應當去實例化復雜的可讀寫的對象。如果這樣的話,就有可能在jsp中去執行不適當的業務邏輯。
。jsp bean中不應當包含大量的數據。
。如果使用了<jsp:forward>和<jsp:include標記>,并且必須使用簡單類型的值來與外部頁面進行通訊的話,就應當使用一個或多個<jsp:param>元素
。定制標記應當用在適當把邏輯從jsp中移走的地方。
。應當謹慎地使用<jsp:forward>標記,在jsp中它是一個等價的goto。
。應當使用隱藏的注釋來阻止輸出的HTML過大。
。在jsp中避免進行異常處理
。每個jsp文件中都應當使用一個錯誤頁面來處理不能夠從中恢復的異常。
。在jsp錯誤頁面中,使用HTML注釋來顯示傳遞到該頁面中的異常跟蹤信息。
。只有在能夠獲得性能上的好處時,才使用jspInin()方法和jspDestroy()方法。獲取和放棄資源是jsp beans和標記處理器的事,而不是由jsp來負責的。
。如果沒有充分的理由,就不要在jsp中定義方法和內部內。