JavaEEベース(02):サーブレットAPIの使用の詳細コア

この記事の出所:GitHubにはこちらをクリック・ || GitEEは・こちらをクリック

まず、コアAPIの紹介

1、サーブレット実装プロセス

サーブレットは、動的なリソースに属しJavaWeb(サーブレット、フィルタ、リスナー)、の3つの成分の一つです。アクションが要求を処理するサーブレットで、サーバーがサーブレットにリクエストを送信することは、通常のサーブレットに必要な、処理された受信:要求トランザクションを受信するステップと、処理要求、完全な応答。

2、コアAPIの紹介

API 役割を説明して
ServletConfig サーブレットの初期化パラメータを取得したServletContextオブジェクト。
ServletContext 全体の動的なWebアプリケーションのリソースとの間のデータ共有。
ServletRequest パッケージHTTPリクエスト情報、リクエストを作成。
ServletResponseを パッケージHTTPレスポンス情報、要求を作成。

二、のServletConfigインタフェース

1.インターフェイスの概要

サーブレットを作成するための初期化コンテナサーブレット、ServletConfigオブジェクトに、オブジェクトを通過し、このサーブレットのinit()メソッドによって、オブジェクトに格納されています。コア機能:1初期情報を取得するために、2のgetのServletContextオブジェクト。

2、コードケース

  • プロファイル
<servlet>
    <init-param>
        <param-name>my-name</param-name>
        <param-value>cicada</param-value>
    </init-param>
    <servlet-name>servletOneImpl</servlet-name>
    <servlet-class>com.node02.servlet.impl.ServletOneImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletOneImpl</servlet-name>
    <url-pattern>/servletOneImpl</url-pattern>
</servlet-mapping>
  • APIの使用法
public class ServletOneImpl implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        String servletName = servletConfig.getServletName() ;
        System.out.println("servletName="+servletName);
        String myName = servletConfig.getInitParameter("my-name") ;
        System.out.println("myName="+myName);
        Enumeration paramNames = servletConfig.getInitParameterNames() ;
        while (paramNames.hasMoreElements()){
            String paramKey = String.valueOf(paramNames.nextElement()) ;
            String paramValue = servletConfig.getInitParameter(paramKey) ;
            System.out.println("paramKey="+paramKey+";paramValue="+paramValue);
        }
        ServletContext servletContext = servletConfig.getServletContext() ;
        servletContext.setAttribute("cicada","smile");
    }
}

三、のServletContextインタフェース

1.インターフェイスの概要

プロジェクトは一つだけServletContextオブジェクトを持っている、オブジェクトが複数のサーブレットで得ることができ、サーブレットは、より多くのデータを転送するために使用することができ、Tomcatの起動時に作成されたオブジェクト、Tomcatのを閉じたときに破棄されます!役割は、Webアプリケーション全体の動的リソース間の共有データにあります。

  • 入手
1、ServletConfig#getServletContext();
2、GenericServlet#getServletContext();
3、HttpSession#getServletContext()
4、ServletContextEvent#getServletContext()

2、4つのドメインオブジェクト

ServletContextは4つのドメインがJavaWebオブジェクトのいずれかです。

1、PageContext;
2、ServletRequest;
3、HttpSession;
4、ServletContext;

データを格納するために、地図内のドメインオブジェクトがあるので、すべてのドメイン・データ・オブジェクトは、アクセス機能を持っています。

3、コードケース

  • プロファイル
<context-param>
    <param-name>my-blog</param-name>
    <param-value>2019-11-19</param-value>
</context-param>
<servlet>
    <servlet-name>servletTwoImpl</servlet-name>
    <servlet-class>com.node02.servlet.impl.ServletTwoImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletTwoImpl</servlet-name>
    <url-pattern>/servletTwoImpl</url-pattern>
</servlet-mapping>
  • APIの使用法
