コンテンツ
サーバー内のサーブレット:シングルトン、スレッドセーフではありません
1.エンコーディングを設定します
xmlファイル構成では、サーブレットは複数のマッピングに対応できます。つまり、ユーザーがマッピングにアクセスするために使用するパスを確認できます。これは、 tomcat8より前
の1つのサーブレットにのみ対応できます。 (1。配信後の場合method: request.setCharacterEncoding( "UTF-8"); (2.get転送メソッドの場合 1.最初にデータをバイト配列に変換します Stringname = request.getParameter( "name"); byte [] by = name.getBytes( "ISO-8859 -1"); 2.設定されたエンコーディング形式に従ってバイト配列を文字列に変換します name= new String(by、 "UTF-8"); tomcat8の後: postメソッドの場合のみ:request.setCharacterEncoding( "UTF -8 -8");
2.サーブレットのライフサイクル
サーバーの電源がオンになり、サーバーの電源がオフになります。
デフォルト:
リクエストが初めて受け入れられると、サーブレットは初期化(init())、インスタンス化(servce())され、
その後、更新されるたびに、 Webページを閉じ、servce()を呼び出します。サービスメソッドは
、サーバーがシャットダウンされ、サーブレットのライフサイクルが終了するまで続き、destroyメソッド(destroy())
が初めて要求されると、tomcatは次のようになります。インスタンス化、初期化、サービスが行われると、各サービスはこのインスタンスオブジェクトによって実行されます。
利点:
オブジェクトを1回だけ作成し、効率を向上させ、サーバーの負担を軽減します
短所:
最初のサービスには時間がかかり
ます。システムの起動速度を向上させる必要がある場合は、現在のデフォルト状態で問題あり
ません。サーブレットの応答速度を向上させる場合は、サーブレットの応答時間を設定する必要があります。
サーブレットの応答タイミングを設定します。
xmlのサーブレットで<load-on-startup>1</ load-on-startup>を設定して、初期化とインスタンス化の時間を設定します。初期化とインスタンス化の
時間が短いほど、初期化とインスタンス化の時間が早くなります
。サーブレットの起動時にインスタンス化が実行されます。
最初のユーザーがアクセスしたとき、直接サービスは初期化およびインスタンス化されず、起動速度は遅くなりますが、サービスの応答速度は速くなり、ユーザーエクスペリエンスが向上します。
サーバー内のサーブレット:シングルトン、スレッドセーフではありません
シングルトン:サーブレットインスタンスは1つだけ
です。スレッドセーフ:複数のスレッドがアクセスするときに、1つのスレッドがサーブレット内の変数を変更すると、他のスレッドの論理パスが変更される可能性があります。
したがって、サーブレットでロジック関連を定義しないでください。 class。variableであり、変数を変更しないでください
3.サーブレットの継承関係
HttpServlet抽象クラス後続の名前->javax.servlet.GenericServlet抽象クラスの実装->サーブレットインターフェイス
1.サーブレットインターフェースの3つの抽象メソッド
init(ServletConfig var1);初期化メソッド
void service(ServletRequest var1、ServletResponse var2);Serviceメソッドvoiddestroy
();破棄メソッド
2. javax.servlet.GenericServlet抽象クラスのメソッドは、サーブレットに3つの抽象メソッドを実装しますが、 3.インターフェースのメソッド
はHttpServlet抽象クラスに実装されています;
404:エラーで対応するページが見つかりません
405:メソッドのデフォルトのメソッドはdogetです。エラー405、メソッドエラー
500:内部サーバーエラー
200:通常の応答
302:リダイレクト
4.Httpプロトコル
httpプロトコル:ハイパーテキスト転送プロトコル
httpはステートレス
httpであり、要求と応答を含み
ます1.要求:1)を含みます。要求行2)。要求ヘッダー3)要求本文
1)要求行:
1。要求メソッド
2.要求URL3
。要求されたプロトコル:(通常はhttp1.1)
2)要求ヘッダー:
クライアントがサーバーから送信したいブラウザーのバージョン、ポート番号、要求コンテンツなどを含みます
3)要求本文:
1)Getメソッド:いいえqueryStringを使用したリクエスト本文
2)。Postメソッド:リクエスト本文フォームデータを使用
3)。JSONメソッド:リクエストペイロード
2.応答:
1)。応答行
には、プロトコル、応答コード(200)、応答ステータス
2)が含まれます。ヘッダー
には、サーバー情報(バージョン情報、)、応答コンテンツのサイズ、形式などが含まれます
。3)応答本文
特定の回答の内容と特定のページ情報。
5.セッション
httpはステートレスです:
これは、サーバーが要求が同じクライアントからのものであるかどうかを区別できないことを意味します
。ステートレスです。混乱が発生する可能性があり、サーバーはクライアントAからクライアントBに送信された要求に応答します。
httpステートレスの解決策:セッション追跡
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
HttpSession id = req.getSession();
System.out.println("创建的session id为:"+id);
}
-サーバーがクライアントを要求すると、セッションID、sessionIdがクライアントに割り当てられ、各クライアントは一意のIDを持ち、作成されたIDをクライアントに返します
-次にクライアントがサーバーにアクセスすると、sessionIdで応答します結果は応答するクライアントに返されるため、混乱が解消されます。
セッション保存スコープ:
別のセッションは、他のセッションによって保存されたコンテンツにアクセスできません
。セッションの範囲:セッションの作成からブラウザの終了まで。
6.内部サーバーの転送とリダイレクト
1.サーバー内部転送:
//测试内部请求转发
public class DemoServlet02 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo02....");
}
}
public class DemoServlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo01....");
//demo01跳转到demo02
requuest.getRequestDispatcher("demo02").forward(requuest,response);
}
}
2.クライアントリダイレクト:
public class DemoServlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo01....");
//测试内部请求转发
// requuest.getRequestDispatcher("demo02").forward(requuest,response);
//测试重定向
response.sendRedirect("demo02");
}
}
public class DemoServlet02 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo02....");
}
}