Java Web servlet理解

前言:按照習慣,首先上個demo。

一個servlet例子:

第一步:java代碼:

package com.zhoum.intelligentler.servlet;

public class DownloadServlet extends HttpServlet{

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        String queryString = req.getQueryString();
        Map<String, String> map = QueryStringUtil.createQueryMap(queryString);
        String src = map.get("src");
        String dst = map.get("dst");
        String md5 = map.get("md5");
        System.out.println("傳入的src爲:" + src);
        System.out.println("傳入的dst爲:" + dst);
        System.out.println("傳入的md5爲:" + md5);
        PrintWriter pw = resp.getWriter();
        pw.println("傳入的src爲:" + src);
        pw.println("傳入的dst爲:" + dst);
        pw.println("傳入的md5爲:" + md5);
        pw.flush();
        pw.close();
    }

}

第二步:web.xml文件:在web.xml文件中配置寫好的servlet即服務器端的代碼。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>intelligentler</display-name>

  <servlet>
  <servlet-name>downloadservlet</servlet-name><!--兩個name名字應該一樣-->
  <servlet-class>com.zhoum.intelligentler.servlet.DownloadServlet</servlet-class>

  <!--class中寫的是DownloadServlet的絕對路徑-->

  </servlet>


  <servlet-mapping>
  <servlet-name>downloadservlet</servlet-name>
  <url-pattern>/servlet/download</url-pattern><!--通過這個url來訪問服務器端代碼-->

  </servlet-mapping>
 
</web-app>

第三步:啓動tomcat服務器,輸入網址:http://localhost:8080/intelligentler/servlet/download


從以上的demo可以看出,用戶通過輸入url(url-pattern)來定位到對應的servlet-name,然後再從servlet-name對應到servlet-name的絕對路徑servlet-class,來執行服務器段代碼DownloadServlet.


一、有兩種應用程序

1、桌面應用程序:需要下載,安裝,更新等。如QQ,office等

2、web應用程序:就是我們開發的web項目,這不需要用戶下載,只需要用戶客戶端聯網,訪問相應的互聯網資源。

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img9.ph.126.net/dC1MBIh0onBBIVqS-uiIhg==/6597816335051501009.jpg" />

二、Http協議

HTTP是一個屬於應用層的面向對象的超文本傳輸協議,基於TCP/IP協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統。HTTP特點:

    (1)無連接:分爲4個階段:建立連接、發送請求、等待響應、關閉連接

       優點:快速、簡單、不佔用網絡服務器資源

       缺點:速度由網絡來決定,每次傳輸數據量不能太大

    (2)無狀態:HTTP 協議只負責傳輸數據,不負責保管所傳遞的數據

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:auto;float:none;height:auto;" src="http://img4.ph.126.net/Gw0SZ9cbJdHgqdWaPUYCng==/6597340246518050054.jpg" />

Http訪問服務器資源的方式

1、URL:(Uniform/Universal Resource Locator)統一資源定位符,請求的是服務器上的資源。資源是一個抽象的概念,指存放在服務器上的能夠被客戶端訪問到的所有類型的文件(比如:文本、圖片、音頻、視頻等)。

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img9.ph.126.net/D8wx0Wq2y6Jz8EBfm4W6rQ==/6597197310006448239.jpg" />

2、表單提交

get和post方法的區別

⑴get方法通過URL傳遞參數,用戶在客戶端地址欄可見,如果是傳遞密碼的話,不安全;post方法通過請求的body傳遞參數,用戶在客戶端不可見,更安全。

⑵get方法通過地址欄URL傳遞請求,而URL本身有長度限制,一般不超過255個字符;post方法通過請求body傳遞參數,沒有長度限制。

三、Servlet

1、Servlet概念:

首先Servlet是一個java應用程序----->服務器端的java應用程序----->具有獨立於平臺和協議的特性----->可生成動態的Web頁面。

Servlet擔當客戶請求(Web瀏覽器或其他HTTP客戶程序)與服務器響應(HTTP服務器上的數據庫或應用程序)的中間層。客戶請求<----->Servlet<------>服務器響應

2、Servlet生命週期

        指Servlet對象在服務器內存中從創建到調用,到銷燬的整個過程。

  (1)實例化:當客戶端通過URL請求的時候,web容器根據web.xml配置自動調用該Servlet的構造方法,實例化對象。  

  (2)初始化:通過該servlet對象調用init()方法,讀取web.xml中該servlet的配置信息,爲service方法提供相關數據。  

  (3)服務:通過該對象調用service()方法,如果是繼承HttpServlet,則根據請求頭信息中的請求方法,調用對應的doGet()/doPost()   

  (4)銷燬:不是在service()方法調用完後,立即調用,而是由JVM來決定。當JVM需要銷燬一些對象、釋放內存空間的時候,纔會去調用該實例的destroy()方法。

3、HttpServletRequest(interface)

公共接口類HttpServletRequest繼承自ServletRequest.客戶端瀏覽器發出的請求被封裝成爲一個HttpServletRequest對象。所有的信息包括請求的地址,請求的參數,提交的數據,上傳的文件客戶端的ip甚至客戶端操作系統都包含在其內。

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;float:none;" src="http://img7.ph.126.net/6pYoYYKTOiu9xpsNQzf_CA==/6597354540169215617.jpg" />


650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img8.ph.126.net/-8-xgg0UoL53J0-onDGJeA==/6597369933332003888.jpg" />


