關於servlet和jsp的學習總結三(詳細)

來源:互聯網
上載者:User

再看下面文字時,首先我們要將上面的圖搞清楚,這樣在編碼的時候就會根據不同的需求去繼承不同的類了

Servlet  API的核心是javax.servlet.Servlet介面,所有的servlet類都必須繼承這一介面,在Servlet介面中定義了5個方法,其中3個方法都有servlet容器來調用,容器會在servlet的生命週期的不同階段來調用不同的方法。

@init(ServletConfigconfig)方法:負責初始化servlet對象。容器在建立好之後就開始調用這個方法。

@service(ServletRequestreq,ServletResponse res)方法:負責響應客戶的請求。當容器收到來自用戶端的訊息之後,就會調用servic方法然後根據http協議中的get方法or post方法然後在servlet中用相應的doGet()和doPost方法來進行處理。

@destroy()方法:負責釋放servlet對象佔有的資源,當servlet對象結束生命週期的時候就會調用此方法。

 

 

當我們的servlet繼承了GenericServlet類之後,就會自動複寫父類的   @Override

      public voidservice(ServletRequest req, ServletResponse res)

                 throwsServletException, IOException {

      }方法。

此時將詳細講解ServletRequest 介面:

在上述的方法裡有一個ServletRequest類型的參數。ServletRequest類表示來自用戶端的請求,當servlet容器接收到用戶端要訪問特定的servlet請求之後,容器先解析用戶端的未經處理資料,把它封裝成一個ServletRequest對象。當容器調用servlet對象的service方法時,就可以把ServletRequest作為參數傳遞給service()方法

ServletRequest介面提供了一系列讀取用戶端的請求資料的方法

@getContentLength():返回請求本文的長度,如果請求本文長度未知,則返回-1;

@getContentType():獲得請求本文的MIME類型,如果請求本文的類型未知,則返回null

@getInputStream():用於讀取請求本文的輸入資料流

@getLocalAddr():返回伺服器端的IP地址

@getLocalName():返回伺服器端的主機名稱

@getLocalPort():返回伺服器端的ftp連接埠號碼

@getParameter(String name):根據給定的參數名,返回請求中德匹配請求參數值

@getProtocol():返回用戶端和伺服器端通訊所用的協議名稱及版本號碼

@getReader():返回用於讀取字串形式的請求本文的BufferReader對象。

@getRemoteAddr():返回用戶端的ip地址

@getRemoteHost():返回用戶端的主機名稱

@getRemotePort():返回用戶端的ftp連接埠號碼

此外在ServletRequest介面中還定義了一組用於在請求範圍記憶體取共用資料的方法

@setAttribute(String name,Object object):在請求範圍之內儲存一個屬性值,參數name表示屬性名稱,參數object表示屬性值

@getAttribute(String name):根據name參數給定的屬性名稱,返回請求範圍內匹配的屬性值

@removeAttribute(String name):從請求範圍內刪除一個屬性值

此時將詳細講解ServletResponse介面:

在ServletResponse介面中定義了一系列與產生響應結果相關的方法

@setCharacterEnocoding(String charset)設定響應本文的字元編碼,預設是iso-8859-1

@setContentLength(int len)設定響應本文的長度

@setContentType(String type):設定響應本文的MIME的類型

@getCharacterEncoding():返迴響應本文的字元編碼

@getContentType()返迴響應本文的的MIME類型

@setBufferSize(int size):設定用於存放響應本文資料的緩衝區的大小

@getBufferSize    ():獲得用於存放響應本文資料的緩衝區的大小

@reset():清空緩衝區的本文資料,並且清空響應狀態碼及回應標頭

@resetBuffer():僅僅清空緩衝區本文資料,不清空響應狀態碼及回應標頭

@flushBuffer():強制性地把緩衝區資料的響應本文資料發送到用戶端

@isCommited():返回一個boolean,true代表緩衝資料以提交給用戶端,false相反

@getOutputStream():返回一個ServletOutputStream對象用它來輸出位元據

