JSP筆記
1、關閉數(shù)據(jù)庫連接使用數(shù)據(jù)庫連接時,記住要在finally中關閉,如果用到了連接池的話,實際上關閉操作實際上把連接歸還給連接池;
2、從1開始
在使用ResultSet讀取列值時,列是從左到右編號,第一列是1;比如"select id,name from student",可以使用rs.getString(2),也可以使用rs.getString("name")讀取,但是前一種速度快些,后面一種可維護性強些,并且第二種方法中使用列名作為參數(shù)的時候,列名是不區(qū)分大小寫的,所以也可是使用rs.getString("Name")讀取;另外在用PreparedStatement的設置參數(shù)的時候,也是從1開始的;
3、安全的提供文件下載
在提供文件下載的時候,要防止盜連.內(nèi)容被盜的損失不計,還加重了自己服務器的負擔,而且還防止有人循環(huán)下載某一區(qū)間段的所有附件.解決問題的方法常見的有通過Apache Http Server來配置,只有滿足一定條件的HTTP請求才允許下載;另一種是服務器生成一個隨即的值,并放在Session對象中,當用戶下載的文件的時候,必須把該隨即值傳回到服務器端,服務器斷再判斷該隨即值是否和Session中的隨即值一致;
4、forword與sendRedirect的區(qū)別
forword:RequestDispatcher dispatcher=request.getRequestDispatcher("/test.jsp");
dispatcher.forword(request,response);
sendRedirect:response.sendRedirect("/test.jsp");
如果稱forword是一個導水渠,那么redirect則是一個指路人.forword將上一個流程的數(shù)據(jù)轉(zhuǎn)向下一個流程,而redirect只是提示瀏覽器需要訪問的下一個頁面.因此forword只可以在同一個context中使用;
5、Action與DispatchAction
如果很多操作都是觸發(fā)同一個已定義的Action,只是所帶的method參數(shù)不同,這樣設計方便把功能類似的操作定義在同一個Action里面,然后根據(jù)不同的method參數(shù)調(diào)用不同的方法.在定義Action的時候繼承DispatchAction;而且在應用服務器中,每個Servlet就是一個線程,后一種辦法會導致系統(tǒng)中存在大量的處理用戶請求的線程,線程之間的切換的開銷回嚴重降低應用服務器的性能;
6、sesson的關閉
一般情況下session都是存儲在內(nèi)存里,當服務器進程被停止或者重啟的時候,內(nèi)存里的session也會被清空.但是并不是瀏覽器關閉的時候session就消失了,這是不正確的.一般說來,session在下列情況下會被刪除:
1)程序調(diào)用HttpSession.invalidate();
2)距離上一次收到客戶端發(fā)送的session id時間間隔超過了session的超時限制;
3)服務器進程被停止或者重啟;
7、java函數(shù)值傳遞還是引用傳遞?
java數(shù)據(jù)類型有兩類:元數(shù)據(jù)類型和引用數(shù)據(jù)類型.在使用元數(shù)據(jù)類型進行傳遞的時候傳遞的是元數(shù)據(jù)類型本身的值,在傳遞引用數(shù)據(jù)類型的時候,傳遞的是這個引用對象的地址;
☆頁面編碼設置
<%@page contentType="text/html; charset=gb2312"%>
2、讓JSP能正確獲得傳入的參數(shù),在JSP源文件頭加入下面一句:
<%request.setCharacterEncoding("GB2312");%>
3、讓JSP編譯器能正確地解碼我們的含有中文字符的JSP文件,在JSP源文件中指定我們的JSP源文件的編碼格式
<%@page pageEncoding="GB2312"%>