1. 程式人生 > >JavaEE基礎(02):Servlet核心API用法詳解

JavaEE基礎(02):Servlet核心API用法詳解

本文原始碼:GitHub·點這裡 || GitEE·點這裡

一、核心API簡介

1、Servlet執行流程

Servlet是JavaWeb的三大元件之一(Servlet、Filter、Listener),它屬於動態資源。Servlet的作用是處理請求,伺服器會把接收到的請求交給Servlet來處理,在Servlet中通常需要:接收請求資料;處理請求;完成響應。

2、核心API簡介

API 作用描述
ServletConfig 獲取servlet初始化引數和servletContext物件。
ServletContext 在整個Web應用的動態資源之間共享資料。
ServletRequest 封裝Http請求資訊,在請求時建立。
ServletResponse 封裝Http響應資訊,在請求時建立。

二、ServletConfig介面

1、介面簡介

容器在初始化servlet時,為該servlet建立一個servletConfig物件,並將這個物件通過init()方法來傳遞並儲存在此Servlet物件中。核心作用:1.獲取初始化資訊;2.獲取ServletContext物件。

2、程式碼案例

  • 配置檔案
<servlet>
    <init-param>
        <param-name>my-name</param-name>
        <param-value>cicada</param-value>
    </init-param>
    <servlet-name>servletOneImpl</servlet-name>
    <servlet-class>com.node02.servlet.impl.ServletOneImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletOneImpl</servlet-name>
    <url-pattern>/servletOneImpl</url-pattern>
</servlet-mapping>
  • API用法
public class ServletOneImpl implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        String servletName = servletConfig.getServletName() ;
        System.out.println("servletName="+servletName);
        String myName = servletConfig.getInitParameter("my-name") ;
        System.out.println("myName="+myName);
        Enumeration paramNames = servletConfig.getInitParameterNames() ;
        while (paramNames.hasMoreElements()){
            String paramKey = String.valueOf(paramNames.nextElement()) ;
            String paramValue = servletConfig.getInitParameter(paramKey) ;
            System.out.println("paramKey="+paramKey+";paramValue="+paramValue);
        }
        ServletContext servletContext = servletConfig.getServletContext() ;
        servletContext.setAttribute("cicada","smile");
    }
}

三、ServletContext介面

1、介面簡介

一個專案只有一個ServletContext物件,可以在多個Servlet中來獲取這個物件,使用它可以給多個Servlet傳遞資料,該物件在Tomcat啟動時就建立,在Tomcat關閉時才會銷燬!作用是在整個Web應用的動態資源之間共享資料。

  • 獲取方式
1、ServletConfig#getServletContext();
2、GenericServlet#getServletContext();
3、HttpSession#getServletContext()
4、ServletContextEvent#getServletContext()

2、四大域物件

ServletContext是JavaWeb四大域物件之一:

1、PageContext;
2、ServletRequest;
3、HttpSession;
4、ServletContext;

所有域物件都有存取資料的功能,因為域物件內部有一個Map,用來儲存資料。

3、程式碼案例

  • 配置檔案
<context-param>
    <param-name>my-blog</param-name>
    <param-value>2019-11-19</param-value>
</context-param>
<servlet>
    <servlet-name>servletTwoImpl</servlet-name>
    <servlet-class>com.node02.servlet.impl.ServletTwoImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletTwoImpl</servlet-name>
    <url-pattern>/servletTwoImpl</url-pattern>
</servlet-mapping>
  • API用法
public class ServletTwoImpl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        // 1、引數傳遞
        ServletContext servletContext = this.getServletContext() ;
        String value = String.valueOf(servletContext.getAttribute("cicada")) ;
        System.out.println("value="+value);
        // 2、獲取初始化引數
        String myBlog = servletContext.getInitParameter("my-blog") ;
        System.out.println("myBlog="+myBlog);
        // 3、獲取應用資訊
        String servletContextName = servletContext.getServletContextName() ;
        System.out.println("servletContextName="+servletContextName);
        // 4、獲取路徑
        String pathOne = servletContext.getRealPath("/") ;
        String pathTwo = servletContext.getRealPath("/WEB-INF/") ;
        System.out.println("pathOne="+pathOne+";pathTwo="+pathTwo);
        response.getWriter().print("執行:doGet; value:"+value);
    }
}

四、ServletRequest介面

1、介面簡介

HttpServletRequest介面繼承ServletRequest介面,用於封裝請求資訊,該物件在使用者每次請求servlet時建立並傳入servlet的service()方法,在該方法中,傳入的servletRequest將會被強制轉化為HttpservletRequest物件來進行HTTP請求資訊的處理。核心作用:1.獲取請求報文資訊;2.獲取網路連線資訊;3.獲取請求域屬性資訊。