@getWriter():返回一個PrintWriter對象,servlet用它來輸出字串形式的資料

 

 

 

當繼承HttpServlet後會複寫父類的以下方法

public class Setvlert extendsHttpServlet {

      publicSetvlert() {

           super();

      }

      public voiddestroy() {

           super.destroy();// Just puts "destroy"string in log

     

      }

 

     

      public voiddoGet(HttpServletRequest request, HttpServletResponse response)

                 throwsServletException, IOException {

 

           response.setContentType("text/html");

           PrintWriter out =response.getWriter();

           out

                      .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML4.01 Transitional//EN\">");

     

      }

      public voiddoPost(HttpServletRequest request, HttpServletResponse response)

                 throwsServletException, IOException {

 

           response.setContentType("text/html");

           PrintWriter out =response.getWriter();

      }

      public void init()throws ServletException {

     

      }

}

HttpServletRequest介面是ServletRequest介面的子介面。HttpServletRequest介面提供了用於讀取Http請求中的相關資訊

@getScheme()方法返回請求的計劃,比如http,https或者ftp.
@getServerName()方法返回被發送請求的伺服器的主機名稱
@getServerPort()方法返回被發送請求的連接埠號碼。
@getContextPath()返回請求地址的根目錄,以"/"開關,但不是以"/"結尾。
一個常用的獲得伺服器位址的連接字串是:
String path = request.getContextPath();
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

@getCookies() 取得cookie 
@getMethod() 取得要求方法,如get,post或put
@getRequestURL() 取得請求URL(統一資源定位器)
@getRequestURI() 取得請求URI(統一資源識別項)
@getSession() 取得對應session

 

@getHeaderNames()返回請求包含的所有頭名稱的一個enumeration(遍曆器)

HttpServletReponse介面提供了用於設定Http請求中的相關資訊

@從Servlet中可以通過getWriter方法取得PrintWriter對象,來輸出字元資料。從Servlet中可以通過getOutputStream方法取得ServletoutputStream對象。ServletOutputStream既可以輸出字元資料,也可以輸出MIME格式的位元據。如果getWriter方法已經被使用過,當使用getOutputStream時,會有java.lang.IllegalStateException例外拋出。
  @setContentType方法:在響應中可以表明內容格式和長短。
  @setBufferSize方法:設定Web容器的緩衝器大小; getBufferSize方法返回Web容器的緩衝器大小; resetBuffer方法清空並重設緩衝器,使用reset方法清空緩衝器、狀態頭資訊,使用flushBuffer方法將緩衝器內的所有輸出內容向客戶傳遞。使用isCommitted方法判斷是否響應已經被履行。“履行”的定義是指狀態代碼冬耕 資訊已經被寫入響應。
  @setLocal方法設定響應的地區資訊,主要在Web程式的國際貨幣國際化時使用。這個方法應該在getWriter之前被使用。預設的Web伺服器的地區資訊。
  HttpServletResponse繼承了ServletResponse介面,並提供了與Http協議有關的方法,這些方法的主要功能是設定HTTP狀態代碼和管理Cookie。
  @setStatus方法用來設定Servlet向用戶端返回的狀態代碼,它用來設定沒有出錯的狀態。如果Servlet運行出錯,Servlet可以使用sendError方法設定狀態代碼,如sendError(int sc)方法設定錯誤狀態碼。sendError(int sc,String msg)方法除了設定狀態代碼,還向客戶發出一條錯誤資訊。
  @setHeader可以指定特定名稱的頭資訊的值,addDateheader,addIntHeader,setDateHeader,setIntHeader可以加入或理性特定時間或整數型頭資訊。
  @addCookie方法可以在Web伺服器響應中加入Cookie對象,這個對象將被瀏覽器所儲存。Cookie機制也被用來維護工作階段狀態。
  @sendRedirect方法向客戶發出臨時重新導向的響應。它產生的響應狀態代碼為302。該響應給了客戶一個新的URL風趣。如果緩衝器已經被清空,這個方法會彈出一個IllegalStateException例外。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.