Servet和JSP學習總結

來源:互聯網
上載者:User

前天去面試,遇到一個搞技術的面試官。問了好多問題,好多沒答上來,不是不會而是掌握的不夠紮實,沒有進行歸納和總結。最典型的是集合類的階層,Jsp內建對象之間的關係。這些問題不能說不會,而是不夠紮實,沒有站在一個系統的高度來看這些問題。雖然面試的不成功,但收穫的還是挺大的。使我看到了自己學的還是很不夠,很多東西要學習。面試主要是搞Web開發,使用三大架構:Struts,Spring,Hibernate。這半年都在搞安全了,搞的也是傳統型應用程式,沒有做Web開發,Java主要的優勢還在於Web開發。面試回來後打算把三打架構好好看看。我相信我的學習能力,遺憾沒有在面試官面前表現出來。下面是我照著張孝祥老師編寫的《深入體會Javaweb開發內幕》寫的。

Servelt就是由兩個包組成javax.servlet和javax.servelt.http
前者裝是基本的servet類,後者是與http有關的類。後者中大部分類都實現了前者的類。我們在寫Servelt時很多都直接使用後者中的類。
GenericServlet實現了Servlet和ServletConfig介面。
HttpServlet繼承了GenericServlet類
我們在寫Servlet時繼承HttpServlet。

ServletConfig對象可以獲得Servlet的配置參數:如Web.xml中設定的初始化參數等通過Servlet.getServletConfig()獲得ServletConfig對象。
ServletConfig對象中包括對ServletContext的引用。

ServletContext是Web應用程式中所有的Servelt共用,通過getServletContext()獲得serveltContext對象。它的範圍是整個Web應用程式。所以它可以訪問資源檔,可以使用相對路徑。可以獲得虛擬路徑所映射的本地路徑。

HttpServletResponse是ServletResponse子介面,用於響應請求。代表用於Http協議的響應訊息對象。可以產生響應狀態行、構造響應訊息頭(設定字元集編碼)、建立響應本文等。
   cookie的增加使用方法:HttpServletResponse.addCookie(Cookie)。
   Servelt中文輸出問題可以用下面語句解決:
        response.setCharacterEncoding("GB2312");
        response.setContentType("text/html;GB2312");
        response.setLocale(new java.util.Locale("zh","CN"));
   讓瀏覽器定時重新整理網頁或跳轉至其他頁面
        response.setHeader("Refresh","2");
        response.setHeader("Refresh","2;URL=http://www.it315.org");
   禁止緩衝當前文檔的內容可以用
        response.setDateHeader("Expires",0);
        response.setHeader("Cache-Control","no-cache");
        response.setHeader("Pragma","no-cache");
    建立響應本文:response.getOutputStream()和getWriter()
          分別得到ServletOutputStream和PrintWriter對象,可以看到一個是位元組流,一個是字元流。
    請求重新導向和請求轉寄:
         請求重新導向用RequestDispatcher.forward(),請求轉寄用HttpServletResponse.sendRedirect()。                   RequestDispatcher通過ServletContext介面中的getRequestDispatcher方法獲得。
    區別在於重新導向是調用別的Servlet來處理,對使用者是透明的,而sendRedirect() 是將請求轉寄給到別的頁面。重新導向只能在同一個Web應用程式內資源內轉寄請求,而sendRedirect()可以在任意頁面間轉寄。
    區別RequestDispatcher.indlude()和RequestDispatcher.forward()。
       indlude被調用者不能改變響應訊息的狀態代碼和訊息頭。forward方法中調用者和被調用者之間共用相同的   request對象和response對象。
RequestDispatcher.forward和HttpServletResponse.sendRedirect方法在調用它們之前都不能有緩衝區輸出到用戶端。緩衝區的內容會被清空。

HttpServletRequest是ServletRequest的子介面,它代表請求訊息。
    通過它的方法可以獲得請求行的相關資訊、網路連接資訊、要求標頭資訊、傳遞的參數等。
     請求行:對於如下請求:
         http://localhost:8080/it315/controller/one.jsp?param1=abc
         下面方法可以得到如下資訊:
             request.getMethod() :GET
             request.getRequestURI() :/it315/controller/one.jsp
             request.getQueryString():param1=abc
             request.getProtocol():http/1.1
             request.getContextPath:/it315
             request.getPathInfo:/one.jsp
             request.getPathTranslated:C:\tomcat-5.5.4\webapps\it315\one.jsp
             request.getServletPath: /controller
      網路連接就是些IP地址,連接埠什麼的,不看了。
      要求標頭資訊:可以獲得指定名稱的頭欄位的值,日期,Content-Type頭欄位,請求訊息的實體部分的字元集編碼等。
      防盜鏈技術:
          防止被人直接超連結內容,判斷要求標頭referer欄位是否來自本站。
     擷取請求參數:getParameter(String)
     擷取請求訊息實體內容:與response對應,有擷取請求訊息實體內容的方法。request.getInputStream()和getReader()方法。分別表示位元組流和字元流
      利用請求域傳遞屬性資訊。方法是request.setAttribute()。然後將請求重新導向forward到別的處理模組。

會話和狀態管理
有兩種方式Cookie和Session。Cookie儲存在用戶端,Session儲存在服務端。形象的比喻是Cookie是商場發放的優惠卡,優惠卡上記錄優惠政策。Session比喻為病曆卡,醫院為每個病人保留病曆檔案。病曆卡上只填寫了卡號。
Cookie是一個類,它通過new Cookie(String name,String value)執行個體化。request.getCookies()返回所有的Cookie。response.addCookie(Cookie cookie)。HttpSession是介面。Request.getSession()的到Session對象。

JSP
Jsp內建對象與Servlet中的類對應關係
             application----> ServletContext
             config    -----> ServletConfig
             session   ----->HttpSession
             request   ----->HttpServletRequest
             response ----->HttpServletResponse
             page是Jsp被翻譯成Servlet對象自身
             out是JspWriter的執行個體,調用ServletResponse.getWriter()的到的PrintWriter將out對象的緩衝區內容寫入到Servlet引擎提供的緩衝區中。
             pageContext是javax.servlet.jsp.JspContext的子類,pageContext對象封裝了當前JSP頁面的運行資訊,它提供了返回JSP頁面的其他內建對象的方法。
            由servelt中的關係,可以得到內建對象之間的關係。通過config可以獲得application,通過session可以獲得application。通過request可以獲得session。通過pageContext可以獲得所有的內建對象。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.