2、程式碼案例

  • 配置檔案
<servlet>
    <servlet-name>servletThreeImpl</servlet-name>
    <servlet-class>com.node02.servlet.impl.ServletThreeImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletThreeImpl</servlet-name>
    <url-pattern>/servletThreeImpl</url-pattern>
</servlet-mapping>
  • API用法
public class ServletThreeImpl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // http://localhost:6003/servletThreeImpl?myName=cicada
        String method = request.getMethod();
        System.out.println("method="+method); // GET
        String requestURL = request.getRequestURL().toString();
        // http://localhost:6003/servletThreeImpl
        System.out.println("requestURL="+requestURL);
        String requestURI = request.getRequestURI();
        System.out.println("requestURI="+requestURI); // /servletThreeImpl
        String queryString = request.getQueryString() ;
        System.out.println("queryString="+queryString); // myName=cicada
        String myName = request.getParameter("myName");
        System.out.println("myName="+myName); // cicada
    }
}

五、ServletResponse介面

1、介面簡介

HttpServletResponse繼承自ServletResponse,封裝了Http響應資訊。客戶端每個請求,伺服器都會建立一個response物件,並傳入給Servlet.service()方法。核心作用:1.設定響應頭資訊;2.傳送狀態碼;3.設定響應正文;4.重定向;

2、程式碼案例

  • 配置檔案
<servlet>
    <servlet-name>servletFourImpl</servlet-name>
    <servlet-class>com.node02.servlet.impl.ServletFourImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletFourImpl</servlet-name>
    <url-pattern>/servletFourImpl</url-pattern>
</servlet-mapping>
  • API用法
public class ServletFourImpl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8") ;
        response.setCharacterEncoding("UTF-8");
        response.setStatus(200) ;
        response.getWriter().print("Hello,知了");
    }
}

3、轉發和重定向

  • 轉發

伺服器端進行的頁面跳轉的控制 ;

request.getRequestDispatcher("/轉發地址").forward(request, response);
  • 重定向

服務端響應跳轉資訊,瀏覽器端進行的頁面跳轉 ;

response.sendRedirect("重定向地址");
  • 轉發和重定向對比
區別 轉發 重定向
位址列 不變 變化
跳轉 服務端跳轉 瀏覽器端跳轉
請求次數 一次 兩次
域中資料 不會丟失 丟失

六、原始碼地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

相關推薦

JavaEE基礎(02)Servlet核心API用法

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、核心API簡介 1、Servlet執行流程 Servlet是JavaWeb的三大元件之一(Servlet、Filter、Listener),它屬於動態資源。Servlet的作用是處理請求,伺服器會把接收到的請求交給Servlet來處理,在Se

JavaEE基礎(01)Servlet實現方式,生命週期執行過程

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、Servlet簡介 Java編寫的伺服器端程式,具有獨立於平臺和協議的特性,主要功能在於互動式地瀏覽和生成資料,生成動態Web內容。使用Servlet,可以收集來自網頁表單的使用者輸入,呈現來自資料庫或者其他源的記錄,還可以動態建立網頁。 二

JavaEE基礎(06)Servlet整合C3P0資料庫連線池

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、C3P0連線池 1、C3P0簡介 C3P0是一個開源的JDBC連線池,應用程式根據C3P0配置來初始化資料庫連線,可以自動回收空閒連線的功能。 2、核心依賴 <dependency> <groupId>mysq

Qt 調色盤QPalette類用法(附例項、原始碼)

在實際的應用中,經常需要對某個控制元件的顏色外觀,如背景、前景色等,進行設定。Qt中提供的調色盤QPalette類就是專門用於管理控制元件的外觀顯示。QPalette類相當於對話方塊或控制元件的調色盤,管理著控制元件和窗體的所有顏色。每個窗體和控制元件都包含一個QPale

Java基礎Java中Volatile關鍵字

一、基本概念 先補充一下概念:Java 記憶體模型中的可見性、原子性和有序性。 可見性: 可見性是一種複雜的屬性,因為可見性中的錯誤總是會違揹我們的直覺。通常,我們無法確保執行讀操作的執行緒能適時地看到其他執行緒寫入的值,有時甚至是根本不可能的事情。為了確保多個

中介軟體ElasticSearch元件RestHighLevelClient用法

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/data-manage-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/data-manage-parent) # 一、基礎API簡介 ## 1、

