Servlet學習筆記

一、Servlet簡介

Servlet運行在服務器端的Java小程序,是sun公司提供的一套規範,用來處理客戶端請求、響應給瀏覽器的動態資源。但Servlet的實質就是Java代碼,通過Java的API動態的向客戶端輸出內容。

Servlet規範:包含三個技術點:

1)Servlet技術

2)filter技術--過濾器

3)listener技術--監聽器

                                                                           Java web請求-響應過程

                  

二、Servlet的API(生命週期)

(1) Servlet接口中的方法

        1)init(ServletConfig config) 

          執行時機:servlet對象創建的時候的執行

        2)service(ServletRequest req, ServletResponse res)

         執行時機:每次有http請求 的時候的執行

        3)destroy() 

        執行時機:Servlet對象銷燬的時候執行

(2)

(3)Servlet的生命週期

        1)Servlet何時創建

         默認第一次訪問Servlet時創建

        2)Servlet何時銷燬

          服務器關閉servlet就銷燬

       3)每次訪問時必須執行的方法

          service(ServletRequest req, ServletResponse res)

                                                                                           整個servlet的訪問過程

                                                                 一次http請求的詳細過程圖解

 

三、Servlet的配置

(1)基本配置

    <servlet>
		<servlet-name>quickStartServlet</servlet-name>
		<servlet-class>com.alibaba.servlet.QuickStartServlet</servlet-class>
		<init-param>
			<param-name>url</param-name>
			<param-value>www.baidu.com</param-value>
		</init-param>
	</servlet>

	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>quickStartServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

 

其中,url-pattern的配置方式

完全匹配      訪問的資源與配置的資源完全相同纔可以訪問到

<url-pattern>/quickStartServlet</url-pattern>

目錄匹配      格式:/虛擬的目錄.../*    *代表的任意

<url-pattern>/aaa/bbb/ccc/*</url-pattern>

擴展名匹配   格式:*.擴展名

<url-pattern>*.action</url-pattern>

四、ServletContext對象

            1)ServletContext對象簡介

【簡介】

ServletContext即Servlet上下文對象,該對象表示當前的web應用環境信息,一個Web應用只會創建一個ServletContext對象。

Web容器啓動的時候,它會爲每個Web應用程序都創建一個對應的ServletContext對象,它代表當前的web應用。

[注意]

由於一個Web應用中的所有Servlet共享一個ServletContext對象,所以多個Servlet通過ServletContext對象實現數據共享,

ServletContext對象通常稱爲Context對象。

【ServletContext創建時機】

ServletContext對象是在TomCat服務器加載完當前Web應用後創建出來的。

ServletContext對象是作爲ServletConfig對象成員變量傳入Servlet中。

通過ServletConfig的getServletContext()方法就可以得到ServletContext對象。

看下ServletConfig中相關的ServletContext代碼:

class ServletConfig{      //ServletConfig對象中維護了ServletContext對象的應用
    ServletContext context;
    getInitParameter();
    getInitParameterNames();
    public ServletContext getServletContext(){     //返回一個ServletContext對象
      return contex;
    }
} 

在Servet中的init的方法實例化一個ServletConfig

@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
}

 

[ 注意 ]

this.ServletConfig.getServletContext():通過ServletConfig對象來獲取ServletContext對象。

ServletContext對象:啓動時創建

ServletConfig對象:調用init方法之前創建的,在ServletContext對象之前。

 

【在Servlet中得到ServletContext的兩種方式】

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 得到ServletContext的方式一
		ServletContext context1 = this.getServletConfig().getServletContext();
		// 得到ServletContext的方式二
		ServletContext context2 = this.getServletContext();
}

 

【ServletContext的5大作用】

1.獲取web的上下文路徑

String getContextPath();

 

2.獲取全局的參數 

配置全局初始化參數

<!-- 配置全局初始化參數 -->
<context-param>
  <param-name>driver</param-name>
  <param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
 String getInitParameter(String name);

 Enumeration getInitParameterNames();

3.和域對象相關的  

ServletContext域對象的作用範圍:整個web應用(所有的web資源都可以隨意向servletContext域中存取數據,數據是可以共享)

void setAttribute(String name,Onject object);

Object getAttribute(String name);

void removeAttribute(String name);

  域對象(域對象就是在不同資源之前來共享數據,保存數據,獲取數據)

  ServletContext是我們學習的第一個域對象(Servlet共有三個域對象ServletContext、HttpServletRequest、HttpSession)

4. 請求轉發的

  RequestDispatcher getRequestDispatcher(String path);

  在Servlet跳轉頁面:

  4.1請求重定向(你找我借錢,我沒有,你自己去找他借錢)

    1.地址欄會改變,變成重定向到的地址

    2.可以跳轉到項目內的資源,也可以跳轉項目外的資源

    3.瀏覽器向服務器發出兩次請求,那麼不能使用請求來作爲域對象來共享數據。

  4.2請求轉發(你找我借錢,我沒有,我幫你去向他借錢)

    1.地址欄不會改變

    2.只能跳轉到項目內的資源,不能跳轉項目外的資源。

    3.瀏覽器向服務器發出一次請求,那麼可以使用請求作爲域對象共享數據。

5.讀取web項目的資源文件

  String getRealPath(String path);

  InputStream getResourceAsStream(String path);

  URL getResource(String path);

 

【利用ServletContext對象來收發數據(Servlet3.0新特性)】

利用ServletContext實現SendServlet和ReceiveServlet之間的數據共享

四、Servlet實戰案例

主要業務邏輯:就是在Servlet中,首先從request中接受前臺頁面的請求數據,然後,訪問數據庫,將請求數據和數據庫中的數據進行對比,如果數據庫中存在該用戶,則返回成功登陸頁面,否則,返回錯誤提示信息

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