JSP學習筆記(5)-Java Servlet

来源:http://www.cnblogs.com/pinnsvin/archive/2016/05/27/5536104.html
-Advertisement-
Play Games

1.什麼是Servlet? Servlet(Servlet Applet),全程Java Servlet,是用Java編寫的伺服器端程式,其主要功能在於互動式地瀏覽和修改數據,生成動態WEB內容。俠義的servlet是指Java語言實現的一個介面,廣義的servlet是指任何實現了這個servlet ...


1.什麼是Servlet?

Servlet(Servlet Applet),全程Java Servlet,是用Java編寫的伺服器端程式,其主要功能在於互動式地瀏覽和修改數據,生成動態WEB內容。俠義的servlet是指Java語言實現的一個介面,廣義的servlet是指任何實現了這個servlet介面的類,一般情況先,人們將servlet理解為後者。

Servlet可以被認為是伺服器端的applet。servlet被web伺服器載入和執行,就如同applet被瀏覽器載入執行一樣,servlet從客戶端(通過web伺服器)接受請求,執行某種作業,然後返回結果。

2.部署Servlet

2.1.servlet類

創建一個servlet就是編寫一個特殊類的子類,這個特殊類就是javax.servlet.http包中的HttpServlet類,HttpServlet類實現了Servlet介面,實現了響應客戶的方法。HttpServlet的子類習慣被稱為一個servlet類,這樣的類床架的對象習慣上稱為一個servlet。

JDK的目錄中沒有javax.servlet.http包,要將tomcat安裝目錄lib子目錄中的servlet-api.jar文件複製到tomcat所使用JDK的拓展目錄下,jdk*/jre/lib/ext中。

2.2.保存位元組碼文件

想要使用servlet,必須要先編譯,那麼tomcat如何訪問到這個位元組碼文件呢?就如同之前訪問javabean一樣,我們需要在項目目錄下的WEB-INF/classes下建立相應的包去存儲servlet的位元組碼文件。

2.3.編寫部署文件web.xml

Servlet類的位元組碼文件保存到指定的目錄後,必須為Tomcat伺服器編寫一個部署文件,只有這樣Tomcat才會按照用戶的請求使用servlet位元組碼文件創建對象。編寫的web.xml文件應該存儲在項目目錄下WEB-INF目錄下。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- xml聲明以<? xml開始,以?>結束,encoding屬性用於指定編碼方式,
如果準備用ASCII字元,該屬性可以是iso-8859-1,
如果該屬性值為utf-8,那麼標記及標記內容除了可以使用ASCII字元外,
還可以使用漢字,日文中的平假名、片假名等-->
<web-app>
<!-- xml文件必須有一個根標記,這個就是根標記-->
       <servlet>
<!-- 可有若幹個servlet標記,標記內容由tomcat伺服器處理-->
           <servlet-name>hello</servlet-name>
<!-- 指定tomcat伺服器創建的servlet的名字-->
           <servlet-class>myservlet.test.test_servlet</servlet-class>
<!-- 指定tomcat伺服器用哪個servlet類來創建-->
       </servlet>

       <servlet-mapping>
<!-- tomcat伺服器創建的servlet的名字,必須與上邊servlet-name的值一致-->
           <servlet-name>hello</servlet-name>
<!---->
           <url-pattern>/lookHello</url-pattern>
<!-- 指定請求servlet的url格式-->
       </servlet-mapping>
</web-app>

web服務目錄的WEB-INF子目錄下的web.xml文件負責管理該web服務目錄下的全部servlet,當web伺服器提供更多的servlet時,只需要在web.xml文件中添加<servlet>和<servlet-mapping>標記即可。web.xml編寫正確才能啟動tomcat服務。

Servlet類可以使用getServletName()方法返回配置文件中<servlet-name>標記給出的servlet的名字。

2.4.向servlet傳遞參數的值

在請求servlet時,可以在請求的<url-pattern>中額外的加入參數及其值,格式:

servlet名?參數1=值1&參數2=值…..參數n=值