650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img6.ph.126.net/s25rFIMfcegxZNhLRyKG_Q==/6597185215378542076.jpg" />

4、HttpServletResponse(interface)

代表服務器向瀏覽器返回的響應直接輸出內容到瀏覽器,使用Servlet輸出HTML頁面   

       PrintWriter out = response.getWriter();

       out.print("Hello :");

    設置響應的內容類型:

       response.setContentType("text/html; charset=UTF-8");

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img4.ph.126.net/a2tgDHQuPlF9BRicLLFrxg==/6597528263005024774.jpg" />


650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img3.ph.126.net/ZomIbvPJtYuj9OVpaLi26A==/6597828429679406893.jpg" />


650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img2.ph.126.net/Lt8y0-MY3NYYW1m00heupA==/6597737170214300602.jpg" />


650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img2.ph.126.net/_1jLIt64raDCw5st8G2KfQ==/6597566745911994882.jpg" />


注意:使用response對象跳轉,可以跳到項目外的一個URL資源上

如:response.sendRedirect(“http://www.baidu.com”);

    使用request對象跳轉,只能在本項目資源中跳轉

如:request.getRequestDispatcher(“url”).forward(request,response);

告訴瀏覽器不要緩存頁面:

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img0.ph.126.net/4xjRueitAwu2BuyPkZK_Og==/6597854817958473570.jpg" />

 

頁面刷新:單位是秒

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img5.ph.126.net/ni5wMGULHTyT0Ow9YVrHJA==/6597369933332003945.jpg" />

5、javax.servlet.RequestDispatcher(interface)

對請求響應進行補充的一個接口,主要負責兩個功能

RequestDispatcher disp = request.getRequestDispatcher("login_ok.jsp");

    (1)跳轉

         disp.forward(ServletRequest,ServletResponse);

    (2)包含

         disp.include(ServletRequest,ServletResponse);

    程序中一般連寫:

    request.getRequestDispatcher("login_ok.jsp").forward(request,response);

6、HttpSession(interface)

是在服務器端保存數據最常見的方式

  

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img0.ph.126.net/ZTHei7LKAUEs06fGP8vAvQ==/6598191268516398740.jpg" />

 

Session:會話,(進行某活動連續的)一段時間,使用該對象可以完成一定的操作。會話信息的範圍僅限於當前Web應用程序(
ServletContext
),因此存儲在一個上下文中的信息在另一個上下文中不是直接可見的。

   Ⅰ.Hibernate中Session和Servlet中HttpSession的區別

   Hibernate中Session對象:主要作用是數據庫連接、數據庫操作

   Servlet中HttpSession對象:

   (1)幫助服務器,識別不同的瀏覽器

   (2)幫助服務器傳遞數據到不同的Servlet或JSP頁面

   (3)能夠人工控制連續的時間段的長短。

    Ⅱ.HttpSession 對象的常用方法:

   

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img7.ph.126.net/dUtcp8tKyFNeWDfqL2rMGg==/6597819633586384377.jpg" />

 

    (1)創建

    HttpSession session = request.getSession(true);

    要求服務器端重新創建一個session對象

    HttpSession session = request.getSession(false);

    不需要服務器端新建session對象,只需要從已有的session中取一個

    HttpSession session = request.getSession();

    沒有要求,由服務器自動分配

    (2)識別瀏覽器

    //隨機生成一個不重複的id,隨着響應發送給瀏覽器,綁定在瀏覽器中,每次瀏覽器請求,都會把該id返回並與服務器端的id對比

    String id = session.getId();

    (3)傳遞數據

    //把數據存入session中

    session.setAttribute("name",object);

    //在其他Servlet或jsp頁面中取出數據

    Object obj = session.getAttribute("name");

    一般情況下,需要先判斷是否爲空,再取值

    (4)設置有效時間

    一個session對象默認有30分鐘的有效時間

    //設置單個session對象的最長有效時間

    session.setMaxInactiveInterval(60*60*24秒);

    //設置整個工程中所有session的有效時間

    <session-config>

        <session-timeout>20000</session-timeout>

    </session-config>

    (5)清除數據

    session.removeAttribute("name");

    (6)設置Session失效或鈍化

    session.invalidate();

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img5.ph.126.net/ZgGuSFE4GoLlPxj9dgt6FQ==/6598223154353603495.jpg" />

 

    例如:

    Session類似儲物櫃,最主要作用就是存取數據

    寢室的儲物櫃:

    (1)一人一個

    (2)能夠存取東西

    (3)一般的一個櫃子一把鑰匙

    (4)特殊情況,可以給櫃子貼封條

    (5)有時候櫃子可能兩個人或N個人共用

7、ServletContext(interface)

   ⑴ServletContext的定義

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img2.ph.126.net/51LG31RjQArctbfZwFOEKg==/6597695388772445242.jpg" />

 

⑵ServletContext對象能夠訪問web項目的初始化參數、存儲在ServletContext中的對象、web項目中的資源文件、日誌;ServletContext就是Servlet容器,提供的方法可以在同一個web應用下的所有Servlet中使用。

8、ServletConfig(interface)

650) this.width=650;" alt="Servlet學習筆記 - 廖潤明 - 異次元藍客" style="margin:0px 10px;width:500px;float:none;height:auto;" src="http://img3.ph.126.net/8BuvcahaVja-B4Mnc7IYIA==/6597958172051485313.jpg" />

本文出自 “程序猿的修煉” 博客,請務必保留此出處http://zhoum1118.blog.51cto.com/10054110/1639322

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章