Java web Cookie
クッキーとは何ですか?
アリストテレス辞書で検索してください:
ウェブとビスケットの関係は?
この謎の答えは後ほど明らかになります。
会話技術
ウェブにおけるセッション技術は、2人がチャットするのと似ていますが、ウェブにおけるセッションは、サーバーとクライアントの間の相互作用を指します。
セッションには複数のリクエストとレスポンスが含まれます。ブラウザがサーバにリクエストを送信すると、一方が切断するまでセッションが確立され、セッションは終了します。機能:1つのセッションの範囲内で、複数のリクエスト間でデータを共有することができる どういうことか、ショッピングカートで説明します。
1.ブラウザでは、多くの場合、次のようなデータの交換を伴う:あなたがページにログインします。多くの場合、自動ログインオプションを設定します。その後、彼らは情報を記憶するためにクッキーを介している、クッキーは、ブラウザに保存された子のHTTPサーバーの社長によるものですが、HTTPプロトコルは、データ交換が完了すると、サーバーとクライアントのリンクのステートレスプロトコルの一種であり、データの交換は、新しいリンクを確立する必要があるたびに閉じられます。クッキーはポイントカードのようなものです、ポイントを保存することができます、商品は情報です、スーパーマーケットのシステムは、サーバーのバックエンドのようなものです、HTTPプロトコルは、トランザクションのプロセスです。
cookie
はクライアント側のセッション技術で、データをクライアントの
クッキーの長所と短所:1.データをクライアントに保存し、サーバーのストレージへの負担を軽減しながら、非常に便利です。 2.保存データの数とサイズに制限があります。
機能クッキーは、機密性の低い少量のデータを保存するために使用され、ログインせずにクライアントを識別するために使用することができます。
クッキーの使用方法
1.クッキー・オブジェクトの作成 2.クッキー・オブジェクトの送信 3.サーブレット1によるクッキー・オブジェクトの取得 4.サーブレット2によるクッキー・オブジェクトの取得
サーブレット1
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.ie;
import javax.servlet.http.et;
import javax.servlet.http.st;
import javax.servlet.http.se;
import java.io.IOException;
@WebServlet("/demo1")
public class Servlet1 extends HttpSet {
@Override
protected void doPost(HttpS req, HttpS resp) throws ServletException, IOException {
//クッキーを作る
Cookie cookie = new Cookie("name", "tanakasan");
resp.addCookie(cookie);
}
@Override
protected void doGet(HttpS req, HttpS resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
サーブレット2
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.ie;
import javax.servlet.http.et;
import javax.servlet.http.st;
import javax.servlet.http.se;
import java.io.IOException;
@WebServlet("/demo2")
public class Servlet2 extends HttpSet {
@Override
protected void doGet(HttpS req, HttpS resp) throws ServletException, IOException {
//クッキーを手に入れる
Cookie[] cookies = req.getCookies();
if (cookies!=null){
for (Cookie cookie : cookies) {
//クッキーの値と名前を取得する
String value = cookie.getValue();
String name = cookie.getName();
System.out.println(name+":"+value);
}
}
}
@Override
protected void doPost(HttpS req, HttpS resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
クッキーへの対応
リクエスト・クッキー、他の2つのクッキーはここでは説明しません。
イラスト
クッキーに関する問題
1.複数のクッキーを送信する実装方法2.クッキーをブラウザに保存できる期間4.クッキーの共有問題
1.複数のクッキーを送信する方法
レスポンスオブジェクトを使ってaddCookieメソッドを呼び出し、クッキーを送信するだけです。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.ie;
import javax.servlet.http.et;
import javax.servlet.http.st;
import javax.servlet.http.se;
import java.io.IOException;
@WebServlet("/demo1")
public class Servlet1 extends HttpSet {
@Override
protected void doPost(HttpS req, HttpS resp) throws ServletException, IOException {
//クッキーを作る
//最初のクッキーを作る
Cookie cookie = new Cookie("name", "tanakasan");
//最初のクッキーを送る
resp.addCookie(cookie);
//2つ目のクッキーを作る
Cookie id = new Cookie("id", "1");
//2つ目のクッキーを送る
resp.addCookie(id);
}
@Override
protected void doGet(HttpS req, HttpS resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.ie;
import javax.servlet.http.et;
import javax.servlet.http.st;
import javax.servlet.http.se;
import java.io.IOException;
@WebServlet("/demo2")
public class Servlet2 extends HttpSet {
@Override
protected void doGet(HttpS req, HttpS resp) throws ServletException, IOException {
//クッキーを手に入れる
Cookie[] cookies = req.getCookies();
//クッキーの配列を繰り返し処理する
if (クッキー!=null){
for (Cookie cookie : cookies) {
//クッキーの値と名前を取得する
String value = cookie.getValue();
String name = cookie.getName();
System.out.println(name+":"+value);
}
}
}
@Override
protected void doPost(HttpS req, HttpS resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
クライアントディスプレイIDEAプリント
2.クッキーはどのくらいの期間ブラウザに保存されますか?
デフォルトでは、クッキーのデータはブラウザが閉じられた後に破棄されます。 あなたは、クッキーの保存時間を設定するsetmaxageメソッドを呼び出すことができます 1.secondは正の数、クッキーはハードドライブに永続的に書き込まれ、ストレージの時間を指定し、時間が経過すると、クッキーは自動的に無効になります 2.secondはゼロ、クッキーを削除します 3.secondがゼロより小さい場合、デフォルト値は、ブラウザを閉じた後、クッキーを削除することです。
例えば、以下のコードを使ってクッキーにデータを追加してクッキーを送信すると、ブラウザはクッキーにスペースが追加されているためエラーを報告します。
Cookie cookie = new Cookie("name", " ");
//最初のクッキーを送る
resp.addCookie(cookie);
そこで、urlエンコーディングを使ってデータを制御する必要があります。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.ie;
import javax.servlet.http.et;
import javax.servlet.http.st;
import javax.servlet.http.se;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
@WebServlet("/demo1")
public class Servlet1 extends HttpSet {
@Override
protected void doPost(HttpS req, HttpS resp) throws ServletException, IOException {
//レスポンス・メッセージ・ボディのデータ形式とエンコーディングを設定する
resp.setContentType("text/html;charset=utf-8");
//クッキーを作る
//最初のクッキーを作る
String name=" ";
//URL
name= URLEncoder.encode(name,"utf-8");
Cookie cookie = new Cookie("name", name);
resp.addCookie(cookie);
}
@Override
protected void doGet(HttpS req, HttpS resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.ie;
import javax.servlet.http.et;
import javax.servlet.http.st;
import javax.servlet.http.se;
import java.io.IOException;
import java.net.URLDecoder;
@WebServlet("/demo2")
public class Servlet2 extends HttpSet {
@Override
protected void doGet(HttpS req, HttpS resp) throws ServletException, IOException {
//クッキーを手に入れる
Cookie[] cookies = req.getCookies();
//クッキーの配列を繰り返し処理する
if (クッキー!=null){
for (Cookie cookie : cookies) {
//クッキーの値と名前を取得する
String value = cookie.getValue();
String name = cookie.getName();
//
System.out.println(name+":"+value);
//
System.out.println(name+":"+ URLDecoder.decode(value,"utf-8"));
}
}
}
@Override
protected void doPost(HttpS req, HttpS resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
結果
もうエラーはありません。
Cookie課題の共有
1.Tomcatサーバに配備された複数のウェブ・プロジェクトがあると仮定して、これらのプロジェクト間でクッキーの共 有を実現する方法 デフォルトでは、共有することはできませんが、setpath()メソッドを呼び出して、クッキー取得の範囲を設定することができます デフォルトでは、現在の仮想ディレクトリが設定されます * 共有したい場合は、パスを"/"に設定します。
//レスポンス・メッセージ・ボディのデータ形式とエンコーディングを設定する
resp.setContentType("text/html;charset=utf-8");
//クッキーを作る
//最初のクッキーを作る
String name=" ";
//URL
name= URLEncoder.encode(name,"utf-8");
Cookie cookie = new Cookie("name", name);
//パスを設定することで、現在のサーバー配下にあるすべてのプロジェクトが、クッキーの情報を共有できるようになる
//に設定する。/「共有できる
cookie.setPath("/");
resp.addCookie(cookie);
//レスポンス・メッセージ・ボディのデータ形式とエンコーディングを設定する
resp.setContentType("text/html;charset=utf-8");
//クッキーを作る
//最初のクッキーを作る
String name=" ";
//URL
name= URLEncoder.encode(name,"utf-8");
Cookie cookie = new Cookie("name", name);
//異なるサーバー間でクッキー情報を共有できるようにパスを設定する
//例えば、ドメイン名を"..com"クッキーを共有できる
cookie.setDomain("..com");
resp.addCookie(cookie);