?? jsp.doc
字號:
開發JSP/J2EE網站的15點經驗(轉)
2007年08月20日 星期一 21:18
1、[總體性]設置角色的JavaBean。
????????? 對于一個網站,通常會有很一下幾種角色:注冊會員、管理員、普通訪問者,顯然,對于注冊會員和系統管理員就應該創建JavaBean。其中的參數不需要太多,只需要一些常用的就行,比如id,用戶名,姓名等,以便使用。
例如:
????????? package eline.beans
????????? public class Person {
private String id = null;
private String uname = null;
private int click;
public Person(){
}
????????? }
注意:
?????????? 1.1對于String類型的參數已開始賦予null,以防后面出錯;
?????????? 1.2對于int型,只定義就可以了;
?????????? 1.3如需要初始賦值,可寫在構造方法里。
使用:
?????????? 在登錄檢驗的Servlet里創建,寫到session里面
???????????? Person nowPerson = new Person();
???????????? nowPerson.setId(id);
???????????? nowPerson.setUname(uname);
???????????? HttpSession elineSession = request.getSession();
???????????? elineSession.setAttribute("nowPerson", nowPerson);
?????????? 在JSP頁面里這樣獲?。????????????? <jsp:useBean id="nowPerson" class="eline.beans.Person" scope="session" />
?????????? 在Servlet里這樣獲?。????????????? HttpSession elineSession = request.getSession();
???????????? Person nowPerson = (Person)elineSession.getAttribute("nowPerson");
2、[總體性]寫一個系統配置文件
????????? 寫一個配置文件,將網站名、數據庫聯接等信息寫在里面,比如config.propertites,存放在WEB-INF的classes下(只能存放在這里),然后分別可以在JavaBean和Servlet中讀取相關參數。這樣,可以讓用戶方便的設置系統有關屬性。
例如:config.propertites
//注意:等號后面的內容不要加引號
webName=大學生e線???????? //網站名字
mailboxRecords=10???????? //站內郵箱顯示記錄數
//數據庫聯接的相關信息
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/eline
db.user=root
db.pass=******
讀取程序示例:
ResourceBundle rb = ResourceBundle.getBundle("config");
String webName = rb.getString("webName");
int mailboxRecords = Integer.valueOf(rb.getString("mailboxRecords")).intValue();
3、[總體性]設置一個系統JavaBean
????????? 寫一個系統JavaBean,在每個JSP頁面和需要的Servlet中都調用它。一方面,可以將上述系統配置文件中的參數都在這個系統Bean中讀取,方便在JSP頁面中調用;另一方面,可以將系統中經常要用到的函數,如處理中文的編碼轉換、轉化文本框數據為HTML或MD5算法等,這樣在每個地方調用特別方便,也可以保證整體性,修改這個Bean,系統中所有相關的調用都會隨之改變。
????????? 此外一點,在JSP中調用JavaBean時,scope應該設為session,這樣可以讓該Bean只在服務器實例化一次,節省資源。
4、[功能]登錄的實現、判斷的方法之一
????????? 對于一些面向特定角色的頁面和處理過程,我們應該注意將其保護起來。比如只有登錄的用戶才能打開他的資料修改頁面,只有管理員登錄后才能打開相關的系統管理頁面等等。為了保證安全,我們務必在這些頁面或Servlet中進行一定的角色判斷。為了方便的實現這一點,我們可以在1中所提及的角色Bean中創建:
public void isLogin(HttpServletResponse response) throws Exception{
???????? if(this.id==null||this.id.equals("")){
????????? response.sendRedirect("../index.jsp");
???????? }
}
//其中,response為JSP頁面的默認response對象,用于實現頁面的重定向。并且注意==null和.equals("")都要進行判斷才安全。
????????? 那么,在該角色登錄時,我們就應該實例劃一個該角色Bean,并賦值,并將該角色Bean放入session,如:
//實例化一個Person并賦值
Person nowPerson = new Person();
nowPerson.setId(String.valueOf(rs.getInt("id")));
nowPerson.setUname(uname);
//存入session
HttpSession elineSession = request.getSession();
elineSession.setAttribute("nowPerson", nowPerson);
????????? 在JSP中的判斷:
<jsp:useBean id="nowPerson" class="eline.beans.Person" scope="session" />
<%
???????? nowPerson.isLogin(response);
???????? //這里就要將respnse對象傳遞過去,來實現重定向
%>
???
????????? 在Servlet中的判斷:
HttpSession elineSession = request.getSession();
Person nowPerson = (Person)elineSession.getAttribute("nowPerson");
try {
???????? nowPerson.isLogin(response);
} catch (Exception e1) {
???????? response.sendRedirect("../index.jsp");
}
????????? 退出登錄的Servlet:
HttpSession elineSession = request.getSession();
elineSession.removeAttribute("nowPerson");
elineSession.invalidate();
5、[JSP技巧]運用動態包含解決導航條連接路徑和當前欄目問題
????????? 做網站時,我們通常將頭部信息(一般包括導航條在內)和尾部信息(版權信息等)獨立出來,分別寫在兩個jsp文件內,然后在主體文件內包含他們。不同目錄下的主體文件的導航條對應的連接路徑是不一樣的,并且有時候導航條需要知道主體文件對應的是哪個欄目,從而加亮該欄目,如圖:
????????? 為了實現這些,我們可以使用動態包含,因為這種包含模式可以傳遞參數,如:
<jsp:include page="/top.jsp">
???????? <jsp:param name="MENU_THIS" value="01" />
???????? <jsp:param name="PATH_THIS" value="../" />
</jsp:include>
????????? 然后可以在top.jsp中獲取這些參數,如:
<%
???????? String PATH_THIS = request.getParameter("PATH_THIS");
???????? String MENU_THIS = request.getParameter("MENU_THIS");
%>
????????? 從而進行相關的處理。
????????? 除此之外,在包含時我們應該注意<head></head>內的部分應該獨立出head.jsp,然后在主體文件進行包含,這樣既可以保證全站所有頁面的head內都有head.jsp的內容,又可以有自定義的內容,如<title>。
6、[MySQL]Access導入MySQL、MySQL中文問題、MySQL的數據備份、MySQL的設置、MySQL中SQL特殊語法等
????????? 我們一般用慣了MySQL-Front這個MySQL的前臺工具,但在這次項目中,它的諸多毛病就凸現出來了:將Access導入MySQL時,MySQL-Front對于文本類型、數值為負數的數值型字段總是出問題,不能正確導入;用MySQL-Front建立用戶時,設置不了權限;不能執行自己導出的SQL文件等。于是另辟蹊徑,發現了NavicatMySQL,覺得這個非常好用,在霏凡(www.crsky.com)即有得下。它不存在上述問題,可以輕松無誤的將Access導入MySQL,并且可以方便進行數據備份,導出和導入SQL文件效率也很高。
????????? 安裝好MySQL后,經常會出現中文編碼問題,所有的中文都變成問號(?)。此問題是由MySQL中所設置的默認編碼有關,經過在網上查閱資料,可以這樣解決:進入MySQL的安裝目錄,打開my.ini,找到兩處
default-character-set=latin1修改為:default-character-set=gb2312,再重啟MySQL服務即可。
???
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -