JAVA研究ノート18-Tomcat、サーブレット

Tomcat

Webサーバーソフトウェア

1.基本操作

1.1構成

プロジェクトをデプロイする方法:
1。プロジェクトをwebappsディレクトリに配置するだけで、デプロイが
簡素化されます。プロジェクトをwarパッケージにマークしてから、warパッケージをwebappsの下に配置します。2。Hostタグで
conf /server.xmlファイルを構成します。
body
<Context doBase = "プロジェクトストレージパス" path = "仮想ディレクトリ" />
3. conf \ Catalina \ localhostに任意の名前のxmlファイルを作成します。xmlファイルのファイル名であっても、ファイル
<Context doBase = "Projectstoragepath">
仮想ディレクトリに書き込みます

静的プロジェクトと動的プロジェクト:
Java動的プロジェクトのディレクトリ構造:
プロジェクトルートディレクトリ->
WEB-INFディレクトリ->
web.xml:Webプロジェクトコア構成ファイル
クラスディレクトリ:バイトコードファイルが
配置されるディレクトリlibディレクトリ:場所に依存するjarパッケージ

IDEAに統合されたTomcat:

サーブレット

1.基本的な考え方

サーバーアプレット、サーバー側で実行される小さなプログラム。本質的に、サーブレットは、ブラウザがアクセスするJavaクラスのルールを定義するインターフェイスです(Tomcat認識)。

2.クイックスタート

web.xmlでサーブレットを構成する

    <!--配置Servlet-->
    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>demo01.ServletDemo1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>demo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>

アノテーションを使用して構成します:
@WebServlet( "/ demo")

サーブレットインターフェースを実装する

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    
        System.out.println("Hello World");
    }

3.サーブレット実行の原則

1.サーバーがクライアントブラウザからリクエストを受信すると、サーバーはリクエストURLパスを解析して、サーブレットにアクセスするためのリソースパスを取得します
。2。対応する<url-pattern>タグ本体があるかどうか、web.xmlファイルを見つけます。 content3
。その場合対応する<servlet-class>の完全なクラス名を探しています4.Tomcat
はバイトコードファイルをメモリにロードし、そのオブジェクトを作成します
5.そのメソッドを呼び出します

4.サーブレットのライフサイクル

4.1作成

デフォルトでは、サーブレットは初めてアクセスされたときに作成されます
。publicvoid init(ServletConfigサーブレットConfig):初期化メソッド。サーブレットの作成時に実行され、1回だけ実行され
ます。初めてアクセスされたときに作成されます:<load-on-startup>は負の数
です。サーバーの起動時に作成されます:<load-on-startup> 0または負の数です。

4.2サービス


public void service(ServletRequest servletRequest、ServletResponseサーブレットレスポンス)、サーブレットメソッドにアクセスするたびに呼び出されます。サービスメソッドを提供し、サーブレットにアクセスするたびに実行され、複数回実行されます。

4.3破壊

サーブレットが破棄されたときに実行されます。サーバーがシャットダウンすると、サーブレットは破棄されます。destroyメソッドは、サーバーが正常にシャットダウンされた場合にのみ実行されます。destroyメソッドは、サーブレットが破棄される前に実行され、通常はリソースを解放するために使用され
ます。publicvoid destroy():サーバーが正常にシャットダウンされると、destroyメソッドが1回実行されます。

4.4その他

public ServletConfig getServletConfig():ServletConfigオブジェクトを取得します
public String getServletInfo():サーブレット情報、バージョン、作成者などを取得します。

5.アーキテクチャ

5.1インターフェース

サーブレットインターフェイス
GenericServlet-抽象クラス
サーブレットインターフェイスの他のメソッドは空で実装され、service()のみが抽象として使用され
ます。将来サーブレットクラスが定義されると、GenericServletを継承でき、service()メソッドを継承できます。実装されました。

@WebServlet("/demo2")
public class ServletDemo02 extends GenericServlet {
    
    
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    
        System.out.println("demo2");
    }
}

HttpServlet-操作を簡素化するためにhttpプロトコルのカプセル化
を使用
することを推奨する抽象クラス1.HttpServlet
を継承するクラスを定義します
2.doGet / doPostを書き直します

@WebServlet("/demo3")
public class ServletDemo03 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");
    }
}

HTTP

1.基本的な考え方

ハイパーテキスト転送プロトコル
:クライアントとサーバーが通信するときの送信モードを定義します。
機能:
1。TCP/ IPに基づく高度なプロトコル
2.デフォルトのポート番号803.
要求/応答モデルに基づく:1つの要求が1回限り対応応答
4.ステートレス:各要求は互いに独立しており、データを交換できません

2.データフォーマット

2.1リクエストメッセージのデータ形式

リクエストライン
リクエストメソッドリクエストURLリクエストプロトコル/バージョン
取得
1.リクエストパラメータはURLの後のリクエストラインにあります
2.リクエストされたURLの長さは制限されてい
ます3.安全性が低い
投稿
1.リクエストメソッドはリクエスト本文にあります
2 。要求されたURL長さに制限はありません。3
。比較的安全な
要求ヘッダー。
要求ヘッダー名:要求ヘッダー値
要求空白行
を個別の
要求本文
要求パラメーターとして

3.リクエスト

3.1要求と応答の原則

