日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Servlet基础(一) Servlet基础和关键的API介绍

發布時間:2025/5/22 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet基础(一) Servlet基础和关键的API介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:http://www.cnblogs.com/mengdd/p/3202550.html

Servlet基礎(一) Servlet簡介 關鍵API介紹及結合源碼講解

  

Servlet基礎(一) Servlet基礎和關鍵的API介紹

?

Servlet簡介

  Java Servlet是和平臺無關的服務器端組件,它運行在Servlet容器中。

  Servlet容器負責Servlet和客戶的通信以及調用Servlet的方法,Servlet和客戶的通信采用“請求/響應”的模式。

?

  Servlet可完成如下功能:

  創建并返回基于客戶請求的動態HTML頁面。

  創建可以嵌入到現有HTML頁面中的部分HTML頁面(HTML片段)。

  與其他服務器資源(如數據庫或基于Java的應用程序)進行通信。

?

Servlet API

  Servlet的框架是由兩個Java包組成:

  1.javax.servlet包:定義了所有的Servlet類都必須實現或擴展的通用接口和類。

  2.javax.servlet.http包:定義了采用HTTP協議通信的HttpServlet類。

?

javax.servlet.Servlet

  Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必須實現這一接口。

  在Servlet接口中定義了五個方法,其中有三個方法代表了Servlet的生命周期:

  init方法:負責初始化Servlet對象。

  service方法:負責響應客戶的請求。

  destroy方法:當Servlet對象退出生命周期時,負責釋放占用的資源。

?

HttpServlet

  每一個Servlet都必須要實現Servlet接口。

  GenericServlet是個通用的、不特定于任何協議的Servlet,它實現了Servlet接口。

  HttpServlet繼承于GenericServlet,因此我們定義的Servlet只需要繼承HttpServlet即可。

?

  Servlet接口中定義了一個service方法,HttpServlet對該方法進行了實現。

  HttpServlet對service方法的實現方式:

  第一步,進行一個分發。

  將ServletRequestServletResponse轉換為HttpServletRequestHttpServletResponse

  轉換完畢后,會調用HttpServlet中自己的service方法,源碼如下:

?

@Overridepublic void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {HttpServletRequest request;HttpServletResponse response;try {request = (HttpServletRequest) req;response = (HttpServletResponse) res;} catch (ClassCastException e) {throw new ServletException("non-HTTP request or response");}service(request, response);}

?

  第二步,從上個service方法中接收標準的HTTP請求,然后將它們繼續分發到相應的doXXX方法中:

  源碼:

?

protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String method = req.getMethod();if (method.equals(METHOD_GET)) {long lastModified = getLastModified(req);if (lastModified == -1) {// servlet doesn't support if-modified-since, no reason// to go through further expensive logicdoGet(req, resp);} else {long ifModifiedSince;try {ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);} catch (IllegalArgumentException iae) {// Invalid date header - proceed as if none was setifModifiedSince = -1;}if (ifModifiedSince < (lastModified / 1000 * 1000)) {// If the servlet mod time is later, call doGet()// Round down to the nearest second for a proper compare// A ifModifiedSince of -1 will always be lessmaybeSetLastModified(resp, lastModified);doGet(req, resp);} else {resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);}}} else if (method.equals(METHOD_HEAD)) {long lastModified = getLastModified(req);maybeSetLastModified(resp, lastModified);doHead(req, resp);} else if (method.equals(METHOD_POST)) {doPost(req, resp);} else if (method.equals(METHOD_PUT)) {doPut(req, resp);} else if (method.equals(METHOD_DELETE)) {doDelete(req, resp);} else if (method.equals(METHOD_OPTIONS)) {doOptions(req,resp);} else if (method.equals(METHOD_TRACE)) {doTrace(req,resp);} else {//// Note that this means NO servlet supports whatever// method was requested, anywhere on this server.//String errMsg = lStrings.getString("http.method_not_implemented");Object[] errArgs = new Object[1];errArgs[0] = method;errMsg = MessageFormat.format(errMsg, errArgs);resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);}}第二個service方法

  

?

?

  在HttpServlet的第二個service方法中,首先從HttpServletRequest對象中獲取HTTP請求方式的信息,然后再根據請求的方法名調用相應的方法doXXX方法。

  比如,如果請求方式為GET,那么調用doGet方法;如果請求方式為POST,那么調用doPost方法。

  如果你的Servlet類擴展了HttpServlet類,你通常不必實現service方法。

  需要注意的是在HttpServlet類中所提供的doGet、doPost等方法都是直接返回錯誤信息,所以我們需要在自己定義的Servlet類中override這些方法。

?

ServletRequest接口

  ServletRequest接口中封裝了客戶請求信息,如客戶請求方式、參數名和參數值、客戶端正在使用的協議,以及發出客戶請求的遠程主機信息等。

  ServletRequest接口還為Servlet提供了直接以二進制方式讀取客戶請求數據流的ServletInputStream。

  ServletRequest的子類可以為Servlet提供更多的和特定協議相關的數據。

  例如,HttpServletRequest提供了讀取HTTP Head信息的方法。

?

ServletResponse接口

  ServletResponse接口為Servlet提供了返回響應結果的方法。

  它允許Servlet設置返回數據的長度和MIME類型,并且提供輸出流ServletOutputStream。

  ServletResponse子類可以提供更多和特定協議相關的方法。

  例如,HttpServletResponse提供設定HTTP Head信息的方法。

?

?

?

創建自己的HttpServlet類的步驟

  1.擴展HttpServlet抽象類。

  2.覆蓋HttpServlet的部分方法,如覆蓋doGet()或doPost()方法。

  3.獲取HTTP請求信息,例如通過HttpServletRequest對象來檢索HTML表單所提交的數據或URL上的查詢字符串。

  無論是表單數據還是URL上的查詢字符串,在HttpServletRequest對象中都以參數名/參數值的形式存放,你可以通過getParameter()方法檢索參數信息。

  4.生成HTTP響應結果。

  通過HttpServletResponse對象可以生成響應結果。

  HttpServletResponse對象有一個getWritter()方法,該方法返回一個PrintWriter對象。

  用PrintWritter的print()println()方法可以向客戶端發送字符串數據流。

  比如下面這個簡單的Servlet:

?

public class HelloWorldServlet extends HttpServlet {@SuppressWarnings("deprecation")@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{resp.setContentType("text/html");PrintWriter out = resp.getWriter();out.println("<html><head><title>Hello World Sample</title></head>");out.println("<body><h1>Hello World Title<h1><h2>" +new Date().toLocaleString() + "</h2></body></html>");out.flush();}}

?

?

?

ServletContext和Web應用關系

  當Servlet容器啟動Web應用時,為每個Web應用創建唯一的ServletContext對象。

  你可以把ServletContext看成是一個Web應用的服務器端組件的共享內存。

  在ServletContext中可以存放共享數據,它提供了讀取或設置共享數據的方法:

  setAttribute(java.lang.String name, java.lang.Object object)把一個對象和一個屬性名綁定,將這個對象存儲在ServletContext中。

  getAttribute(java.lang.String name)根據給定的屬性名返回所綁定的對象。

?

參考資料

  圣思園張龍老師Java Web視頻教程。

  參考文檔:

  1.javax.servlet包:定義了所有的Servlet類都必須實現或擴展的通用接口和類。

  http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/package-summary.html

?

  2.javax.servlet.http包:定義了采用HTTP協議通信的HttpServlet類。

  http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/package-summary.html

  API的源碼可以去Tomcat官網下載:

  http://tomcat.apache.org/download-70.cgi

轉載于:https://www.cnblogs.com/gwq369/p/5276045.html

總結

以上是生活随笔為你收集整理的Servlet基础(一) Servlet基础和关键的API介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。