被請求的servlet可以通過request對象獲取參數的值:

request.getParameter(參數n)

4.servlet的工作原理

4.1.servlet對象的生命周期

一個servlet的生命周期主要有以下3個過程組成:

(1)初始化servlet,servlet第一次被請求載入時,伺服器要創建一個servlet,這個servlet必須調用init方法完成必要的初始化工作,並且只調用一次。

(2)再調用service方法響應用戶的請求

(3)當伺服器關閉時,調用destroy方法銷毀servlet

4.2.init方法

該方法是HttpServlet類中的方法,可以在子類中重寫這個方法。init方法的聲明格式:

    public void init(ServletConfig config) throws ServletException

該方法在執行的時候,伺服器會把一個ServletConfig對象傳遞給init方法,這個對象就被保存到servlet中,直到servlet被銷毀,這個ServletConfig對象負責向servlet傳遞伺服器設置信息,如果傳遞失敗就會發生ServletException,servlet不能正常工作。

4.3.service方法

該方法是HttpServlet類中的方法,可以在子類中直接繼承或重寫該方法。該方法的聲明格式:

   public void service(HttpServletRequest request HttpServletResponse reponse) throw ServletException,IOException

當servlet成功創建和初始化之後,調用service方法來處理用戶的請求並返迴響應,伺服器將兩個參數傳遞個該方法。一個是HttpServletRequeset類型的對象,該對象用來響應用戶的請求信息;一個是HttpServletResponse類型的對象,該對象用來響應用戶的請求。

service方法的功能是檢查HTTP請求類型(get、post等),併在service方法中根據用戶的請求方式,在service方法中對應的調用doGet或doPost方法。

service方法可以被多次調用,只要有用戶請求servlet時,就會調用執行service方法,調用過程運行在不同的線程中,互不幹擾。

4.4.destroy方法

該方法是HttpServlet類中的方法,子類可以直接繼承這個方法,一般不需要重寫。聲明格式:

    public destroy()

當伺服器終止時,比如關閉伺服器,destroy()方法才會被執行,銷毀servlet。

5.通過JSP頁面訪問Servlet

5.1.通過表單向servlet提交數據

Web服務目錄下的JSP頁面都可以通過表單請求該Web服務目錄下的某個servlet。如果web.xml文件中的<servlet-mapping>標記的子標記<url-pattern>指定的請求servlet格式為”/hello”,那麼action給出的值就是”hello”.

<form action="hello">
</form>

另外一種就是在servlet中額外加入參數及其值

<form action="hello?h=10&e=11&l=2">
</form>

通過JSP頁面訪問servlet的好處就是,JSP頁面可以負責頁面的信息顯示,信息相關的處理交給servlet去完成。

5.2.通過超鏈接訪問servlet

和表單處理一樣,如果<url-pattern>指定為“/hello”,那麼<a>中的href值是“hello”。

<a href="hello">hello</a>

6.doGet和doPost方法

HttpServlet提供了doGet和doPost方法用來處理用戶的請求並做出相應。

可以在Servlet中重寫doGet或doPost方法來響應用戶的請求,這樣可以增加響應的靈活性並降低伺服器的負擔。doGet和doPost的處理過程完全相同,可以只在doPost方法中編寫處理過程,在doGet方法中調用doPost方法即可,反之亦可。

如果根據請求類型進行不同的處理,就要在兩個方法中編寫不同的處理過程。

7.重定向與轉發

重定向的功能:將用戶從當前頁面或servlet定向到另一個JSP頁面或servlet。

轉發的功能:將用戶對當前JSP頁面或servlet的請求轉發給另外一個JSP頁面或servlet。

7.1.重定向sendRedirect方法

該方法是HttpServletResponse類中的方法。當用戶請求一個servlet時,該servlet在處理數據後,可以使用重定向方法將用戶從當前頁面或servlet重定向到一個JSP頁面或servlet,但不能將用戶對當前頁面或servlet的請求轉發給所定向的資源。

