[セットトップ]JavaWeb初級学習のサーブレット


1.サーブレットの2つのインタフェース
サーブレットコンフィグ代表:サーブレットの構成情報
機能:
1)サーブレットの友好名称を取得する
String servletName = config.getServletName();

2)サーブレットの初期化パラメータの取得
 Web.xmlファイルで構成されていることを前提とします.
<servlet>
	<servlet-name>ServletConfServlet</servlet-name>
	<servlet-class>com.atguigu.servlet.ServletConfServlet</servlet-class>
	<init-param>
		<param-name>username</param-name>
		<param-value>admin</param-value>
	</init-param>
</servlet>

取得
String initParameter = config.getInitParameter("username");

 3)サーブレットContextの取得
ServletContext servletContext = config.getServletContext();

サーブレットContext代表:現在のWebアプリケーション
機能:
1)現在のWebアプリケーションの初期化パラメータを取得する
//Web            ,  Servlet     
String initParameter2 = servletContext.getInitParameter("encode");

Web.xmlファイルで構成されていることを前提とします.
<!--     Web         -->
<context-param>
	<param-name>encode</param-name>
	<param-value>utf-8</param-value>
</context-param>
//Web            ,  Servlet     
String initParameter2 = servletContext.getInitParameter("encode");

2)サーバ側リソースの実際のパスの取得
String realPath = servletContext.getRealPath("/index.html");

3)ドメインオブジェクトとして存在する
2.要求と応答
HttpServletRequest request         代表:requestは、ブラウザがサーバに送信するリクエストメッセージを表します.このオブジェクトは、サーバによって作成され、doGetメソッドとdoPostメソッドにパラメータとして渡されます.2つのメソッドで直接使用できます.
        機能:
       
    1)要求パラメータの取得
String userName = request.getParameter("username");
String password = request.getParameter("password");

           
2)現在のWebアプリケーションのパスを取得する
String contextPath = request.getContextPath();

            3)転送
//     
RequestDispatcher requestDispatcher = request.getRequestDispatcher("success.html");
//  
requestDispatcher.forward(request, response);

           
4)ドメインオブジェクトとして存在
    HttpServletResponse response         代表:responseは、サーバによって作成され、doGetメソッドとdoPostメソッドにパラメータとして渡されるサーバからブラウザに送信される応答メッセージを表します.2つのメソッドで直接使用できます.
        機能:
         
  1)ブラウザにページまたはページのクリップを応答する
PrintWriter writer = response.getWriter();
writer.write("<h1>Response Success!</h1>");

           
2)リダイレクト
response.sendRedirect("success.html");

    転送とリダイレクトの違い
①一度送信要求を転送する.リダイレクト要求を2回送信
②転送ブラウザのアドレス欄に変化がない;リダイレクトブラウザのアドレスバーが変更されました
③WEB-INFにアクセスできるリソースを転送する.WEB-INFでのリソースにアクセスできないリダイレクト
④requestドメインオブジェクトで共有できるリソースを転送する.リダイレクトrequestドメインオブジェクトのリソースを共有できません
3.Webアプリケーションにおけるパスの問題    相対経路が頼りにならない
        転送の場合、アドレスバーに変化がないとブラウザでアドレス解析エラーが発生するため、相対パスは推奨されず、絶対パスは推奨されません.
    絶対パス
        絶対パスとは
        絶対パスの/は何を表しますか?
            アドレスがブラウザによって解決された場合:
               /現在のサーバを表します.たとえば、次のようにします.http://localhost:8080
                それらのアドレスはブラウザで解析されますか?
                    1)htmlタグのパス:たとえばimgタグの額src属性、aタグのhref属性、linkタグのhref属性、scriptのsrc属性、formタグのaction属性
                    2)リダイレクト中のパス
            アドレスがサーバによって解決された場合:
               /現在のWebアプリケーションを表します.次に例を示します.http://localhost:8080/Web01_Servlet_Ex
                それらのアドレスはサーバによって解析されますか?
                    1)web.xmlの/LOginServiceのパス
                    2)転送中のパス
4.中国語の文字化けし問題    エンコーディング:文字をバイナリに変換
    デコード:バイナリを文字に変換するには
    文字化けし:符号化と復号化で使用される文字セットが一致しないと文字化けし
    要求文字化け        ブラウザをサーバに送信:
            ブラウザコード:ブラウザコードで使用される文字セットはhtmlページで指定された文字セットです.
            サーバデコード:サーバのデフォルト文字セットはISO-8859-1
            すべてが文字化けした
            ソリューション:
               
POSTリクエストの場合
//                  
request.setCharacterEncoding("utf-8");

             
  GETリクエストに対して
                POSTリクエストを使用する方法は使用しません.
                    Getリクエストのリクエストパラメータはアドレスバーにあり、サーブレットに到達する前にサーバによって解析されているので、サーブレットに文字セットを設定しても無駄です
                    Getリクエストの文字化けしの問題はserver.xmlの最初のConnectorラベルに属性を追加する必要があります:URIEncoding="UTF-8"
    レスポンス文字化け        サーバがブラウザに送信
            サーバーコード:サーバーのデフォルトの文字セットはISO-8859-1です.
            ブラウザデコード:デフォルトではGBKを使用してデコードされます
            ソリューション:
                応答ヘッダを設定してブラウザにUTF-8文字セットを使用して復号するように伝える
//      
response.setHeader("Content-Type", "text/html;charset=utf-8");
//  ContentType
response.setContentType("text/html;charset=UTF-8");

            レスポンスヘッダに文字セットが設定されている場合、サーブレットも設定された文字セットを使用して符号化されます.