JAva-webサーブレット学習

8068 ワード

サーブレットインタフェース:
  • サーブレットの主な方法:
  • init()--ServletConfig
    servletがインスタンス化されると、コンテナはまずinitメソッドを呼び出し、オブジェクトを初期化します.すなわち、お客様のニーズを処理する前に初期化作業を完了します.サーブレットインスタンスごとにinitはjavaのstaticブロックに相当する1回しか呼び出されません.サーブレットは、サーブレットコンフィギュレーションオブジェクトを使用して、Webアプリケーションの構成情報からキー値ペアとして提供される初期化パラメータを取得します.サーブレットはサーブレットコンフィグオブジェクトを使用してサーブレットContextオブジェクトを取得し、サーブレットContextを使用してサーブレットとサーブレットコンテナを通信します.
    service()--ServletRequest ServletResponse
    コンテナはサービス()メソッドを呼び出して顧客の要求を処理します.サービスメソッドの前にinitメソッドが正しく完了していることを確認する必要があります.コンテナは、要求オブジェクトサーブレットRequestと応答オブジェクトサーブレットResponseをパラメータとしてサービス()に渡す.
    destroy():
    このメソッドは、コンテナがサーブレットオブジェクトがサービスから削除されたことを検出すると呼び出されます.GCへのリソースの解放
    getServletConfig()
    サーブレットconfigオブジェクトを返す
    getServletInfo()
    サーブレット情報を含む文字列を返します
  • サーブレット作成の3つの方法
  • 1つはサーブレットインタフェースを実現することである.2つ目は抽象クラスGenericServiceletを継承することである.三つ目はHttpServeretクラスの継承
    --サーブレットインタフェースを実装するには、サーブレットの5つの方法を実装する必要があります.
    public class TestServlet implements Servlet{
    public void init(ServletConfig config) throws
    ServletException{
    System.out.println("init");
    }
    public ServletConfig getServletConfig(){
    return null;
    }
    public void service(ServletRequest req, ServletResponse res) throws ServletException,IOException{
    //              
    PrintWriter out = response.getWriter();
    out.println("Hello World!");
    }
    public String getServletInfo(){
    return null;
    }
    public void destroy(){
    System.out.println("destroy");
    }
    }
    

    --抽象クラスGenericServiceletを継承します.GenericServicesクラスには、サービス(ServiceRequest req,ServiceResponse res)という抽象的なメソッドが1つしかありません.
    public TestGenericServlet extends GenericServlet{      
    public abstract void service(ServletRequest req,ServletResponse res)                        
    throws ServletException,IOException{       
    PrintWriter out = response.getWriter();       
    out.println("Hello World!");                            
    }
    }
    

    --HttpServletクラスを継承してServletを記述するのは最も簡単で、最も一般的なことです.一般的には、Servletを記述してこのクラスを直接継承すればいいので、doGet()またはdoPost()メソッドを書き換えるだけでいいです.
    public TestHttpServlet extends HttpServlet{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{
    response.setContentType("text/html;charset = gb2312");
    PrintWriter out = response.getWriter();
    out.println("");
    out.println("");
    out.println("HelloWorld");
    out.println("");
    out.println("");
    out.println(“
    ”); out.println("HelloWorld"); out.println(""); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ doGet(request, response); } }

    HttpServiceletの詳細
    HttpServeretRequest,HttpServeretResponse詳細
    HttpServiceRequest:String getContextPath()は、/simple/test戻り/simple Cookie[]getCookies()は、今回要求されたすべてのCookieオブジェクトString getHeader()が要求ヘッダを返す値String getMethod()は、post get TraceなどのString getPathInfo()のような、今回要求されたHTTPメソッドの名前を返します.追加url情報を返します.たとえば、/simple/testはtest String getPathTranslated()を返します.String getQueryString()のような実際のパス情報を返します.要求されたaction名を返します.たとえば、logonを返します.
    HttpSession getSession()は、今回のリクエストに関連付けられたsession HttpSession Response:void addCookie(Cookie cookie)に応答に新しいcookieを返し、複数設定できます.addheader(String name,String value)は、与えられたname and valueで応答ヘッダを追加して応答中にsendRedirect(String location)に行ってクライアントに一時的なリダイレクトを送信し、クライアントがアクセスするurlを再配置させる
    ServletConfig
    servletコンテナサーブレットコンフィグオブジェクトを使用してコンテナの初期化時にコンフィギュレーション情報を渡す4つの主な方法:String getInitParameter(String name)はnameという名前の初期化パラメータの値を返し、初期化パラメータはコンフィギュレーションファイルweb.xmlでEnumeration getInitParameterName()を構成するサーブレットのすべての初期化パラメータ名を返す列挙セットサーブレットContext getServertContext()サーブレットコンテキストオブジェクトを返すリファレンスString getServertName()現在のサーブレットの名前を返す
    サーブレット構成
    Web.xml:Webアプリケーションの構成と導入は、次の情報を含むWeb.xmlによって行われます.
    サーブレットContextの初期化パラメータSessionの構成サーブレット/Jspの定義MIMEタイプマッピングウェルカムファイルリストエラーページセキュリティエリアとエンコードマッピングJSP構成
    postとget方式
    メッセージヘッダ
    サーブレットライフサイクル
    サーブレットコンテキスト
    Java仮想マシンで実行される各Webプログラムには、関連するサーブレットコンテキストがあります.java servlet APIは、コンテキストを表すservletContextインタフェースを提供します.1つのサーブレットContextオブジェクトは、最初のインスタンスの間、サーブレットコンテナがservletConfigオブジェクトを渡し、そのgetサーブレットContext()を介してコンテキストを取得するWebプログラムのコンテキストを表します.
    コンテキスト例:統計ページアクセス量:ここのコンテキストはセキュリティロックに入れなければならないことに注意してください.
    public class CountDemo extends HttpServlet{
    
    public void doGet(HttpServletRequest req, HttpServletResponse res)throws     ServletException,IOException{
    ServletContext context = getServletContext();
    //Enumerationcount = context.getAttributeNames();
    Integer count = null;
    synchronized(context){
    count = (Integer)context.getAttribute("counter");
    if(null == count){
    count = new Integer(1);
    }else{
    count = new Integer(count.inValue()+1);
    }
    context.setAttribute("counter", count);
    }
    res.setContentType("text/html;charset=gb2312");
    PrintWriter pw = res.getWriter();pw.println("");
    pw.println("      ");
    pw.println("");
    pw.println("           :"+""+count+""+"  ");
    pw.println("");
    pw.close();
    }
    }
    

    サーブレットリクエスト転送
    メリット:
  • は、統合されたアクセス方式
  • を提供する.
  • コントローラは、異なる要求を異なるサーブレットに送信して処理することができ、それ自体が要求を処理することなく、応答時間
  • を短縮することができる.
    RequestDispacher:servletコントローラ
    RequestDispacherオブジェクトは、パスによって識別されるサーバリソースをカプセル化するサーブレットによって作成されます.主に次の2つの方法があります.
  • forward(サーブレットRequest req,サーブレットResponse res):このメソッドは、サーバ上の別のサーブレットjspページに要求を渡すために使用されるか、HTMLファイルに注意してください.このメソッドは、応答がクライアントに送信される前に使用する必要があります.その後、IllegastateExceptionエラーが爆発し、forward()呼び出し後、応答キャッシュにコミットされなかったコンテンツは自動的に消去されます.
  • include(サーブレットRequest req,サーブレットResponse res)この方法は、応答に他のリソース情報(servlet jsp html)などのコンテンツを含むために使用される.
  • この2つの方法の違いは、includeが要求を他のオブジェクトに転送すると、呼び出されたサーブレットの応答が元の応答オブジェクトに組み込まれ、元のサーブレットオブジェクトは応答データの出力を継続することもできる.forwardが要求を他のオブジェクトに転送すると、呼び出されたサーブレットオブジェクトが応答し、元のサーブレット実行が終了する.
  • RequestDispacheオブジェクトの取得には、サーブレットRequest.getRequestDispacher(String path)--リソースパス名--サーブレットContext.getNamedDispacher(String name)--jspまたはservlet名--サーブレットContext.getRequestDispacher(String path)--現在のコンテキストルートに対するパスの先頭/先頭から/MyService
  • などの3つの方法があります.
    転送を要求するインスタンス
    package com.tide.servlet;import java.io.IOException;
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.commons.lang3.StringUtils;
    public class Login extends HttpServlet {
    public void doPost(HttpServletRequest     req,HttpServletResponse res)throws     ServletException,IOException{
    res.setContentType("text/html;charset=GB2312");
    ServletContext context = getServletContext();
    String name = req.getParameter("user");
    String pass = req.getParameter("passwd");
    System.out.println("         :"+name+"  --    :"+pass);
    if(StringUtils.isBlank(name) || StringUtils.isBlank(pass)){
    System.out.println("        ");
    RequestDispatcher dis = context.getRequestDispatcher("/register.jsp");
    dis.forward(req, res);
    }
    else{
    RequestDispatcher dis = context.getRequestDispatcher("/loginsuccess.jsp");
    dis.forward(req, res);
    }
    }
    }
    

    下位分析:
    要求転送(RequestDispatcher)のプロセス:お客様はまずサービス側に要求を送信し、サービス側は一致するサーブレットを発見し、実行するように指定します.このサーブレットが実行された後、getRequestDispatcher()を呼び出します.メソッドは、リクエストを指定したtest.jspに転送し、プロセス全体がサービス側で完了し、同じリクエストで完了するため、サーブレットとjspは同じrequestを共有し、サーブレットの中に置かれているすべてのものをjspで取り出すことができるので、jspは結果をgettribute()出し、getAttribute()出てきたら結果をクライアントに返します.プロセス全体が要求であり、応答です.
    リダイレクトの動作原理
    お客様はサーバにリクエストを送信し、サーバはサーブレットに一致します.これはリクエスト転送と同じです.サーブレット処理が完了するとsendRedirect()というメソッドが呼び出されます.このメソッドはresponseのメソッドです.したがって、このサーブレット処理が完了するとresponse.sendRedirect()が表示されます.方法、直ちにクライアントにこの応答を返して、応答行はクライアントにこの要求を受けたことを教えた後、すぐに新しい要求を出して、test.jspを要求して、ここの2つの要求、この2つの要求は互いに干渉しないで、互いに独立して、サブああ前のrequestの中でsettattribute()のいかなるものを出して、後ろのrequestの中ですべて獲得できません.中には2つのリクエストがあり、2つの応答があります.