重定向的目標頁面或servlet無法使用request獲取用戶提交的數據。

7.2.轉發對象RequestDispatcher

該對象可以把用戶對當前JSP頁面或servlet的請求轉發給另一個JSP頁面或servlet,而且將用戶對當前頁面或servlet的請求和響應傳遞給目標頁面或servlet。

轉發的目標頁面或servlet可以使用request獲取用戶提交的數據。

轉發步驟:

(1)得到RequestDispatcher對象。用戶請求的當前頁面或servlet可以讓HttpServletRequest對象request調用public RequestDispatcher getRequestDispatcher(String path)方法返回一個RequestDispatcher對象,其中參數path是要轉發的目標頁面或servlet。例如:

        RequestDispatcher dis=request.getRequestDispatcher(“a.jsp”);

(2)轉發。在(1)中獲取的RequestDispatcher對象調用void forward(ServletRequest request,ServletResponse reponse)throw ServletException.java.io.IOException方法將用戶對當前頁面或servlet的請求轉發個RequestDispatcher對象指定的頁面或servlet。例如:

        dis.forward(request,response);

和重定向方法不同的是,用戶在瀏覽器地址欄看不到目標頁面或servlet地址,只能看到目標頁面或servlet的運行效果,瀏覽器地址欄中依然是當前頁面或servlet地址,刷新頁面將請求當前頁面或servlet。

8.使用session

HttpServletRequest對象request調用getSession方法獲取用戶的session對象:

    HttpSession se=request.getSession(true);


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本來說完字元串、數字、布爾值之後,應該要繼續講元祖、列表之類的。但是元祖和列表都屬於序列,所以有必要先講講python的序列是什麼。 首先,序列是是Python中最基本的數據結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。每個索引對應一個元素。 ...
  • Python執行某一類的時候,相當於執行__init__ 方法 例如:list() list __init__ set 是一個無序且不重覆的元素集合,可看做數學中的集合 用法: 1.創建集合 s = set() 創建空集合 s = set([11,22,33]) s = set('asdfghh') ...
  • 現階段php如果要操作mysql資料庫 php給我們提供了3套庫 1、mysql擴展庫 面向過程操作 2、mysqli擴展庫 面向對象操作和麵向過程操作並存 安全性和效率高於mysql擴展庫 3、PDO擴展庫 面向對象操作 今天這篇博文主要要談談mysql擴展庫和mysqli擴展庫 主要是記錄了著2 ...
  • ha_proxy配置文件修改程式ha_file 為存儲配置信息的文件。運行的時候對該文件進行操作。1.查詢信息:用戶輸入功能變數名稱,獲得功能變數名稱相關信息2.修改配置文件:用戶輸入的格式應該為 {"backend": "test.oldboy.org","record":{"server": "100.1.7. ...
  • 這是一個表單的時代。。。 我們在瀏覽器中編輯自己的信息,會遇到上傳頭像;在文庫中,我們會上傳文檔......到處存在“上傳”這個詞。 php是最好的語言(其他語言的程式猿們不要打我...)。php在處理交互方面有天然的優勢,自然有強大的函數來處理上傳文件。 和提交一般的數據一樣,上傳文件也需要表單。 ...
  • java為我們提供了一個集合的工具類,方便我們對集合進行操作,裡面的方法都是靜態方法。 Collections.sort()方法,參數:List<T>集合對象,這個對象帶著泛型,是為了保證集合中的元素具備可比較性,因此這個返回值的泛型就會特殊點, <T extends Comparable <? s ...
  • 選自Mr.kuang http://www.cnblogs.com/kuangbin/archive/2012/08/14/2638803.html /* * pku3461(Oulipo), hdu1711(Number Sequence) * 這個模板 字元串是從0開始的 * Next數組是從1... ...
  • 布爾類型其實可以算是一種特殊的數字,下麵是 help() 函數得到的幫助信息: Help on class bool in module __builtin__: class bool(int) | bool(x) -> bool | | Returns True when the argument ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...