Servlet-概述及生命周期

工作以來公司項目從開始的Spring+SpringMVC到現(xiàn)在直接使用Springboot丸氛,框架越用越爽,但凡涉及到框架內(nèi)部的東西自己始終是一知半解。只會簡單的使用饲齐,并不知道它內(nèi)部的實現(xiàn),很多時候程序報錯咧最,只要涉及框架永遠都是百度一下捂人,不知為何報錯以及為何要如此處理∈秆兀看著大神們的各種解決方案滥搭,自己始終不得其理,遂先從web基礎(chǔ)走起

一捣鲸、Servlet的概述

Servlet是用Java編寫的服務(wù)端程序瑟匆,其作用在于Servlet作為中間層連接著瀏覽器或其他HTTP客戶端請求HTTP服務(wù)器上的數(shù)據(jù)庫或應(yīng)用程序。就瀏覽器而言栽惶,如果把Servlet比作橋梁那么servlet一端連接瀏覽器愁溜,一端連接服務(wù)器,他的作用就是保證瀏覽器和服務(wù)器之間的通信

維基百科
Servlet在整個web程序中的位置
菜鳥教程

二外厂、Servlet生命周期

servlet中 javax.servlet.Servlet 接口的 提供了三個方法

init() 初始化時調(diào)用
service() 用來處理客戶端發(fā)送過來的請求
destory() servlet被銷毀調(diào)用

代碼中一窺就近

1冕象、創(chuàng)建一個web項目


Web項目目錄

2、在src新增一個包汁蝶,包下新增一個類繼承HttpServlet渐扮,類中代碼如下

public class ServletController extends HttpServlet {

  private static final long serialVersionUID = 8721524830738176364L;
  
  @Override
  public void init() throws ServletException {
      // TODO Auto-generated method stub
      System.out.println("init-初始化");
  }
  
  @Override
  public void service(HttpServletRequest request, HttpServletResponse arg1)
          throws ServletException, IOException {
      // TODO Auto-generated method stub
      System.out.println("執(zhí)行了service方法;");
  }
  
  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
      System.out.println("執(zhí)行了doPost方法;");
  }

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("執(zhí)行了doGet方法");
    PrintWriter  out = resp.getWriter();
    resp.setContentType("text/html;charset=ISO-8859-1");
    out.println("<h1>你好GET方法</h1>");;
  }


  @Override
  public void destroy() {
      // TODO Auto-generated method stub
      System.out.println("執(zhí)行了destroy方法;");
  }
}

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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>servletdemo</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>
    <!-- GET請求  -->
    <servlet>
        <!-- servlet名稱 -->
        <servlet-name>servletDemo</servlet-name>
        <!-- 名稱對應(yīng)的類 -->
        <servlet-class>com.ServletController</servlet-class>
    </servlet>

    <servlet-mapping>
        <!-- 這里的servlet名稱和<servlet>中的名保持一致 -->
        <servlet-name>servletDemo</servlet-name>
         <!-- 請求的時url -->
        <url-pattern>/servlet/hellowServlet</url-pattern>
    </servlet-mapping>
    <!-- GET請求  -->
    
    <!-- POST請求 -->
    <servlet>
        <servlet-name>servletPost</servlet-name>
        <servlet-class>com.ServletController</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>servletPost</servlet-name>
        <url-pattern>/servlet/postServlet</url-pattern>
    </servlet-mapping>
    <!-- POST請求 -->
    
</web-app>

inde.jsp中的內(nèi)容

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <h1>Servlet</h1>
   <!-- a標簽?zāi)J的GET請求 -->
   <a href="servlet/hellowServlet">GET請求</a>
   <!-- 表單提交 -->
   <form action="servlet/postServlet" method="post">
     <p>客戶名稱: <input type="text" name="CustomerName" style="width: 300px" /></p>
     <p>客戶電話: <input type="text" name="CustomerTel" style="width: 300px" /></p>
     <input type="submit" value="POST請求" />
   </form>
</body>
</html>

配置文件說明:

web.xml圖解.png

請求地址:本機地址:tomact端口/項目名 ===>http://localhost:8089/servletdemo
ps:Tomcat默認端口是8080,我這里改了所以是8089穿仪,因為web.xml中的<welcome-file-list></welcome-file-list>的配置默認是依次往下找席爽,所以根據(jù)上述地址能找到index.jsp

通過代碼運行可知
第一次運行時先執(zhí)行init()然后執(zhí)行了 service()
第二執(zhí)行時只執(zhí)行了service()方法
當我通過stop關(guān)閉tomcat時執(zhí)行了destory()方法
當service()方法存在時,無論是執(zhí)行GET請求或者POST請求時啊片,都是執(zhí)行service()
當service()方法注釋時只锻,執(zhí)行GET請求時調(diào)用的時doGet(),執(zhí)行POST請求時執(zhí)行doPost()

ps:關(guān)于service()方法和doGet()及doPost()方法之間的關(guān)系我這里做一個簡單的說明

https://docs.oracle.com/javaee/7/api/toc.htm

這里大概的意思是:在接收HTTP請求時紫谷,service()方法會將請求分派到該類的定義的doXXX方法
當重寫了service()方法后齐饮,請求執(zhí)行的是我們重寫的service()方法,所以當執(zhí)行到service()并未做分派笤昨,反之祖驱,則亦然,所以才會出現(xiàn)上述關(guān)于service()方法的情況

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞒窒,一起剝皮案震驚了整個濱河市捺僻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖匕坯,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件束昵,死亡現(xiàn)場離奇詭異,居然都是意外死亡葛峻,警方通過查閱死者的電腦和手機锹雏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來术奖,“玉大人礁遵,你說我怎么就攤上這事〔杉牵” “怎么了佣耐?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挺庞。 經(jīng)常有香客問我晰赞,道長,這世上最難降的妖魔是什么选侨? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮然走,結(jié)果婚禮上援制,老公的妹妹穿的比我還像新娘。我一直安慰自己芍瑞,他們只是感情好晨仑,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拆檬,像睡著了一般洪己。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竟贯,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天答捕,我揣著相機與錄音,去河邊找鬼屑那。 笑死拱镐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的持际。 我是一名探鬼主播沃琅,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜘欲!你這毒婦竟也來了益眉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎郭脂,沒想到半個月后空繁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡朱庆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年盛泡,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜕琴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袖扛。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惕鼓,靈堂內(nèi)的尸體忽然破棺而出箱硕,到底是詐尸還是另有隱情拴竹,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布剧罩,位于F島的核電站栓拜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惠昔。R本人自食惡果不足惜幕与,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望镇防。 院中可真熱鬧啦鸣,春花似錦、人聲如沸来氧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啦扬。三九已至中狂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扑毡,已是汗流浹背胃榕。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留僚楞,地道東北人勤晚。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像泉褐,于是被迫代替她去往敵國和親赐写。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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