5、ServletRequest對象和ServletResponse對象--簡介

5、ServletRequest對象
    1.ServletRequest對象,本質是一個接口,接口裏定義了與Servlet請求有關的方法。
    2.咱們開發過程當中用的Servlet,每每繼承HttpServlet。
    3.HttpServletRequest接口是ServletRequest的子接口,是專門用於HTTP協議的,裏面定義了許多HTTP請求相關的方法。
    4.在一次Servlet請求過程當中,Servlet容器收到請求後,建立ServletRequest對象(實現此接口的類的對象),將請求消息(好比請求參數、訪問端口)封裝到ServletRequest對象中,經過調用servlet的service(ServletRequest req, ServletResponse res)方法(也多是doGet、doPost),將請求對象注入到方法中。
    5.在HttpServlet類的service(ServletRequest req, ServletResponse resp)方法中,有一段代碼,是將ServletRequest對象和ServletResponse對象,強制轉換爲HttpServletRequest對象和HttpServletResponse對象,爲何可以強轉呢?是由於Tomcat容器建立的request,實際上就是HttpServletRequest接口的實現類(RequestFacade類)的實例。數組

6、ServletResponse對象
    1.ServletResponse對象,本質是一個接口,接口裏定義了與Servlet響應有關的方法。
    2.我遇到過的問題:
        (1)經過HttpServletResponse獲取PrintWriter對象,輸出中文到網頁亂碼的問題。PrintWriter的做用,我的感受相似system.out.print(),一個輸出內容到網頁,一個輸出到控制檯。亂碼的緣由多是:1.沒有設置響應的編碼格式爲UTF-8,能夠經過setCharacterEncoding方法解決;2.沒有設置瀏覽器讀取文檔的編碼格式,能夠經過setContentType("charset=utf-8")方法解決;3.以上2個設置都設置了,可是是在獲取PrintWriter對象以後才設置的,應在獲取PrintWriter對象以前就設置好。
        (2)PrintWriter和ServletOutputStream的區別:前者輸出字符(用於輸出網頁),後者輸出二進制(用於文件下載、圖片展現)。這兩個方法相互排斥,只能調用其一,若是要用,則要在換方法以前調用flush(),將緩衝區數據沖掉。 
        (3)PrintWriter在輸出字符文本時內部須要將字符串轉換成某種字符集編碼的字節數組,使用他的好處就是不須要本身來完成從字符串到字節數組的轉換。 轉換的字符集編碼是經過設置setContentTpye或setCharacterEncoding或setLocale等方法實現的;使用ServletOutputStream對象直接從一個字節輸入流中讀取出來,而後再原封不動的輸出到客戶端。 
        瀏覽器

相關文章
相關標籤/搜索