Servlet是由SUN公司提供的一門動態Web資源開發技術。
Servlet是JavaWeb的三大組件之一,它屬於動態資源。Servlet的做用是處理請求,服務器會把接收到的請求交給Servlet來處理,在Servlet中一般須要:html
public interface Servlet { public void init(ServletConfig config) throws ServletException; public ServletConfig getServletConfig(); public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; public String getServletInfo(); public void destroy(); }
public class HelloServlet implements Servlet { public void init(ServletConfig config) throws ServletException {} public ServletConfig getServletConfig() {return null;} public void destroy() {} public String getServletInfo() {return null;} public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("hello servlet!"); } }
<servlet> <servlet-name>hello</servlet-name> <servlet-class>cn.itcast.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/helloworld</url-pattern> </servlet-mapping>
一、實例化 在第一次訪問servlet的時候建立servlet對象,只調用一次。證實servlet對象在Tomcat中是單例。
二、初始化init()方法 建立完servlet對象的時候調用,只調用1次。
三、服務service()方法 每次發出請求是調用。調用N次
四、銷燬 destroy()方法 銷燬servlet對象的時候調用,中止服務器或者從新部署web應用時銷燬servlet對象。只調用一次。
java
HttpServlet類是GenericServlet的子類,它提供了對HTTP請求的特殊支持,因此一般咱們都會經過繼承HttpServlet來完成自定義的Servlet。web
ServletRequest和ServletResponse是Servlet#service() 方法的兩個參數,一個是請求對象,一個是響應對象,能夠從ServletRequest對象中獲取請求數據,可使用ServletResponse對象完成響應。你之後會發現,這兩個對象就像是一對恩愛的夫妻,永遠不分離,老是成對出現。
ServletRequest和ServletResponse的實例由服務器建立,而後傳遞給service()方法。若是在service() 方法中但願使用HTTP相關的功能,那麼能夠把ServletRequest和ServletResponse強轉成HttpServletRequest和HttpServletResponse。這也說明咱們常常須要在service()方法中對ServletRequest和ServletResponse進行強轉,這是很心煩的事情。不事後面會有一個類來幫咱們解決這一問題的。瀏覽器
GenericServlet是Servlet接口的實現類,咱們能夠經過繼承GenericServlet來編寫本身的Servlet。
服務器
response.getWriter().print(「<h1>Hello JavaWeb!</h1>」);
setCharacterEncoding(「utf-8」);
以後,再response.getWriter()獲取字符響應流對象,這時的響應流的編碼爲utf-8,使用response.getWriter()輸出的中文都會轉換成utf-8編碼後發送給客戶端;setHeader(「Refresh」, 「3;url=http://www.baidu.com」)
,表示3秒後自動刷新到http://www.baidu.com;setHeader(「content-type」, 「xxx」)
的簡便方法,即用來添加名爲content-type響應頭的方法。content-type響應頭用來設置響應數據的MIME類型,例如要向客戶端響應jpg的圖片,那麼能夠setContentType(「image/jepg」)
,若是響應數據爲文本類型,那麼還要臺同時設置編碼,例如setContentType(「text/html;chartset=utf-8」)
表示響應數據類型爲文本類型中的html類型,而且該方法會調用setCharacterEncoding(「utf-8」)
方法;response(404, 「您要查找的資源不存在!」)
。ServletContext對象的做用是在整個Web應用的動態資源之間共享數據!例如在AServlet中向ServletContext對象中保存一個值,而後在BServlet中就能夠獲取這個值,這就是共享數據了。
cookie
1. getRequestDispatch().forward() 請求轉發跳轉發生在服務器<容器>所以能夠取得,瀏覽器不知道請求被轉發了,因此地址欄上不會看到變化,sendRedirect發生在瀏覽器,要求瀏覽器從新請求另外一個URL,故又稱爲重定向,地址欄上會顯示URL的變動。
2. 若是但願下一個頁面可使用此屬性,用getRequestDispatch
3. 若是session.setAtrribute(「name」,「aa」) 若是但願下一個頁面可使用屬性,兩個方法均可以用,可是建議使getRequestDispatch
4. 若是但願跳轉到本網站外的URL,只能用sendRedirectsession
1.Serlvet接口只定義了一個服務方法就是service,而HttpServlet類實現了該方法而且要求調用下列的方法之一:
2.doGet:處理GET請求
3.doPost:處理POST請求
4.當發出客戶端請求的時候,調用service 方法並傳遞一個請求和響應對象。Servlet首先判斷該請求是GET 操做仍是POST 操做。而後它調用下面的一個方法:doGet 或 doPost。若是請求是GET就調用doGet方法,若是請求是POST就調用doPost方法。doGet和doPost都接受請求(HttpServletRequest)和響應(HttpServletResponse)。app
1.在要傳遞值的頁面,Response.sendRedirect(url)
2.session
3.cookie
4.applicaiton
5.request.serAttribute(「uname」,u);
6.request.getRequestDispacther(「/…/…」)框架
(1).page:僅在當前頁可用(保存在當前的PageContext中)
(2).request:僅用於當前客戶端的請求(保存在ServletRequest對象中),它在同一個請求範圍內有效.
(3).session:僅在當前的HttpSession的生命週期內,當前瀏覽器窗口的整個生存期都有效.關閉瀏覽器時,這個對象會跟着消失,在整個對話期間都有效.
(4).application:在整個應用範圍內都有效,只有當服務器重啓時,這個對象纔會消失.jsp
1.JSP在本質上就是SERVLET,可是二者的建立方式不同.Servlet徹底是JAVA程序代碼構成擅長於流程控制和事務處理而經過Servlet來生成動態網頁;JSP由HTML代碼和JSP標籤構成,能夠方便地編寫動態網頁
2.所以在實際應用中採用Servlet來控制業務流程,而採用JSP來生成動態網頁.在struts框架中,JSP位於MVC設計模3.JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯後是「類servlet」。Servlet和JSP最主要的不一樣點在於,Servlet的應用邏輯是在Java文件中,而且徹底從表示層中的HTML裏分離開來。而JSP的狀況是Java和HTML能夠組合成一個擴展名爲.jsp的文件。JSP側重於視圖,Servlet主要用於控制邏輯。
Cookie:服務器在客戶端保存用戶的信息
Session:服務器能夠爲每一個用戶瀏覽器建立一個會話對象
Servlet是特殊的Servlet,可以對特定的請求路徑進行過濾,在訪問這個路徑以前,先執行過濾器,過濾器進行預處理,過濾器決定是否繼續執行後續的文件。典型的應用,能夠把用戶驗證的代碼寫在過濾器中,而後把過濾的路徑配製成須要驗證的文件的路徑。
Servlet監聽器對特定的事件進行監聽,當產生這些事件的時候,會執行監聽器的代碼。能夠對應用的加載、卸載,對session的初始化、銷燬,對session中值變化等事件進行監聽。