Servlet_HttpServlet_ServletContext


layout: post
title: Servlet_HttpServlet_ServletContext
subtitle: 用法
date: 2018-04-13
author: ZL
header-img: img/20180413.jpg
catalog: true
tags:
- Servlet


Servlet

Servlet簡介

Servlet 運行在服務端的Java小程序,是sun公司提供一套規(guī)范(接口)私杜,用來處理客戶端請求皆怕、響應給瀏覽器的動態(tài)資源。但servlet的實質(zhì)就是java代碼值戳,通過java的API 動態(tài)的向客戶端輸出內(nèi)容

servlet規(guī)范:包含三個技術(shù)點:

  • servlet技術(shù)
  • filter技術(shù)---過濾器
  • listener技術(shù)---監(jiān)聽器

最簡單的例子

工程目錄:主要就是一個java和一個xml文件

servlet

TestServlet.java的代碼:

package aa;
import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TestServlet implements Servlet {

    @Override
    public void destroy() {
        System.out.println("destroy");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        System.out.println("init");
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        System.out.println("service");
        arg1.getWriter().write("xxxxxxxxxxxxxxxxxxxx");
    }

}

web.xml的代碼:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ServletDemo2</display-name>
  //加載歡迎頁面的順序议谷,找到了一個就不會往下找了
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  
  <servlet>
    //servlet的名字
    <servlet-name>test</servlet-name>
    //servlet類的全類名
    <servlet-class>aa.TestServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
    //和所對應的servlet的名字匹配
    <servlet-name>test</servlet-name>
    //匹配瀏覽器輸入的url
    <url-pattern>/Testservlet</url-pattern>
  </servlet-mapping>
</web-app>

使用:瀏覽器輸入地址:http://localhost:8080/ServletDemo2/Testservlet

image

servlet的配置

在web.xml里面的就是servlet的配置

過程:

  1. 根據(jù)用戶輸入的url匹配url-pattern,
  2. 然后發(fā)現(xiàn)這個url-pattern的名字叫test堕虹,找到對應的叫test的servlet
  3. 然后發(fā)現(xiàn)這個servlet的全類名是aa.TestServlet卧晓,然后就可以找到對應的類。
    image

