程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JSP學習筆記(5)-Java Servlet,學習筆記-java

JSP學習筆記(5)-Java Servlet,學習筆記-java

編輯:JAVA綜合教程

JSP學習筆記(5)-Java Servlet,學習筆記-java


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);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved