javaWeb-2-Tomcatサーバーのサーブレットインターフェイスの詳細な説明

目次

1.サーブレットインターフェイス

1.1、サーブレットインターフェースの継承システム

2.ServletConfigインターフェース

2.1ServletConfigインターフェースの説明

2.2ServletConfigインターフェースの3つの機能

2.3ServletConfigインターフェースのコードデモンストレーション

2.3.1サーブレットプロセッサ-HttpServletProcessor

2.3.2initメソッドを書き直す際の注意事項

2.3.3サーブレットプロセッサ-web.xml構成ファイル

2.3.4サーブレットプロセッサ-フロントエンドHTTPリクエスト

2.3.5サーブレットプロセッサ-バックエンドHTTP要求の処理結果

3.ServletContextインターフェース

3.1、ServletContextインターフェースの説明

3.2、ServletContextオブジェクトの役割

3.3、ServletContextオブジェクトコードデモンストレーションの役割

3.3.1サーブレットプロセッサ-ServletContextオブジェクト関数テスト-HttpServletProcessorAuto

3.3.2サーブレットプロセッサ-ServletContextオブジェクト関数test-web.xml構成ファイル

3.3.3サーブレットプロセッサ-ServletContextオブジェクト関数テスト-フロントエンドHTTPリクエスト

3.3.4サーブレットプロセッサ-ServletContextオブジェクト関数テスト-バックエンドHTTP要求処理結果

3.3.5サーブレットプロセッサ-ServletContextオブジェクト関数のテスト-ServletContextオブジェクトにデータを格納するデモンストレーション

3.3.6 Webプロジェクト全体がTomcatサーバーにデプロイされた後、サーバー内の動的リソースと静的リソースがディスクに保存されます

java8オンラインAPI https //www.matools.com/api/java8

1.サーブレットインターフェイス

1.1、サーブレットインターフェースの継承システム

2.ServletConfigインターフェース

2.1ServletConfigインターフェースの説明

名前から判断すると、ServletConfigインターフェイスはServletプログラムの構成情報であることがわかっています。

(1)サーブレットプログラムとServletConfigオブジェクトはどちらもTomcatによって作成され、プログラマーによって使用されます。

(2)サーブレットプログラムは、デフォルトで初めてアクセスしたときに作成されます(アクセスは作成されません)。各サーブレットプログラムが作成されると、それに応じてServletConfigオブジェクトが作成され、2つは互いに対応します。Servletプログラムは、それに対応するServletConfigオブジェクトのみを取得できますが、他のServletプログラムのServletConfigオブジェクトを取得することはできません。

2.2ServletConfigインターフェースの3つの機能

(1)Servletプログラムのエイリアス(すなわち、web.xmlで設定されたServletプログラムのエイリアス)を取得できます。

(2)web.xmlで設定された初期化パラメータを取得できます。

(3)ServletContextオブジェクトを取得できます。

2.3ServletConfigインターフェースのコードデモンストレーション

2.3.1サーブレットプロセッサ-HttpServletProcessor

package com.wind.servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * 演示ServletConfig接口的作用
 */
public class HttpServletProcessor extends HttpServlet {
    private static final long serialVersionUID = -7511536601794982778L;
    public HttpServletProcessor() {
        System.out.println("1.HttpServletProcessor extends HttpServlet 的无参构造器执行了...");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        super.init(servletConfig);
        System.out.println("2.HttpServletProcessor extends HttpServlet 的init方法执行了...");
        //ServletConfig接口的三大作用:
        //(1) 可以获取Servlet程序的别名(即web.xml的的内容)
        System.out.println("Servlet程序的别名:" + servletConfig.getServletName());
        //(2) 可以获取web.xml的初始化参数的值
        System.out.println("Servlet程序的初始化参数1:" + servletConfig.getInitParameter("username"));
        System.out.println("Servlet程序的初始化参数2:" + servletConfig.getInitParameter("password"));
        //(3) 可以获取ServletContext对象
        System.out.println("Servlet程序的ServletContext对象:" + servletConfig.getServletContext());
    }

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

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("3.HttpServletProcessor extends HttpServlet, doGet done...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("4.HttpServletProcessor extends HttpServlet, doPost done...");
    }

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

    @Override
    public void destroy() {
        System.out.println("5.HttpServletProcessor extends HttpServlet 的destroy方法执行了.");
    }
}

2.3.2initメソッドを書き直す際の注意事項

注:Servletインターフェースのinitメソッドを書き直すときは、関数本体に次のように書き込む必要があります。super.init(config);  理由:親クラスGenericServletのinitメソッドはパラメーターconfigを保存し、サブクラスは呼び出されない場合は保存できません。

2.3.3サーブレットプロセッサ-web.xml構成ファイル

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--1.使用servlet标签给Tomcat配置动态servlet程序-->
    <servlet>
        <!--servlet-name标签:给servlet程序起一个别名(一般就是类名)-->
        <servlet-name>HttpServletProcessor</servlet-name>
        <!--servlet-class标签:servlet程序的全类名-->
        <servlet-class>com.wind.servlet.HttpServletProcessor</servlet-class>
        <!--init-param标签:给Servlet程序传入初始化参数-->
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>root</param-value>
        </init-param>
    </servlet>

    <!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
    <servlet-mapping>
        <!--servlet-name标签:告诉Tomcat服务器,我当前配置的访问地址是给哪个servlet程序使用-->
        <servlet-name>HttpServletProcessor</servlet-name>
        <!--url-pattern标签:配置访问地址.
        (1)/            :斜杠表示,在服务器解析的时候,表示访问地址是:http://ip:port/工程路径
        (2)/httpServlet : 表示访问地址是:http://ip:port/工程路径/httpServlet 比如:http://localhost:8080/javaWeb/httpServlet -->
        <url-pattern>/httpServlet</url-pattern>
    </servlet-mapping>
    <!--3.使用b.html访问-->

</web-app>

2.3.4サーブレットプロセッサ-フロントエンドHTTPリクエスト

2.3.5サーブレットプロセッサ-バックエンドHTTP要求の処理結果

3.ServletContextインターフェース

3.1、ServletContextインターフェースの説明

(1)ServletContextインターフェースは、Servletコンテキストオブジェクトを表します。

(2)Webプロジェクトには、ServletContextオブジェクトインスタンスが1つだけあります。

(3)ServletContextは、Webプロジェクトの開始時に作成され、Webプロジェクトの停止時に破棄されます。

(4)ServletContextオブジェクトはドメインオブジェクトです。ドメインオブジェクトとは何ですか?ドメインオブジェクトは、次のとおりです。地図のようなデータにアクセスするオブジェクトは、ドメインオブジェクトと呼ばれ、ドメインは、 データへのアクセス動作範囲を指し、のServletContextのドメインは、全体のWebプロジェクトです。

3.2、ServletContextオブジェクトの役割

(1)web.xmlで構成されたコンテキストパラメータータグの値を取得します。

(2)現在のプロジェクトのパスを取得します。形式:/ project pathは、Deployment in Edit Configurationsのアプリケーションコンテキストのコンテンツ(つまり、アドレスの8080の後、特定の開いたページの前のコンテンツ)です。

(3)展開後、ハードディスク上のプロジェクトの絶対パスを取得します。

(4)マップなどのデータにアクセスします。

3.3、ServletContextオブジェクトコードデモンストレーションの役割

3.3.1サーブレットプロセッサ-ServletContextオブジェクト関数テスト-HttpServletProcessorAuto

package com.wind.servlet;

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

/**
 * ServletContext 测试
 */
public class HttpServletProcessorAuto extends HttpServlet {

    private static final long serialVersionUID = 2050438983192725273L;

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }

    /**
     * 默认执行的是doGet方法,故只重写doGet方法
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //GenericServlet类中有 public ServletConfig getServletConfig()方法,返回 this.config
        ServletContext servletContext = getServletConfig().getServletContext();

        //ServletContext作用 1.获取web.xml中配置的上下文参数<context-param>标签中的值
        System.out.println("context-param参数的username值是:" + servletContext.getInitParameter("username"));
        /* 运行结果:context-param参数的username值是:username-root */
        System.out.println("context-param参数的password值是:" + servletContext.getInitParameter("password"));
        /* 运行结果:context-param参数的password值是:password-root */

        //ServletContext作用 2.获取当前工程的路径
        System.out.println("当前工程路径:" + servletContext.getContextPath());
        /* 运行结果:当前工程路径:/javaWeb */

        //ServletContext作用 3.获取web工程部署后在硬盘上的绝对路径
        /* /斜杠(默认路径)对应IDEA代码的web目录 */
        System.out.println("工程部署后的绝对路径是:" + servletContext.getRealPath("/"));
        /* 运行结果:工程部署后的绝对路径是:/Users/cmm/codes/spring5-txdemo3-javaWeb/out/artifacts/javaWeb_war_exploded/ */

        //另:在web目录下创建一个css文件夹
        System.out.println("工程下css目录的绝对路径是:" + servletContext.getRealPath("/css"));
        /* 运行结果:工程下css目录的绝对路径是:/Users/cmm/codes/spring5-txdemo3-javaWeb/out/artifacts/javaWeb_war_exploded/css */
        //在web目录下创建一个img文件夹,里面放1.gif文件
        System.out.println("工程下img目录1.jpg的绝对路径是:" + servletContext.getRealPath("/img/1.jpg"));
        /* 输出:工程下img目录1.gif的绝对路径是:/Users/cmm/codes/spring5-txdemo3-javaWeb/out/artifacts/javaWeb_war_exploded/img/1.jpg */
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("3.HttpServletProcessorAuto extends HttpServlet, doGet done...");
    }
}

