版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/45934503
Java Servlet關鍵點詳解
作者:chszs,轉載需注明。部落格首頁: http://blog.csdn.net/chszs
1、了解Servlet的生命周期
Servlet引擎控制着Servlet的生命周期
Servlet的生命周期由以下三個方法進行描述(五個生命周期階段)
1)初始化 init(ServletConfig obj)
2)服務 service(servletRequest, servletResponse)
3)銷毀 destroy()
在Servlet生命過程中發生一些事的話,Servlet引擎會調用Servlet執行個體上的這些方法進行處理。
2、什麼是ServletConfig
Servlet使用請求參數來接受來自用戶端的資料,以便處理請求。
一些特定的資料必須在Servlet初始化時提高給Servlet,這些資料專門針對某些用戶端,但這些資料不是用戶端通過請求參數提供的。
在Servlet初始化期間,使用初始化參數提供資料給Servlet,初始化參數是在Web部署描述符(web.xml)中設定的。
Servlet在運作期間都可以通路這些參數。
從一請求到另一請求,請求參數是可以發生改變的。
從一Servlet到另一Servlet,初始化參數也是可以發生改變的。
3、什麼是ServletContext
可以在一個Servlet容器中部署多個Web應用。
每一個Web應用都在單獨的環境中包含了自己的資源,這個單獨的環境稱之為Web應用的上下文或者叫ServletContext。
屬于某個Web應用上下文的資源對于另一個Web應用的上下文來說,是無效的。
一個Servlet上下文包含了零到多個Servlet,針對每一個Servlet對象,Servlet容器都為之建立了單獨的ServletConfig對象。
4、在Servlet中可以定義構造方法嗎
是的。在Servlet這可以定義構造方法,但是我們不能顯式地調用此構造方法,因為這是Servlet容器的工作。Servlet容器會建立Servlet對象,構造方法當然也由Servlet容器調用。
5、可以在Servlet的初始化init()方法内調用destroy()方法嗎?會發生什麼事?
是的,可以在Servlet的初始化init()方法内調用destroy()方法。
實際上,如果在init()方法中無事可做的話,容器會自動調用destroy()方法。
如果我們重寫destroy()方法,并在init()方法中調用,那麼destroy()方法将會得到執行。
6、GenericServlet和HttpServlet有何不同?
1)GenericServlet
是抽象類;它獨立于協定;是Servlet類的子類;支援public void service(ServletRequest req,ServletResponse res)方法。
2)HttpServlet
也是抽象類;它依賴于Http協定;是GenericServlet類的子類;支援public void service()方法以及protected void service()方法、doGet()方法、doPost()方法、doPut()方法、doDelete()方法、doHead()方法、doTrace()方法、doOptions()方法等。
7、doGet()方法和doPost()方法有何不同
1)doGet()方法
完整的方法protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException;
處理的是HTTP GET請求;
請求參數添加到URL後,通過Header資訊發送;
請求參數不能被加密;
使用doGet()方法發送的最大資料長度不能超過240位元組。
2)doPost()方法
完整的方法Protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
處理的是HTTP POST請求;
請求參數以表單的形式送出;
請求參數可以被加密;
使用doPost()方法發送的資料長度無限制。
8、可以在一個Servlet中調用另一個Servlet嗎?
是的,可以在一個Servlet中調用另一個Servlet,也即衆所周知的Servlet間的通信。
通過使用RequestDispatcher對象可以做到Servlet間的通信。
RequestDispatcher rd=request.getRequestDispatcher("other servlet url name");
rd.forward(req, res);
9、forward()方法和sendRedirect()方法有何不同?
1)forward()方法
示例代碼:
request.getRequestDispathcer("example.jsp").
forward(request, response);
用于在伺服器域内把請求繼續轉發到可用的資源上。
2)sendRedirect()方法
response.sendRedirect("http://www.instanceofjava.com");
用于将請求重定向到其它的資源或域上。
10、怎樣在一個Servlet的上下文擷取另一個Servlet的資訊?
使用setAttribute()方法可以擷取另一個Servlet的資訊:
Context.setAttribute("name", "value")
Context.getAttribute("name")