最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Java三十四篇: 回顧Servlet

2023-03-08 23:00 作者:小劉Java之路  | 我要投稿

什么是Servlet?

  • Servlet 是 JavaWeb 的三大組件之一,它屬于動態(tài)資源,Servlet 的作用是處理請求,服務器會把接收到的請求給 Servlet 處理,在 Servlet 中需要

    • 接收請求數(shù)據(jù)

    • 處理請求

    • 完成響應

每個 Servlet 是唯一的,它們處理的請求時不同的。

二、Servlet接口介紹

  • 概念:javaweb程序開發(fā),項目就是一個java應用程序,用sun公司提供的接口Servlet,只要實現(xiàn)里面的一些接口,并按照規(guī)則把接口中的代碼寫完,就是一個javaweb項目。

  • 如果要完成一個javaweb項目的開發(fā)

    • 編寫一個Java類,讓這個java類實現(xiàn)Servlet接口。

    • 將編寫好的javaweb項目放置到web服務器中

實現(xiàn)Servlet的方式

實現(xiàn) Servlet 有三種方式:

  • 實現(xiàn) java.servlet.Servlet 接口

  • 繼承 javax.servlet.GenericServlet 類

  • 繼承 javax.servletHttpServlet 類

查看源碼

img

spring家族底層都是封裝了大量的servlet

package com.zhsj;

import javax.servlet.*;
import java.io.IOException;

/**
* @program: test
* @description: Servlet 中的方法大多由 Tomcat 調(diào)用,Servlet 的對象也是有 Tomcat 生成
* ?導入了依賴:tomcat-embed-core:9.0.56
* @author: liulq
*
*/
publicclass Test2 implements Servlet {

? ? ? ?/**
? ? ? ? * 它是生命周期方法
? ? ? ? * 它會在 Servlet 對象創(chuàng)建之后馬上執(zhí)行,并執(zhí)行一次(出生之后)
? ? ? ? * */
? ? ? ?@Override
? ? ? ?public void init(ServletConfig servletConfig) throws ServletException {
? ? ? ? ? ?System.out.println("init");
? ? ? ?}

? ? ? ?/**
? ? ? ? * 可以獲取 Servlet 的配置信息
? ? ? ? * */
? ? ? ?@Override
? ? ? ?public ServletConfig getServletConfig() {
? ? ? ? ? ?System.out.println("getServletConfig");
? ? ? ? ? ?returnnull;
? ? ? ?}

? ? ? ?/**
? ? ? ? * 它是聲明周期方法
? ? ? ? * 它會被調(diào)用多次,每次請求都是調(diào)用這個方法
? ? ? ? * */
? ? ? ?@Override
? ? ? ?public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
? ? ? ? ? ?System.out.println("service");
? ? ? ?}

? ? ? ?/**
? ? ? ? * 獲取 Servlet 的信息
? ? ? ? * */
? ? ? ?@Override
? ? ? ?public String getServletInfo() {
? ? ? ? ? ?System.out.println("getServletInfo");
? ? ? ? ? ?return"Hello ?World";
? ? ? ?}

? ? ? ?/**
? ? ? ? * 它是聲明周期方法
? ? ? ? * 它會在 Servlet 被銷毀之前調(diào)用,并且只會調(diào)用一次
? ? ? ? * */
? ? ? ?@Override
? ? ? ?public void destroy() {
? ? ? ? ? ?System.out.println("destroy");

? ? ? ?}
}

說明:

  • 編寫一個Servlet實現(xiàn)類必須去實現(xiàn)Servlet的實現(xiàn)

    • Servlet接口,根據(jù)Servlet的API知道,Servlet存在3個生命周期的方法

    • init():用于初始化的方法,沒有特殊代碼處理的時候,發(fā)送請求的時候執(zhí)行該方法

    • service():用于處理請求和響應的方法,程序員編寫代碼的部分。

    • destroy():銷毀的方法,如果沒有特殊代碼處理,關(guān)閉服務器的時候銷毀。

    • Servlet接口中,也提供了獲取Servlet初始化信息的方法

    • getServletConfig();重點,該方法主要能夠得到一個ServletConfig對象。

    • getServletInfo():只能獲取Servlet版本號等信息。一般不用。

    • Servlet的API中,提到了在程序員編寫Servlet的時候,實際上不需要實現(xiàn)Servlet接口,可以選擇繼承g(shù)enericServlet或者HttpServlet

    • 說明:雖然這兩個類都是可以實現(xiàn)一個Servlet程序開發(fā)的,但是從API上可以看到,實際HttpServlet是GenericServlet的子類,因此,推薦使用HttpServlet

例子:

1、創(chuàng)建一個javaweb 的項目

目錄結(jié)構(gòu):

img
img

2、編程servlet代碼

package com.woniuxy.demo;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;

/**
* @program: test
* @description:
* @author: liulq
* @create:
*/
publicclass ServletDemo2 extends HttpServlet {

? ?@Override
? ?protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
? ? ? ?doPost(request,response);
? ?}

? ?/*
? ? *
? ? * <p>Title: doPost</p>
? ? * <p>Description: </p>
? ? * @param request 請求對象 獲取瀏覽器向服務器發(fā)送的數(shù)據(jù)
? ? * @param response 響應對象 將服務器的數(shù)據(jù)發(fā)送給瀏覽器
? ? * @throws ServletException
? ? * @throws IOException
? ? * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
? ? */
? ?@Override
? ?protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
? ? ? ?System.out.println("請求成功");

