日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Servlet一(web基礎學習筆記二十)

 quasiceo 2018-09-19

一、Servlet簡介

  Servlet是sun公司提供的一門用于開發(fā)動態(tài)web資源的技術。
  Sun公司在其API中提供了一個servlet接口,用戶若想用發(fā)一個動態(tài)web資源(即開發(fā)一個Java程序向瀏覽器輸出數據),需要完成以下2個步驟:
  1、編寫一個Java類,實現servlet接口。
  2、把開發(fā)好的Java類部署到web服務器中。
  按照一種約定俗成的稱呼習慣,通常我們也把實現了servlet接口的java程序,稱之為Servlet

二、ServletAPI

三、Servlet的方法

四、Servlet的運行

Servlet程序是由WEB服務器調用,web服務器收到客戶端的Servlet訪問請求后:
 ?、賅eb服務器首先檢查是否已經裝載并創(chuàng)建了該Servlet的實例對象。如果是,則直接執(zhí)行第④步,否則,執(zhí)行第②步。
 ?、谘b載并創(chuàng)建該Servlet的一個實例對象。 
  ③調用Servlet實例對象的init()方法。
 ?、軇?chuàng)建一個用于封裝HTTP請求消息的HttpServletRequest對象和一個代表HTTP響應消息的HttpServletResponse對象,然后調用Servlet的service()方法并將請求和響應  對象作為參數傳遞進去。
 ?、軼EB應用程序被停止或重新啟動之前,Servlet引擎將卸載Servlet,并在卸載之前調用Servlet的destroy()方法。 

五、Servlet生命周期

其中,加載和實例化,初始化,銷毀都只進行一行

 五、Serlvet部署

5.1、新建類Myservlet3繼承HttpServlet

重寫doGet,doPost,destroy(),init方法

復制代碼
package com.pb.servletdemo;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Myservlet3 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("doGet方法被調用");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("doPost方法被調用");
    }

    /*@Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.service(arg0, arg1);
    }*/

    @Override
    public void destroy() {
        System.out.println("Servlet銷毀,destroy方法被調用");
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("Servlet初始化,init方法被調用");
        String initParam=config.getInitParameter("charSetContent");
        System.out.println(initParam);
        
    }

}
復制代碼

5.2、在web.xml中配置