3.3.2サーブレットプロセッサ-ServletContextオブジェクト関数test-web.xml構成ファイル

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--<context-param>标签中是web工程的上下文参数,属于整个web工程-->
    <!--<context-param>标签可以有多个,但是,全部都需要写在第一个<servlet>标签之上!!!-->
    <context-param>
        <param-name>username</param-name>
        <param-value>username-root</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>password-root</param-value>
    </context-param>
    <!--<context-param>标签下方,才能够是servlet类对应的<servlet标签>-->

    <!--1.使用servlet标签给Tomcat配置动态servlet程序-->
    <servlet>
        <servlet-name>HttpServletProcessorAuto</servlet-name>
        <servlet-class>com.wind.servlet.HttpServletProcessorAuto</servlet-class>
    </servlet>

    <!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
    <servlet-mapping>
        <servlet-name>HttpServletProcessorAuto</servlet-name>
        <url-pattern>/httpServletAuto</url-pattern>
    </servlet-mapping>
    <!--3.使用b.html访问-->

</web-app>

3.3.3サーブレットプロセッサ-ServletContextオブジェクト関数テスト-フロントエンドHTTPリクエスト

3.3.4サーブレットプロセッサ-ServletContextオブジェクト関数テスト-バックエンドHTTP要求処理結果

3.3.5サーブレットプロセッサ-ServletContextオブジェクト関数のテスト-ServletContextオブジェクトにデータを格納するデモンストレーション

(1)サーブレットプロセッサ-HttpServletProcessorAuto2

public class HttpServletProcessorAuto2 extends HttpServlet {

    private static final long serialVersionUID = -1924341414254477696L;

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

        //GenericServlet类中有 public ServletConfig getServletConfig()方法,返回 this.config
        ServletContext servletContext = getServletConfig().getServletContext();

        //向servletContext对象中设置值
        System.out.println("HttpServletProcessorAuto2=servletContext对象,key1=:" + servletContext.getAttribute("key1"));
        System.out.println("HttpServletProcessorAuto2=servletContext对象hashcode=:" + servletContext);
    }
}

(2)サーブレットプロセッサ-HttpServletProcessorAuto

public class HttpServletProcessorAuto extends HttpServlet {

    private static final long serialVersionUID = 2050438983192725273L;

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
    /**
     * 默认执行的是doGet方法,故只重写doGet方法
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //GenericServlet类中有 public ServletConfig getServletConfig()方法,返回 this.config
        ServletContext servletContext = getServletConfig().getServletContext();

        //向servletContext对象中设置值
        System.out.println("HttpServletProcessorAuto=servletContext对象设置值之前,key1=:" + servletContext.getAttribute("key1"));
        servletContext.setAttribute("key1", "value1");
        System.out.println("HttpServletProcessorAuto=servletContext对象设置值之后,key1=:" + servletContext.getAttribute("key1"));
        System.out.println("HttpServletProcessorAuto=servletContext对象hashcode=:" + servletContext);
    }
}

(3)web.xml構成ファイル

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--<context-param>标签中是web工程的上下文参数,属于整个web工程-->
    <!--<context-param>标签可以有多个,但是,全部都需要写在第一个<servlet>标签之上!!!-->
    <context-param>
        <param-name>username</param-name>
        <param-value>username-root</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>password-root</param-value>
    </context-param>
    <!--<context-param>标签下方,才能够是servlet类对应的<servlet标签>-->

    <!--1.使用servlet标签给Tomcat配置动态servlet程序-->
    <servlet>
        <servlet-name>HttpServletProcessorAuto</servlet-name>
        <servlet-class>com.wind.servlet.HttpServletProcessorAuto</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>HttpServletProcessorAuto2</servlet-name>
        <servlet-class>com.wind.servlet.HttpServletProcessorAuto2</servlet-class>
    </servlet>

    <!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
    <servlet-mapping>
        <servlet-name>HttpServletProcessorAuto</servlet-name>
        <url-pattern>/httpServletAuto</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>HttpServletProcessorAuto2</servlet-name>
        <url-pattern>/httpServletAuto2</url-pattern>
    </servlet-mapping>
    <!--3.使用b.html访问-->
</web-app>

(4)運用結果

3.3.6 Webプロジェクト全体がTomcatサーバーにデプロイされた後、サーバー内の動的リソースと静的リソースがディスクに保存されます

(1)Webプロジェクト全体がTomcatサーバーにデプロイされた後、サーバー内の動的リソースと静的リソースがディスクに格納され、ディレクトリは次のようになります。

(2)また、ブラウザーで直接開いて、デプロイされているさまざまなリソースを表示できます。

(3)したがって、他の人は、ブラウザのTomcatサーバーで開発者によって展開されたさまざまなリソースにアクセスできます。アクセスプロセスは、おおよそ次のとおりです。

 

 

おすすめ

転載: blog.csdn.net/cmm0401/article/details/111414121