ch 05 Servlet技術


Servlet技術はJava Web開発全体の核心部分であり、Servlet開発、Filter開発、Listener開発の三つの重要な部分を含む。
1.何がServletですか
Servletは、サーバ端末(Webサーバによってローディング実行)を実行するJavaアプリケーションであり、様々なクライアント要求に対応するサービス(データベースにアクセスし、print文で動的なHTMLページを生成する)を提供する。
2.JSPとServlet
機能の観点から、ServletはJSPとほぼ同じです。しかし、編纂の角度から言って、異なるのです。Servletはある程度HTMLタグを含むJavaプログラムと見なすことができます。JSPをJavaコードを含むHTMLページとみなします。
JSPページはServletの特殊な形式であり、各JSPページは一つのServletの例である。JSPページはシステムによってServletにコンパイルされ、Servletはユーザー要求に応答することになる。
JSPとServletは以下のように変換される。
  • JSPページの静的内容、JSPスクリプトはServletのxxService()方法に変換され、セルフサービスを作成する場合のservice()方法と類似している。
  • JSP宣言は部分的にServletのメンバー部分に変換される。すべてのJSP声明の部分はprvate、rotected、public、staticなどの修饰符を使うことができます。他のところはだめです。
  • JSPの出力表現(部分)は、ServletのxxService()メソッドの出力文に変換されます。
  • 9個の内蔵オブジェクトはxxService()メソッドの変形か、あるいはこの方法の局所変数であるため、9つの内蔵オブジェクトはJSPスクリプトと出力式でしか使用できません。
  • Servletが達成できるタスク
  •  HTMLドキュメントを動的に作成します。
  • は、要求を同じウェブアプリケーション内の他のServletコンポーネントに転送する。
  • は、要求を他のWebアプリケーションのServletコンポーネントに転送する。
  • は、クライアントのCookieを読み出し、Cookieをクライアントに書き込む。
  • は、他のサーバリソースにアクセスする。
  • 3.Servlet開発
    3.1 Servlet手順を作成する
  • パッケージを作成します。
  • 使用するパケットを導入する
  • クラスの基本フレームを定義し、HttpServlet
  • を継承する。
  • 作成メンバー方法
  • 例題1ハローServlet
    //HelloServlet.java
    package cn.duzhaojiang.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HelloServlet extends HttpServlet {
      protected void doGet(HttpServletRequest req,HttpServlet Response resp)throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.setCharacterEncoding("gbk");
        PrintWriter out = resp.getWriter();
        out.println("Hello,   Servlet!");  
      }
    } 
    
    3.2 Servletの設定
    設定ファイルweb.xmlで設定する:Servletの声明、アクセス方法
    
     Servlet  
     Servlet       
    
    
     Servlet  
     /   JSP        
    
     
    
     HelloServlet
     cn.duzhaojiang.servlet.HelloServlet
    
    
     HelloServlet
     /servlet/HelloServlet
    
    3.3 Servletを呼び出す
    (test------welcome------Servlet名称)
  • アドレスバーを介してアクセスするhttp://127.0.0.1:8080/test/welcome
  • は、超チェーン形式で最初のServlet
  • にアクセスする。
  • は、フォームによって提出された方式でアクセスまたは
  • にアクセスする。
    http://localhost:8080/JavaWeb05/servlet/HelloServlet
    
    3.4 Servletライフサイクル(5ステップ)
  • は、ServletをServletエンジン(Servletキャリアとも称される)にロードする。
  • ロードが完了すると、そのinit()方法を呼び出して初期化動作を行う。
  • は、提供された応答方法によって、クライアントの要求を処理し、get方式の要求に応じて、そのdoGet方法を起動し、post方式の要求に応じて、そのdoPost方法を起動する。
  • は、destroy()方法を呼び出して廃棄操作を行う。
  • ゴミ収集器によって収集・整理する。
  • 例題2 ServletLifeCycle
    //ServletLifeCycle.java
    package cn.duzhaojiang.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class public class ServletLifeCycle extends HttpServlet {
      public void init() throws ServletException {//     
        System.out.println("Servlet   !");
      }
      protected void doGet(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
        System.out.println("Servlet  get      !");
      }
      public void destroy() {    //    
        System.out.println("Servlet  !");
      }
    } 
    は、web.xmlのServletとブラウザに下記のURLを入力し、Tomcatサーバコンソールで出力を確認するように構成されています。
    http://localhost:8080/JavaWeb05/servlet/ServletLifeCycle
    
    3.5 javax.servlet.Servletインターフェースの3つの方法
    inti()とservice()とdestroy()の方法です。
    public void init(ServletConfig config)throws ServletException
    //Servlet    ServletConfig   web.xml               Servlet。
    
    public void service(ServletRequestrequest,ServletResponse response)
     throws ServletException,java.io.IOException
    //         (ServletRequestrequest  ) Servlet   (ServletResponse response  ),           。
    
    destroy()
    //       Servlet   (Servlet    ,      ),   destory()       Servlet     。   destroy()    ,Servlet      service()           。     destory()   ,Servlet      service()  。
    3.6 HttpServlet常用方法
  • Init()初期化。
  • destroy()は資源を放出する。
  • doGet()は、クライアントのHTTP GET要求を処理する。DGetアプローチは、クライアントブラウザから直接アクセスとフォームGET方式で提出された要求のみを処理することができる。
  • doPost()クライアントを処理するHTTP POST要求。ドポトメソッドはフォームPOST方式で提出された要求しか処理できず、クライアントブラウザから直接アクセスできない。
  • service方法は、HTTP GETとHTTP POST要求を同時に処理するために用いられる。クライアントブラウザの直接アクセスとフォームGET方式で提出されたフォームとフォームPOST方式で提出されたフォームが含まれます。
  • 4.Filterフィルタ開発
    4.1フィルタ概要
    Filterの中国語訳名はフィルタです。文字通りFilterはフィルタリングに使われていることが分かります。これにより要求と応答情報が変更されます。FilterはServletではありません。応答情報を生成することができません。一つの要求が到着する前に、この要求を事前に処理することができます。また、要求が離れる前に応答を処理することもできます。フィルタにより、以下のような機能が実現されます。
    (1)不正な文字と情報をフィルタする。
    (2)統一文字コードを設定します。
    (3)ユーザーにログイン検証を行う。
    (4)画像ファイルのフォーマットを変更します。
    (5)対応する圧縮処理を行う。
    (6)XMLの出力はXSLTを用いて変換されます。
    3.2 Servletフィルタの作成
    javax.servlet.Filterインターフェースを実現する必要があり、HttpServletを継承する必要があります。主な方法:
    Ø        init(FilterConfig):初期化し、web.xmlファイルのServletフィルタの初期化パラメータを読み出します。
    Ø        dofilter(Servlet Request、Servlet Response、FilterChin):フィルタリングを完了し、パラメータFilterChinは後続のフィルタにアクセスするために使用される。
    Ø        destory():廃棄。
    FilterはServletと同じで、Java類でもあるので、その添加方式は普通のJava類と全く同じです。
     
    3.3 Filterライフサイクル(5ステップ)
    (1)サーバーが起動するとFilterをロードします。
    (2)init()は、初期化する。
    (3)ドFilter()は、ユーザ要求をフィルタリングする。
    (4)destroy()は、廃棄します。
    (5)ゴミ収集器による収集掃除。
    Servletフィルタ構成(web.xmlで構成され、フィルタの宣言、フィルタするURLに対する声明)
     フィルタの名前
     パッケージ名を含むフィルタクラス名
     
      パラメータ名
      パラメータ値
     
       フィルタの名前
       アクセスパス
     
     
    3.4 IPアドレスフィルタ
    上述のフィルタは、ユーザ要求をフィルタリングすることができ、以下の簡単な例を見て、IPフィルタを作成し、ユーザがアクセス要求を出すと、まずフィルタによって判断し、ユーザのIPアドレスが制限されている場合、アクセスを禁止する。正当なIPでなければ、アクセスを継続することができます。
    4.Listenerモニター開発
    4.1モニターの紹介
    Listenerの中国語訳名はモニターといい、文字どおりListenerは主に傍受用であることがわかる。Listenerにより、容器の中のいずれかの動作をモニターし、その要求に応じて対応することができます。現在のServlet 2.4から、全部で8つのListenerインターフェースが含まれています。これを三つの種類に分けて、それぞれ次のようにします。
    (1)Servlet Contectに関するListenerインターフェース、すなわちServletコンテキストモニター。
    (2)HttpSessionに関するListenerインターフェース、すなわちHttpセッションモニターは、HttpSession Listener、HttpSession AttributeListener、HttpSession BindingListenerとHttpSession Activation Listenerパッケージの4つのListenerインターフェースである。
    (3)ServletRequestに関するListenerインターフェース、すなわちクライアント要求モニター。
    4.2 Servletコンテキストモニター
    Servletコンテキストモニターは、Servlet Contectオブジェクトの作成と削除、および属性の追加、削除、および変更などの操作に使用されます。Servlet Contactext ListenerとServlet Contactext AttributeListenerの二つのインターフェースを含みます。
    4.3 Httpセッションモニターとクライアント要求モニター
    Httpセッションモニターは、HttpSessionオブジェクトの作成と削除および属性の追加、削除、修正のために使用され、HttpSessionオブジェクトの有効状態を傍受するためにも使用され得る。HttpSession Listener、HttpSession AttributeListener、HttpSession BindingListenerとHttpSession Activation Listenerの4つのインターフェースを含みます。
    5.実訓:オンライン人員リストを表示する
    5.1オンライン人員リストの需要説明
    ユーザーはまず登録が必要で、ユーザー登録が成功すると、ユーザーはオンライン人員リストページにジャンプし、このページには現在のすべてのオンライン人員のリストと人数統計数が表示されます。
    5.2モジュール実装
    私たちは下記の表のファイルを使って、「オンライン人員リスト需要」のコードを実現します。
    5.3機能テスト
    IEブラウザを開き、ブラウザのアドレスバーに入力します。http://localhost:8080/JavaWeb05/loginForm.jspを選択して、ユーザー登録ページを開きます。このログインページにユーザ登録情報を追加し、「ログイン」ボタンをクリックしてログインし、ページは図のようにオンライン人員リストページにジャンプします。
    前の操作を繰り返して、複数のユーザを登録します。この時、オンライン人員リストページは、図のようになります。