? ? ? ?//由服務器給瀏覽器寫出數(shù)據(jù)
? ? ? ?OutputStream out = response.getOutputStream();
? ? ? ?out.write("abc".getBytes());
? ? ? ?//關(guān)閉資源
? ? ? ?out.close();
? ?}
}

3、編寫web.xml映射的代碼

?<!-- 配置ServletDemo2的映射 -->
?<servlet>
? ?<servlet-name>ServletDemo2</servlet-name>
? ?<servlet-class>com.woniuxy.demo.ServletDemo2</servlet-class>
?</servlet>
?<!-- 映射配置 -->
?<servlet-mapping>
? ?<servlet-name>ServletDemo2</servlet-name>
? ?<url-pattern>/demo2</url-pattern>
?</servlet-mapping>

4、啟動tomcat,測試請求demo

img

Servlet流程及原理

瀏覽器請求之后解析的步驟:

  • 瀏覽器發(fā)出請求,鏈接服務器

  • 發(fā)送http請求:http://localhost:8080/WebDemo2/demo2;

  • 解析出來IP地址

  • 解析出來端口號

  • 解析出來web應用程序

  • 解析出來請求訪問的資源文件

  • 創(chuàng)建Servlet對象,并用init初始化Servlet對象

  • 調(diào)用Service方法或者別拆分出來的doxxx()方法。

  • 關(guān)閉服務器的時候,銷毀Servlet對象,調(diào)用destroy方法

Servlet對象的生命周期

  • 實現(xiàn)Servlet接口或者繼承HttpServlet,該類所在的工程為一個web應用程序,該程序需要放到服務器里面,當服務器一旦開啟,那么服務器會自動的在容器中創(chuàng)建一個Servlet對象。

  • 當發(fā)送第一條請求的時候,會調(diào)用init方法進行初始化Servlet對象。后續(xù)請求將不再初始化

  • 每一次調(diào)用service方法或者doGet方法或者doPost方法之前,都需要使用Servlet對象創(chuàng)建獨立的HttpServletRequest對象和HttpServletResponse對象。

  • 調(diào)用service方法或者對應的doXXX()方法處理請求響應。

  • 當服務器關(guān)閉的時候,銷毀Servlet對象。

web中的其他重要的對象

ServletConfig對象

  • 作用:獲取配置文件(web.xml)中的參數(shù),一些數(shù)據(jù)可以先配置在web.xml文件中,由ServletConfig對象進行獲取,在servlet接口中提供了有參的init方法,參數(shù)為ServletConfig對象,在初始化Servlet對象的時候,會調(diào)用init方法,在這個時候,web服務器會自動將web.xml里面的參數(shù)加載到ServletConfig對象。并且同時將ServletConfig對象交給Servlet對象。

ServletContext對象

  • 一個web容器里面,只有一個ServletContext對象,獲取ServletContext對象有兩種方式

    • 方式1:通過ServletConfig對象中的getServeltContext()方法來獲取ServletContext對象

ServletContext context = this.getServletConfig().getServletContext();

  • 方式2:可以直接通過Servlet對象中的getServletContext()方法來獲取ServletConext對象,推薦方式。

ServletContext context = this.getServletContext();

Servlet的第一個作用:實現(xiàn)各個Servlet類中的數(shù)據(jù)共享

  • 獲取全局的配置文件值

  • 讀取配置文件

Response對象(相應)

  • 當服務器接收到了請求之后,會執(zhí)行doPost或者doGet方法,執(zhí)行完之后會給瀏覽器反饋數(shù)據(jù),完成反饋數(shù)據(jù)的對象就是response,該對象不需要程序員自己創(chuàng)建。

Request對象 (請求)

  • 當瀏覽器向服務器發(fā)送請求之后,服務器會接受到來自瀏覽器的數(shù)據(jù)(用戶填寫的數(shù)據(jù)、請求頭數(shù)據(jù)和請求的數(shù)據(jù)),request是完成前端數(shù)據(jù)交給服務器的對象

總結(jié):

  • 1.servlet是Javaweb 的三大組件之一,是很多框架的底層,如果需要知道底層怎么實現(xiàn)的那必須知道servlet

  • 2.實現(xiàn) Servlet 有三種方式:

    • 實現(xiàn) java.servlet.Servlet 接口

    • 繼承 javax.servlet.GenericServlet 類

    • 繼承 javax.servletHttpServlet 類

  • 3.servletContext對象、ServletCofig對象、Reponse對象、Request對象還是很重要的,要有一定的認識


? ? ? ? ? ? ? ? ? ?? ? ? ??


Java三十四篇: 回顧Servlet的評論 (共 條)

分享到微博請遵守國家法律
沅陵县| 新余市| 碌曲县| 历史| 平顶山市| 英吉沙县| 甘孜县| 凤翔县| 德阳市| 博爱县| 谢通门县| 太仆寺旗| 大连市| 玉门市| 张掖市| 容城县| 泸溪县| 长阳| 庆安县| 新昌县| 高邑县| 乌海市| 讷河市| 公主岭市| 成安县| 上思县| 任丘市| 德惠市| 海口市| 阿坝县| 中阳县| 双流县| 广宗县| 旬阳县| 荣成市| 兴文县| 弥勒县| 苍溪县| 南靖县| 右玉县| 普安县|