復制代碼
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns="http://java./xml/ns/javaee" xsi:schemaLocation="http://java./xml/ns/javaee http://java./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>
  <!-- 首先是servlet標簽 -->
  <servlet>
  <!-- 指定servlet的名字 可以與建立的servlet名字不一樣,別名-->
  <servlet-name>myserlvet</servlet-name>
  <!-- servlet的類名   包名.類名的完整路徑-->
  <servlet-class>com.pb.servletdemo.Myservlet3</servlet-class>
  <!-- 初始參數 -->
  <init-param>
  <!-- 設置字符集 -->
  <param-name>charSetContent</param-name>
  <!---->
  <param-value>utf-8</param-value>
  </init-param>
  </servlet>
  <!-- 截獲請求 servlet映射-->
  <servlet-mapping>
  <!-- 些servlet-name要與上方的servlet-name名字一樣不然會報錯 -->
  <servlet-name>myserlvet</servlet-name>
  <!-- 一個servlet可以 有多個url-pattern-->
  <!-- 精確匹配 -->
  <url-pattern>/myservlet3</url-pattern>
  <!-- 加上虛擬目錄 -->
  <url-pattern>/demo/myservlet3</url-pattern>
  <!-- 通配符來配置* -->
  <url-pattern>/*</url-pattern>
  <!-- 后綴名來配置 -->
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
</web-app>
復制代碼

5.3、精確匹配

5.4、虛擬目錄匹配--可以有多個虛擬目錄

5.5、*通配符

5.6、后綴名來訪問

六、url-pattern 

6.1、url-pattern 概述

<url-pattern>元素,用于把一個Servlet 別名映射為一個URL 訪問規(guī)則。在Servlet 的配置過程中,我們首先使用servlet 元素中的servlet-name、servlet-class 等子元素把一個Servlet 實現類映射為一個別名,然后再使用servlet-mapping 元素把這個別名映射為一個可以在瀏覽器中訪問的url,我們對Servlet 的訪問正是通過這個URL 進行的。而不是通過別名。因此,配置這個URL 是Servlet 配置過程中非常重要的一個環(huán)節(jié)。那么我們應該如何對這個URL進行配置呢?也就是說url-pattern 有幾種配置規(guī)則呢?在配置url-pattern 元素的時候,有這樣三種規(guī)則,分別是精確匹配、目錄匹配和后綴匹配。

6.2、精確匹配

所謂的精確匹配,就是我們在使用瀏覽器訪問一個 Servlet 的時候,輸入的URL 中除了工程名之前的部分之外要和我們在配置Servlet 時,配置的url-pattern 元素要完全一致。比如說,在下面實例中,配置了一個名稱為 HelloServlet 的Servlet,它的url-pattern 我們配置為/helloServ , 那么這個配置就是完全匹配的方式。假如說我們這個工程的名字是
TestServlet,我們的Web 服務器的端口號為8080,那么在瀏覽器中訪問本地的這個Servlet的時候就需要使用這樣的URL:http://127.0.0.1:080/TestServlet/helloServ。其中,127.0.0.1 是保留的IP 地址,指代本機,8080 是我們設置的Web 服務器的端口號,TestServlet是我們這個Servlet 所在的Web 項目的名稱。而最后面的這個helloServ 就是我們配置的需要完全匹配的Servlet 的URL pattern。

復制代碼
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>javaee.sg.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServ</url-pattern>
</servlet-mapping>
復制代碼

6.3、目錄匹配

相對于精確匹配,目錄匹配是一種相對靈活的配置方式,它以斜杠開始,以星號結尾,并且規(guī)定了一個虛擬的目錄。為了更加形象的說明這種配置方式,我們仍然以剛才的例子進行說明,比如說剛才的那個Servlet,它的url-pattern 我們就可以使用這種形式進行配置:

<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServ/*</url-pattern>

在這個url-pattern 中,我們使用了一個虛擬的目錄, helloServ,那么我們在訪問這個Servlet 的時候輸入的URL 就會有多種選擇,我們只要保證這個URL 中,除了工程
名之外的部分以這個虛擬目錄helloServ 開始就可以了。比方說,我們可以使用這樣的URL 訪問這個Servlet:http://127.0.0.1:8080/ TestServlet/helloServ/theServlet。在這個URL中, TestServlet 是這個Web 項目的工程名。 helloServ 是虛擬目錄的名稱,最后面的theServlet 是我們在訪問的時候隨機輸入的一個名稱。這個名稱可以替換為其他的名稱,比方說替換為thisServlet 或者thatServlet 等等??傊?,在工程名TestServlet 之后緊跟虛擬目錄的名稱就可以了。

6.4、后綴匹配

用后綴進行匹配的方
式。在這種方式中,url-pattern 配置元素只限定了訪問Servlet 的后綴名,而對于虛擬目錄、名稱都沒有要求。比方說,我們再把剛才配置的Servlet 做一個修改,在url-pattern 中采用后綴匹配的規(guī)則進行配置。大家看這段代碼:

<servlet-name>HelloServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

在這個配置當中,我們限定了訪問這個Servlet 的后綴名是”.do”。也就是說,當我們的URL 中的服務器地址,端口號,工程名這些項沒有錯誤的情況下,只要url 以”.do”結尾,就
能夠訪問到我們的這個Servlet。比方說,在訪問我們這個別名為 HelloServlet 的Servlet的時候,URL 可以寫為這樣的形式:http://127.0.0.1:8080/ TestServlet/helloServ.do。大家可以看到,在這個URL 的前半部分是IP 地址、端口號和項目名稱。并且這個URL 以.do 結尾,因此就可以訪問到HelloServlet?;蛘撸覀円部梢园堰@個URL 寫為這樣的形式,都是可以的:http://127.0.0.1:8080/ TestServlet/theServlet.do。

6.5、注意事項

在配置 Servlet 的過程中,大家需要注意的另外一點就是一個Servlet 配置元素可以同時對應多個Servlet-mapping 元素, 比方說,我們仍然以剛才所介紹的HelloServlet 為例,大家看這段代碼:

復制代碼
<servlet-mapping>
<servlet-name> HelloServlet </servlet-name>
<url-pattern>/helloServ</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name> HelloServlet </servlet-name>
<url-pattern>/helloServ/* </url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name> HelloServlet </servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
復制代碼

在這段代碼中,我們?yōu)閯e名為HelloServlet 的Servlet 配置了3 個servlet-mapping 元素。既然我們可以為同一個Servlet 同時配置多個servlet-mapping,那么當客戶端在訪問這個servlet 的時候,servlet 容器是按照一個什么樣的順序來查找servlet 的呢?當為同一個Servlet 配置了多個servlet-mapping 的時候,servlet 容器首先將按照精確
匹配的方式進行匹配查找,如果匹配完成,則結束匹配,而如果匹配不成功就按照目錄匹配、后綴匹配的順序繼續(xù)進行匹配查找,如果有多個目錄匹配方式的配置項,則按照最長的一個來匹配。同時,在進行匹配的時候同樣要看請求的URL,如果這個URL 以斜線結尾,那么這個請求將會按照目錄匹配的方式來進行處理

七、在eclipse中創(chuàng)建Servlet

選擇需要的方法

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多