public class ServletTwoImpl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        // 1、参数传递
        ServletContext servletContext = this.getServletContext() ;
        String value = String.valueOf(servletContext.getAttribute("cicada")) ;
        System.out.println("value="+value);
        // 2、获取初始化参数
        String myBlog = servletContext.getInitParameter("my-blog") ;
        System.out.println("myBlog="+myBlog);
        // 3、获取应用信息
        String servletContextName = servletContext.getServletContextName() ;
        System.out.println("servletContextName="+servletContextName);
        // 4、获取路径
        String pathOne = servletContext.getRealPath("/") ;
        String pathTwo = servletContext.getRealPath("/WEB-INF/") ;
        System.out.println("pathOne="+pathOne+";pathTwo="+pathTwo);
        response.getWriter().print("执行:doGet; value:"+value);
    }
}

四、のServletRequestインタフェース

1.インターフェイスの概要

HttpServletRequestのインターフェイス、カプセル化要求情報のためのServletRequestインタフェースを拡張するサーブレット・オブジェクトが作成され、サービスを渡す()メソッドサーブレット要求するたびに、ユーザは、この方法では、着信のServletRequestオブジェクトに強制されるのHttpServletRequest情報を処理するためのHTTPリクエスト。コアアクション:要求パケット情報取得; 2取得ネットワーク接続情報; 3は、属性情報要求フィールドを取得...

2、コードケース

  • プロファイル
<servlet>
    <servlet-name>servletThreeImpl</servlet-name>
    <servlet-class>com.node02.servlet.impl.ServletThreeImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletThreeImpl</servlet-name>
    <url-pattern>/servletThreeImpl</url-pattern>
</servlet-mapping>
  • APIの使用法
public class ServletThreeImpl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // http://localhost:6003/servletThreeImpl?myName=cicada
        String method = request.getMethod();
        System.out.println("method="+method); // GET
        String requestURL = request.getRequestURL().toString();
        // http://localhost:6003/servletThreeImpl
        System.out.println("requestURL="+requestURL);
        String requestURI = request.getRequestURI();
        System.out.println("requestURI="+requestURI); // /servletThreeImpl
        String queryString = request.getQueryString() ;
        System.out.println("queryString="+queryString); // myName=cicada
        String myName = request.getParameter("myName");
        System.out.println("myName="+myName); // cicada
    }
}

五、ServletResponseをインタフェース

1.インターフェイスの概要

HttpServletResponseのServletResponseを、カプセル化HTTP応答情報から継承されました。各クライアント要求は、サーバが応答オブジェクトを作成し、のServlet.serviceにパス()メソッド。コアアクション:レスポンスヘッダを設定するステップと、2つの送信ステータスコードと、本体3が応答して提供される; 4リダイレクト; ...

2、コードケース

  • プロファイル
<servlet>
    <servlet-name>servletFourImpl</servlet-name>
    <servlet-class>com.node02.servlet.impl.ServletFourImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletFourImpl</servlet-name>
    <url-pattern>/servletFourImpl</url-pattern>
</servlet-mapping>
  • APIの使用法
public class ServletFourImpl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8") ;
        response.setCharacterEncoding("UTF-8");
        response.setStatus(200) ;
        response.getWriter().print("Hello,知了");
    }
}

3、転送およびリダイレクト

  • 転送されました

制御サーバーページジャンプが行われ、

request.getRequestDispatcher("/转发地址").forward(request, response);
  • リダイレクト

ジャンプ、サーバ応答情報は、ページのブラウザがジャンプをしました。

response.sendRedirect("重定向地址");
  • 転送とリダイレクトコントラスト
違い 転送されました リダイレクト
アドレスバー 変わりません 変更
ジャンプ ジャンプサーバ ジャンプブラウザ
リクエストの数 一度 二回
ドメインデータ 失われていません 失います

第六に、送信元アドレス

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

おすすめ

転載: www.cnblogs.com/cicada-smile/p/12020195.html