servlet筆記 tomcat清緩存 1、把tomcat下的所有項目移除。并單擊右擊,clean eclipse設置部署路徑 若要更改server Locations,先把tomcat下的所有項目移除。并右擊,clean…之后方可設置。。。啟動后將又變為黑色 默認選項為: Use workspace metadata(dose not modify Tomcat installation) 修改選項為: Use Tomcat installation(takes control of Tomcat installation)
?會話 現實生活中我們會用手機跟對方對話,拿起手機,撥號,然后對面接聽,跟著互相通話,最后會話結束。
這個過程也可以用我們的B/S模式來描述: 打開瀏覽器—>輸入地址->發出請求->服務器收到請求->向瀏覽器發出響應->..重復.->關閉瀏覽器 這樣的過程我們用 “會話” 來描述,上面就一次會話的例子 會話信息管理技術: Cookie技術: 會話數據保存在瀏覽器客戶端。 session技術:會話數據保存在服務器端 session Session存儲在服務器端,一般放置在服務器的內存中(為了高速存取),Session在用戶訪問第一次訪問服務器的服務時創建,需要注意只有訪問jsp、Servlet等程序時才會創建Session,只訪問HTML、IMAGE等靜態資源并不會創建Session。 服務器會把長時間沒有活動的Session從服務器內存中清除,此時Session便失效。Tomcat中Session的默認失效時間為20分鐘 常用方法,其中,name為String類型,value為Object類型: ?session .setAttribute(“name”,value);添加某個屬性的值 ?session .getAttribute(“name”);獲取某個屬性的值 ?session .removeAttribute(“name”);移除某個屬性的值 同一機器的兩個瀏覽器窗口訪問服務器時,會生成兩個不同的Session。但是由瀏覽器窗口內的鏈接、腳本等打開的新窗口(也就是說不是雙擊桌面瀏覽器圖標等打開的窗口)除外 //獲取session HttpSession session = req.getSession();
為單個Web應用 配置session超時時間可以在web.xml中使用元素: 15 這個時候的“15”單位是分鐘! 如果在配置Servlet是指定初始化參數決定超時時間,例如: Example exa.mp.le.Example2 timeout 600 這時候的“600”單位是秒鐘! 跳轉方式 sendRedirect()跳轉
sendRedirect()方法的工作原理圖 交互過程如下: 1) 瀏覽器訪問Servlet1; 2) Servlet1想讓Servlet2為客戶端服務; 3) Servlet1調用sendRedirect()方法,將客戶端的請求重定向到Servlet2; 4) 瀏覽器訪問Servlet2; 5) Servlet2對客戶端的請求做出響應。 我們可以看出,調用sendRedirect()方法,實際上是告訴瀏覽器Servlet2所在的位置,讓瀏覽器重新訪問Servlet2。調用sendRedirect()方法,會在響應中設置Location響應報頭。要注意的是,這個過程對于用戶來說是透明的,瀏覽器會自動完成新的訪問。而瀏覽器地址欄顯示的URL是重定向之后的URL response.sendRedirect(“login.html”); 具體可以參考案例: sendRedirect()方法 通過該方法可以將一個頁面的信息傳送給另外的頁面,比如: sendRedirect(“welcome?uname=aaa”); 優點:傳送信息的速度比較快 缺點:它只能傳送字符串,而不能傳送一個對象 sendRedirect(“welcome?uname=aaa”); 注意點: 1.welcome代表你要跳轉的那個servlet的url 2.servlet url名和變量之間有個? 3.如要傳遞兩個以上的值,它們之間要用符號&分開,比如sendRedirect(“welcome?uname=aaa&passwd=123”); 4.如果傳遞的是中文,那你將得到亂碼,需要處理一下res.setContentType(“text/html,charset=gbk”);
forward()跳轉
交互過程如下: 1) 瀏覽器訪問Servlet1; 2) Servlet1想讓Servlet2對客戶端的請求進行響應,于是調用forward()方法,將請求轉發給Servlet2進行處理。 3) Servlet2對請求請出響應。 從上圖的交互過程可以看出,調用forward()方法,對瀏覽器來說是透明的,瀏覽器并不知道為其服務的Servlet已經換成Servlet2了,它只知道發出了一個請求,獲得了一個響應。而地址欄顯示的URL始終會是原始請求的URL。 案例: 如果傳給RequestDispatcher 的參數以”/”開頭,則訪問的是當前web應用的根目錄 request.getRequestDispatcher(“/index.html”).forward(request, response); 具體可以參考案例:
無論是forward方法還是sendRedirect方法調用前面都不能有PRintWriter輸出到客戶端。 forward方法報錯: java.lang.IllegalStateException: Cannot forward after response has been committed sendRedirect方法報錯:java.lang.IllegalStateException at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
cookie技術 什么是Cookie技術: 一種會話數據管理技術,該技術把會話數據保存在瀏覽器客戶端。比如登錄名、密碼 那么Cookie技術的原理是什么,它是如何工作的呢? 1)首先瀏覽器向服務器發出請求。 2)服務器就會根據需要生成一個Cookie對象,并且把數據保存在該對象內。 3)然后把該Cookie對象放在響應頭,一并發送回瀏覽器。 4)瀏覽器接收服務器響應后,提出該Cookie保存在瀏覽器端。 5)當下一次瀏覽器再次訪問那個服務器,就會把這個Cookie放在請求頭內一并發給服務器。 6)服務器從請求頭提取出該Cookie,判別里面的數據,然后作出相應的動作
①存在于客戶端(可被阻止) ②只能是文本文檔 ③如果設置了期限值,則寫入客戶端的文件; 如果沒有,它只對本窗口或其子窗口有效,其它窗口不能訪問該Cookie ④在Servlet/JSP中設置的Cookie可以被同路徑下或其子路徑的Servlet/JSP訪問,父路徑不可以 ○注:這里的路徑是指URL,而不是Web文件的目錄
1.cookie有點像一張表,分兩列,一個是名字,一個是值,數據類型都是String 2.如何創建一個cookie(在服務器端創建的) Cookie c=new Cookie(String name, String val); 3.如何將一個cookie添加到客戶端 response.addCookie(c); 4。如何讀取cookie(從客戶端讀到服務器) request.getCookies();
備注說明: 1.可以通過IE——工具——internet選項——隱私——高級來啟用或是禁用cookie 2.由于cookie的信息是保存在客戶端的,因此安全性不高 3.cookie信息的生命周期可以在創建時設置(比如30s),從創建那一時刻起,就開始計時,到時該cookie的信息就無效了 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputStream out=response.getOutputStream(); response.setCharacterEncoding(“UTF-8”); Cookie[] cook=request.getCookies(); if(cook==null) { out.write(“第一次訪問,welcome”.getBytes(“UTF-8”)); } else { for(int i=0;i
新聞熱點
疑難解答