1. Tomcatサーバーは、リクエストyrlのリソースパスに従って対応するServletDemoオブジェクト
を作成します。2。TomcatサーバーはRequestオブジェクトとResponseオブジェクトを作成し、リクエストとメッセージのデータ
Requestオブジェクトにカプセル化されます。3。TomcatはRequestオブジェクトとResponseオブジェクトをServiceメソッドに渡し、
4を呼び出します。プログラマーは、Requestオブジェクトを介して要求メッセージデータを取得し、Responseオブジェクトを介して応答メッセージデータを設定できます。

3.2リクエストメッセージを取得する

3.2.1リクエスト行データの取得

Get request method:String getMethod()
Get virtual directory:String getContextPath()
Get Servlet path:getServletPath()
Get get method request parameter:String getQueryString()
Get request uri:String getRequestURI()
Get protocol and version:String getProtocol()
クライアントのIPアドレスを取得します。StringgetRemoteAddr()

3.2.2リクエストヘッダーデータの取得

String getHeader(String name):リクエストヘッダーの名前に従ってリクエストヘッダーの値を取得します
Enumeration <String> getHeaderNames():すべてのリクエストヘッダー名を取得します

3.2.3リクエスト本文データの取得

ストリームオブジェクトを取得し、ストリームオブジェクトからデータを取得します

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取请求消息体
        //获取字符流
        BufferedReader br = request.getReader();
        //读取数据
        String line=null;
        while ((line=br.readLine())!=null){
    
    
            System.out.println(line);
        }
    }

3.3その他の機能

3.3.1リクエストパラメータを取得する一般的な方法

String getParameter(String name):パラメータ名に従ってパラメータ値を取得します
String [] getParameter(String name):パラメータ名に従ってパラメータ値の配列を取得します
Enumeration <String> getParameterNames():要求されたすべてのパラメータを取得します名前
Map <String、String []> getParameterMap():すべてのパラメーターのMapコレクションを取得します

3.3.2リクエストの転送

サーバー内でのリソースジャンプの方法
手順:
1。リクエストオブジェクトを介してリクエストフォワーダーオブジェクトを取得します
2.オブジェクトを使用して転送します

@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("Hello Servlet demo2");
        //转发到RequestDemo3
        request.getRequestDispatcher("/requestDemo3").forward(request,response);
    }

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

機能:
1。ブラウザのアドレスバーのパスは変更されません
2.現在のサーバーの内部リソースにのみ転送できます
3.転送はリクエストです

3.3.3データ共有

ドメインオブジェクト:スコープ内でデータを共有できるスコープを持つオブジェクト
リクエストドメイン:リクエストのスコープ。通常、転送をリクエストする複数のリソース間でデータを共有するために使用されます
setAttribute(String name、Object obj):store data
getAttribute(String name ):キーで値を取得
removeAttribute(String name):キーでキーと値のペアを削除

@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("Hello Servlet demo2");
        //存储数据到request域中
        request.setAttribute("msg","hello");
        //转发到RequestDemo3
        request.getRequestDispatcher("/requestDemo3").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request,response);
    }
}
@WebServlet("/requestDemo3")
public class RequestDemo3 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取数据
        Object msg = request.getAttribute("msg");
        System.out.println(msg);
        System.out.println("Hello Servlet demo3");
    }

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

3.3.4ServletContextの取得

getServleContext()

4.応答

4.1応答メッセージのデータ形式

1.応答行の
構成:プロトコル/バージョン応答コードステータスステータスの説明
応答ステータスコード:サーバーはクライアントブラウザにこの要求と応答のステータスを通知します
2.応答ヘッダー
3.応答空白行
4.応答本文

4.2機能

4.2.1応答ラインの設定

形式:HTTP / 1.1 200 ok
ステータスコードの設定:setStatus(int sc)

4.2.2応答ヘッダーを設定する

setHeader(String name、String value)

//完成重定向
@WebServlet("/responseDemo1")
public class ResponseDemo1 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("demo1");
/*        //访问这个资源会自动跳转到Demo2
        //设置状态吗为302
        response.setStatus(302);
        //设置响应头为location
        response.setHeader("location","/Day20/responseDemo2");*/
        response.sendRedirect("/Day20/responseDemo2");
    }

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

リダイレクト機能:
1。アドレスバーが変更されます
2.リダイレクトは他のサイトのリソースにアクセスできます
3.リダイレクトは2つの要求です。リクエストオブジェクトを使用してデータを共有することはできません

転送の機能:
1。転送バーのパスは変更されません
。2。転送は現在のサーバーの下のリソースにのみアクセスできます。3。
転送は要求です。リクエストオブジェクトを使用してデータを共有できます

仮想ディレクトリを動的に取得します:
request.contextPath()
コードを設定します:
response.setContentType( "text / html; charset = utf-8")

4.2.3応答本体を設定する

手順を使用します
。1。出力ストリームを取得します
。2。出力ストリームを使用してデータをブラウザーに出力します。

5. ServeletContext

5.1基本概念

Webアプリケーション全体を表し、プログラムのコンテナと通信できます

5.2オブジェクトを取得する

リクエストを介して取得:getServletContext();
HttpServlet介して取得:getServletContext();

5.3機能


1.MIMEタイプの取得StringgetMimeType(String file)
2。ドメインオブジェクト:共有データ
setAttribute(String name、Object value)
getAttribute(String name)
removeAttribute(String name)
ServletContextオブジェクトスコープ:すべてのユーザーから要求されたすべてのデータ
3.ファイルの取得実パス
getRealPath(String name)

おすすめ

転載: blog.csdn.net/qq_44708714/article/details/107434728