Servlet中的頁面跳轉?
兩種方式,實現跳轉:內部跳轉(請求轉發)、外部跳轉(重定向)
內部跳轉(請求轉發)特點:在服務器內部完成頁面之間的跳轉;請求只有一次;瀏覽器地址不會改變。
request.getRequestDispatcher(“路徑”).forward(reuqest,response);
request.getRequestDispatcher(“路徑”).include(reuqest,response);
外部跳轉(重定向)特點:通知客戶端重新發送請求;請求次數爲二次;瀏覽器地址欄會改變。
response.sendRedirect(“路徑”);
內部跳與外部跳最重要的區別:
內部跳轉,請求爲一次——request對象是同一個(不同頁面中);可以利用request傳遞數據。
外部跳轉,請求爲二次——request對象不是同一個;不能使用request傳遞數據。
中文問題?
支持中文的編碼格式:GBK(簡體+繁體)、GB2312(簡體)、UTF-8(unicode編碼,支持國際通用語言編碼)
MyEclipse工具中出現亂碼?
菜單欄打開Window--->首選項(最後一個)-->基本選項(第一個)-->contentTypes -->Text(javasource file)
程序中的亂碼:
post提交處理方式:
在程序中的第一行寫入:
request.setCharacterEncoding(“與jsp頁面編碼必須一致”);
response.setCharacterEncoding(“與jsp頁面編碼必須一致”);
get提交處理方式:
get提交不能按照post方式進行處理;原因是:數據提交到服務器之前,已經被瀏覽器設定了編碼。(ISO-8859-1編碼,標準英語)
String txtname = request.getParameter("txtname");
txtname = newString(txtname.getBytes("ISO-8859-1"),"與jsp頁面編碼必須一致");
Session的會話跟蹤技術?
1. 什麼是Session?
Session(會話)——客戶端一次請求,服務器端一次響應;這個過程稱之爲會話。
什麼是JavaWeb的會話跟蹤技術?
在服務器端記錄客戶端的相關信息,客戶端第二次以後的訪問;服務器能夠識別每一個客戶端。
如何使用會話跟蹤技術?
使用會話跟蹤技術核心對象:Session對象。
Session對象:每一個客戶端第一次訪問服務器的時候,服務器分配一個唯一的SessionID給用戶,下一次訪問服務器的時候,根據SessionID區分每一個用戶。(跟銀行類似)
注意:每一個Session對象,相互獨立;默認以瀏覽器爲單位(同一個瀏覽器默認爲同一個用戶,瀏覽器關閉session消失)。
Session用來存、取數據使用,常用方法:
setAttribute(“名字”,”值”);
getAttribute(“名字”);
注意:只要能夠獲取到session對象,都可以使用session中的數據(跟跳轉方式無關)。
設置Session有效時間(Session默認30分鐘):
setMaxInactiveInterval(時間值單位秒)。
invalidate();當前Session立即失效(退出)。
會話跟蹤技術:
Cookie(原理:通過瀏覽器往客戶端寫入Cookie文件,來識別不同的用戶;也可以設置 有效日期)
Session(利用Session對象,完成客戶追蹤;瀏覽器關閉session就消失(不可用); session.invalidate() session立即失效)
URL重寫、隱藏域技術(URL重寫是通過地址欄,不斷的傳遞SessionID來區分用戶)。
Cookie 與Session 異同:
相同:都可以實現會話跟蹤(存放用戶的相關信息)。
不同點:Cookie不以瀏覽器關閉爲標準;以設置的有效時間爲標準(可以實現離線跟蹤)。
Session必須保證瀏覽器不關閉的情況,才能獲取到。
Servlet中的線程安全
Servlet在運行時,只有一個實例對象(通過Servlet的生命週期);保證用戶能夠獨立訪問Servlet,採用了多線程技術。
作用:效率更高,用戶與用戶之間獨立開。
缺點:線程安全問題(多個線程,同時操作一個變量(數據))
解決方案:儘量不要在Servlet中使用全局變量。