JAVA學習第六天-深入servlet工作機制

什麼是servlet

Servlet(Server Applet)是Java Servlet的簡稱,稱爲小服務程序或服務連接器,用Java編寫的服務器端程序,具有獨立於平臺和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容。

serlet的生命週期和流程

Servlet的請求流程文字描述:
1:瀏覽器發出請求:http://localhost:8080/hello/hi.
2:tomcat解析請求:
上下文路徑: /hello
資源名稱: /hi
3:從…\webapp的WEB-INF下找到web.xml文件(當前訪問項目的配置文件).
並判斷web.xml文件中是否有的文本內容爲/hi.
若找不到:響應404.
找 到:獲取當我請求資源對應Servlet類的全限定名稱: com.test.servlet.HelloServlet
4:判斷Servlet實例緩存池中是否存在com.test.servlet.HelloServlet對應的對象.
Map<String,Servlet> cache = …(Servlet實例緩存池)
Servlet obj = cache.get(": com.test.servlet.HelloServlet");
if(obj==null){//實例緩存中沒有: com.test.servlet.HelloServlet的對象,說明是第一次.
//使用反射創建對象(調用構造器)
obj = Class.forName(": com.test.servlet.HelloServlet").newInstance();
//把Servlet對象,放入緩存中,供下次使用
cache.put(": com.test.servlet.HelloServlet",obj);
}else{
GOTO 6:
}
5:創建ServletConfig對象,並調用init方法.
obj.init(config);
6:創建ServletRequest和ServletResponse對象,並調用service方法,並作出相應.
obj.service(req,resp);

HttpServlet

HttpServletRequest接口,表示Http的請求對象.是ServletRequest接口的子接口.
在該接口中的方法,可以獲取請求信息(請求行,請求頭,請求實體).

常用的方法:
1:String getMethod():返回請求方式:如GET/POST
2:String getRequestURI():返回請求行中的資源名字部分
3:StringBuffer getRequestURL():返回客戶端請求的完整URL
4:String getContextPath():返回請求URL所屬Web應用的路徑
5.String getRemoteAddr():返回發出請求的客戶機的IP地址
6.String getHeader(String name):根據指定的請求頭名,獲取對應值.
獲取請求參數:
01.String getParameter(String name):返回指定名字參數的值。
02.String[] getParameterValues(String name):返回指定名字參數的多個參數值。
03.Enumeration getParameterNames():返回所有參數名的Enumeration對象。
04.getParameterMap():返回所有的參數和值所組成的Map對象。

問題:
String getInitParameter(String paramName):獲取初始化參數,初始化參數是我們自己爲了避免硬編碼在web.xml中手動設置的.
String getParameter(String paramName):獲取請求參數,(用戶錄入的數據)

COOKIE

對於COOKIE他存在一個極大的問題就是關閉瀏覽器就結束了
對於SESSION而言就不同
SESSION是現在的主流:
Session的操作:
1):獲取Session對象/創建Session對象.
HttpSession session = request對象.getSession();等同於getSession(true);
HttpSession session = request對象.getSession(true);:如果當前有Session對象,就直接返回,若沒有,則先創建一個再返回.
HttpSession session = request對象.getSession(false);:如果當前有Session對象,就直接返回,若沒有,則返回null.

2):把共享數據存儲在Session中.
Session對象.setAttribute(String name,Object value);
session.setAttribute(“currentName”,“Helloword”);

3):從Session中獲取共享數據:
Object val = session.getAttribute(“currentName”);

4):修改Session中的共享數據.
重新設置一個同名的屬性名
session.setAttribute(“currentName”,“世界你好!”);

5):刪除Session中的共享數據.從Session中刪除指定名的屬性值.
session.removeAttribute(“cuurentName”);
6):Session的規範命名:
1):一般,根據我們隊大師的研究,發現session中的屬性名,習慣起名爲:XXX_IN_SESSION.
2):把登陸信息封裝在一個對象中,再存儲到Session中.
LoginUser user = new LoginUser(“無忌”,…);
session.setAttribute(“USER_IN_SESSION”,user);

7):銷燬Session對象(註銷登錄):
session.removeAttribute(“USER_IN_SESSION”)方法,只能刪除Session中指定名稱的屬性.
session.invalidate():銷燬整個Session對象.

8):Session的超時管理.
session.setMaxInactiveInterval(int seconds);
session.setMaxInactiveInterval(15);若上一次操作之後,15內不再次和該網頁交互,則Session會被自動銷燬.
兩次操作的間隔時間不能超過15秒,若超過自動銷燬Session.
一般的,不需要我們去設置,在Tomcat中,默認的超時時間爲30分鐘(一般在20分鐘就被銷燬了).

session存放在服務器
作用域是全局

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章