Linux基礎02磁碟操作,檔案許可權、檔案及資料夾操作、網路服務

1.Linux磁碟與U盤操作 1.1 顯示系統的磁碟空間用量 ##du命令也是檢視使用空間的,但是與df命令不同的是Linux du命令是對檔案和目錄磁碟使用的空間的檢視 du -sh ##查目錄使用大小(-s表示總結) ## du -sh /bin ##df命令用於顯示磁碟分割槽

Java基礎(4)Java常見API

文章目錄 1 API 2 Object類 3 與使用者互動 3.1 執行Java程式的引數 3.2 Scanner類 4 系統相關 4.1 System類 4.2 Runtime類

C#基礎系列多執行緒的常見用法

前言:此篇就主要從博主使用過的幾種多執行緒的用法從應用層面大概介紹下。文中觀點都是博主個人的理解,如果有不對的地方望大家指正~~ 1、多執行緒:使用多個處理控制代碼同時對多個任務進行控制處理的一種技術。據博主的理解,多執行緒就是該應用的主執行緒任命其他多個執行緒去協

Servlet系列(三)----Servlet核心API

Servlet介面 Servlet的執行需要Servlet容器的支援Servlet容器通過呼叫Servlet物件提供了標準的API介面,對請求進行處理.在Servlet開發中,任何介面都要直接或間接實現javax.servlet.Servlet介面,該介面是Servlet

django基礎-02虛擬環境

包安裝 port list work export 生效 cti get vat 1. 虛擬環境 4.1 概念 之前安裝python包的命令: sudo pip3 install 包名 包的安裝路徑:/usr/local/lib/python3.5/dist-packa

Spring 框架基礎(02)Bean的生命週期,作用域,裝配總結

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、裝配方式 Bean的概念:Spring框架管理的應用程式中,由

Spring Boot 2.x基礎教程構建RESTful API與單元測試

首先,回顧並詳細說明一下在快速入門中使用的@Controller、@RestController、@RequestMapping註

JavaEE基礎(03)Http請求,握手揮手流程簡介

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、Http協議簡介 1、概念說明 HTTP超文字傳輸協議,是用於從全球資訊網伺服器傳輸超文字到本地瀏覽器的傳送協議,基於TCP/IP通訊協議來傳遞資料:HTML檔案、圖片、查詢資料等。HTTP協議基於客戶端-服務端架構模式。瀏覽器作為HTTP客

JavaEE基礎(04)會話跟蹤技術,Session和Cookie

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、會話跟蹤 1、場景描述 比如登入某個購物網站,身份識別成功後,在網站下單,支付 等操作,這些操作中當前登入使用者資訊必須是共享的,這樣這些操作結果才能和登入使用者做關聯。 2、概念簡介 可以把會話理解為客戶端與伺服器之間的一次互動,在一次互動

JavaWeb基礎總結Servlet專題

最近工作中有部分整改老介面的任務,大部分與Spring的攔截器,Tomcat相關,改到一些底層的程式碼發現,對基礎J2EE的知識有些遺忘,需要頻繁查閱,索性從頭系統的整理一下Servlet和Filter的知識。 Servlet是什麼 Servlet(Server Applet)是 Java Servlet 的

dva.js 用法列表展示

def bpa clas 開發 cal switch lan 點擊 code 本教程案例github:https://github.com/axel10/dva_demo-Counter-and-list/tree/master 這次主要通過在線獲取用戶數據並且渲染成列

Django基礎(10): URL重定向的HttpResponseDirect, redirect和reverse的用法

detail djang 包含 war sed 模型 博客 nbsp rep 利用django開發web應用, 我們經常需要進行URL重定向,有時候還需要給URL傳遞額外的參數。比如用戶添加文章完成後需要轉到文章列表或某篇文章詳情。因此熟練掌握HttpResponseDir

JAVA常用集合框架用法基礎篇一之Colletion介面

首先,在學習集合之前我們能夠使用的可以儲存多個元素的容器就是陣列。 下面舉幾個例子主要是引出集合類的: 1、8,4,5,6,7,55,7,8  像這樣的型別相同的可以使用陣列來儲存,本例可以用int[] arr來儲存。 2、”zhnagsan”,true,68 像這樣的可以使

JAVA常用集合框架用法基礎篇三之Colletion子介面Set

這一篇我們來介紹Collection介面的另一個子介面,Set介面。Set是個介面,元素不可以重複,是無序的。Set介面中的方法和Collection的一致。 A、Set的子類: 1、HashSet:此類實現的Set介面,由雜湊表(實際上是一個HashMap)例項支援,它不保證Set的迭代順