Servlet-平常筆記3面試
Servlet之間的交互:信息共享和相互跳轉。跨域
1)三種類型:請求轉發(forward)、URL重定向(redirect)、請求包含(include)。瀏覽器
請求轉發:session
用法:request對象.getRequestDispatcher(String path).forword(request, response);app
參數:path表示目標資源名稱(就是要跳轉到哪裏)。spa
forward(request, response)纔是跳轉,不能漏。對象
URL重定向: blog
用法:response對象.sendRedirect(String path);接口
參數:path表示目標資源名稱。生命週期
常見面試題:轉發和URL重定向的區別。
請求轉發 | URL重定向 |
不改變瀏覽器地址路徑 | 瀏覽器地址改變 |
跳轉先後是同一個請求,共享數據 | 跳轉先後是兩個不一樣的請求,數據不共享 |
不能夠跨域訪問資源 | 能夠跨域訪問資源 |
能夠訪問WEB-INF下的資源 | 不能夠訪問WEB-INF下的資源 |
最終響應輸出有跳轉後的決定 | 最終響應輸出有跳轉後的決定 |
四大做用域對象從小到大分別爲:pageContext、request、session、application。
名稱 | 類型 | 描述 |
pageContext | PageContext | 當前JSP頁面範圍 |
request | HttpServletRequest | 當前請求範圍,同一個請求中,有效,每次請求都是新的請求對象 |
session | HttpSession | 當前會話範圍,(通常瀏覽器不關閉就在)同一個session中共享會話 |
application | ServletContext | 當前應用範圍,Tomcat開啓就建立該對象(有且只有一個),直至Tomcat關閉 |
操做:
設置共享信息:
域對象.setAttribute(String name, Object value);
獲取共享信息:
Object value = 域對象.getAttribute(String name);
修改共享信息:
從新設置一個同名屬性
刪除共享信息:
域對象.removeAttribute(String name);
1.通常登錄信息存放在Session中。
2.組件之間的數據共享存放在request中,此時只能使用請求轉發。
Web容器在啓動時,會建立一個ServletContext對象,當容器關閉時,對象被銷燬,在整個Web生命週期中,只有該對象,表示當前的應用。
如何獲取ServletContext對象:
1)若在Servlet中,使用super.getServletContext獲取。 GenericServlet實現了Servlet和ServletConfig接口,而getServletContext方法就在ServletConfig接口中。
2)經過請求對象獲取:
request對象.getServletContext(); Tomcat7開始支持
request對象.getSession().getServletContext();
經常使用方法:
1)String getContextPath(); 獲取當前應用的上下文路徑。
2)StringgetRealPath(String path); 獲取資源的絕對路徑。
3)全局初始化參數:
獲取全局的初始化參數,就不能使用ServletConfig對象.getInitParameter來獲取,而應該使用ServletContext對象.getInitParameter來獲取。
在總結的最後發現,getParameter()方法和getAttribute()方法好像都能獲取信息,那他們有什麼區別呢?
百度了一下,他們的用途不同,前者多用於獲取用戶輸入的信息,如表格;後者多用於開發者本身設置的用來共享的信息。