url-pattern的配置方式:

  • 完全匹配 訪問的資源與配置的資源完全相同才能訪問到
    <url-pattern>/Testservlet</url-pattern>

  • 目錄匹配 格式:/虛擬的目錄../* *代表任意
    <url-pattern>/aaa/bbb/*</url-pattern>

  • 擴展名匹配 格式:*.擴展名
    <url-pattern>*.html</url-pattern>

    注意:第二種與第三種不要混用 /aaa/bbb/*.html(錯誤的)

Servlet的生命周期

  • init(ServletConfig config)
    何時執(zhí)行:servlet對象創(chuàng)建的時候執(zhí)行
    ServletConfig : 代表的是該servlet對象的配置信息

  • service(ServletRequest request,ServletResponse response)
    何時執(zhí)行:每次請求都會執(zhí)行
    ServletRequest :代表請求 認為ServletRequest 內(nèi)部封裝的是http請求的信息
    ServletResponse :代表響應 認為要封裝的是響應的信息

  • destroy()
    何時執(zhí)行:servlet銷毀的時候執(zhí)行

默認:
servlet對象創(chuàng)建:第一次訪問該serv對象時
servlet對象銷毀:服務器關(guān)閉的時候

eg:對XXXServlet進行了10次訪問赴捞,init()逼裆,destory(),service() 一共執(zhí)行力多少次赦政?
----->1,0,10

當在servlet的配置時 加上一個配置 <load-on-startup> servlet對象在服務器啟動 時就創(chuàng)建


HttpServlet

上面是實現(xiàn)servlet的接口胜宇,但是實際中不用,而是繼承HttpServlet恢着,HttpServlet封裝的更好一些桐愉。

package aa;

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

public class MyHttpServlet extends javax.servlet.http.HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public MyHttpServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

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

}

配置方法并沒有改變,還是一樣的掰派。

ServletContext

簡介(類似Android中的Context)

ServletContext代表是一個web應用的環(huán)境(上下文)對象从诲,ServletContext對象 內(nèi)部封裝是該web應用的信息,ServletContext對象一個web應用只有一個

ServletContext對象的生命周期碗淌?
創(chuàng)建:該web應用被加載(服務器啟動或發(fā)布web應用(前提盏求,服務器啟動狀 態(tài)))
銷毀:web應用被卸載(服務器關(guān)閉,移除該web應用)

獲取ServletContext的對象

  • ServletContext servletContext = config.getServletContext();
  • ServletContext servletContext = this.getServletContext();

ServletContext的作用

  1. 獲得web應用全局的初始化參數(shù)
    web.xml中配置初始化參數(shù)

    image

    通過context對象獲得參數(shù)
    image

  2. 獲得web應用中任何資源的絕對路徑
    String path = context.getRealPath(相對于該web應用的相對地址);

  3. ServletContext是一個域?qū)ο?br> 存儲數(shù)據(jù)的區(qū)域就是域?qū)ο?br> ServletContext域?qū)ο蟮淖饔梅秶赫麄€web應(所有的web資源都可以隨意向 servletcontext域中存取數(shù)據(jù)亿眠,數(shù)據(jù)可以共享)
    域?qū)ο蟮耐ㄓ玫姆椒ǎ?br> context.setAtrribute(String name,Object obj);
    context.getAttribute(String name);
    context.removeAttribute(String name);
    數(shù)據(jù)是所有servlet可以共享的碎罚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纳像,隨后出現(xiàn)的幾起案子荆烈,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憔购,死亡現(xiàn)場離奇詭異宫峦,居然都是意外死亡,警方通過查閱死者的電腦和手機玫鸟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門导绷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屎飘,你說我怎么就攤上這事妥曲。” “怎么了钦购?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵檐盟,是天一觀的道長。 經(jīng)常有香客問我押桃,道長葵萎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任唱凯,我火速辦了婚禮羡忘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘波丰。我一直安慰自己壳坪,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布掰烟。 她就那樣靜靜地躺著爽蝴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纫骑。 梳的紋絲不亂的頭發(fā)上蝎亚,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音先馆,去河邊找鬼发框。 笑死,一個胖子當著我的面吹牛煤墙,可吹牛的內(nèi)容都是我干的梅惯。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼仿野,長吁一口氣:“原來是場噩夢啊……” “哼铣减!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脚作,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤葫哗,失蹤者是張志新(化名)和其女友劉穎缔刹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劣针,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡校镐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捺典。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸟廓。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辣苏,靈堂內(nèi)的尸體忽然破棺而出肝箱,到底是詐尸還是另有隱情哄褒,我是刑警寧澤稀蟋,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站呐赡,受9級特大地震影響退客,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜链嘀,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一萌狂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怀泊,春花似錦茫藏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至枣申,卻和暖如春售葡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忠藤。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工挟伙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人模孩。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓尖阔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榨咐。 傳聞我的和親對象是個殘疾皇子介却,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,366評論 1 92
  • 從三月份找實習到現(xiàn)在祭芦,面了一些公司筷笨,掛了不少,但最終還是拿到小米、百度胃夏、阿里轴或、京東、新浪仰禀、CVTE照雁、樂視家的研發(fā)崗...
    時芥藍閱讀 42,218評論 11 349
  • 本文包括: Servlet簡介關(guān)于Servlet的一些類 Servlet生命周期 ServletConfig獲得初...
    廖少少閱讀 3,849評論 1 67
  • 這部分主要是與Java Web和Web Service相關(guān)的面試題。 96答恶、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,401評論 0 10
  • Servlet學習的大綱 servlet概念及相關(guān)接口簡介 servet 執(zhí)行過程 servlet映射路徑 缺省s...
    奮斗的老王閱讀 1,185評論 1 51