1.一度に複数のCookieを送信できますか
回答:はい!複数のcookie
オブジェクトを作成できます。メソッドを使用してresponse
複数回呼び出しaddCookie
て送信cookie
するだけです。次の実験を行います。
2つ作成HttpServlet
し、最初の1つをHttpServlet
送信しますCookie
。
@WebServlet("/cookieDemo3")
public class CookieDemo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//新建三个cookie,并通过response发送出去
Cookie cookie1 = new Cookie("msg","hello");
Cookie cookie2 = new Cookie("name","zhangsan");
Cookie cookie3 = new Cookie("sex","male");
response.addCookie(cookie1);
response.addCookie(cookie2);
response.addCookie(cookie3);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
2つ目はHttpServer
、受け入れcookie
て、コンソールに出力します。
@WebServlet("/cookieDemo2")
public class CookieDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//3. 获取Cookie,拿到数据
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name + " : " + value);
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
サーバーを実行すると、コンソール出力は次のようになります。
2.ブラウザに保存されるCookieの長さ
デフォルトでは、ブラウザを閉じるとCookie
データは破棄されます。
しかしCookie
、永続ストレージを設定することはできます、彼にはsetMaxAge(int seconds)
方法があります
このメソッドのパラメーターには、次の3つの状況があります。
- 正の数:
Cookie
永続ストレージ用にハードディスク上のファイルにデータを書き込みます。この正のパラメーターはcookie
存続時間です。 - 負の数:デフォルト値。あまり意味がありません。
- ゼロ:削除された
Cookie
情報
パラメータが正の数の場合を示しましょう。
新しいものを作成しHttpServlet
、永続ストレージ時間をに設定して1000秒
、以下を送信します。
@WebServlet("/cookieDemo4")
public class CookieDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//新建一个Cookie,并设置持久化存储时间为1000秒
Cookie cookie = new Cookie("msg","hello");
//设置持久化存储时间
cookie.setMaxAge(1000);
//发送cookie
response.addCookie(cookie);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
サーバーを実行し、最初にアクセス/cookieDemo4
してからアクセスし/cookieDemo2
(これはcookie
コンソールに情報を出力するためです)、ブラウザーを閉じて再度開きcookieDemo2
ますcookie
。次の
2つのアクセス結果も取得できます。
3.クッキーは中国語で保存できますか?
回答:tomcat 8
以前は、cookie
中国語のデータを中国語で直接保存することはできず、中国語のデータをトランスコードする必要がありました(通常はURL
エンコード)
その後tomcat 8
、cookie
中国のデータをサポートします
読者は自分で実験することができます
4、Cookie共有の問題
この質問はより詳細です。tomcat
サーバーに複数のweb
プロジェクトが展開されていると仮定すると、これらのweb
プロジェクトcookie
を共有できますか?
回答:デフォルトcookie
では共有できません
ただしcookie
、共有を設定するsetPath(String path)
方法cookie
があります。つまり、この方法で設定された取得範囲です。デフォルトでは、値は現在のプロジェクトの仮想ディレクトリです。共有する場合は、にpath
設定一根/
します。
デモンストレーション:
新しいものを作成し、HttpServlet
このクラスで送信してCookie
、グローバル共有を設定します。
@WebServlet("/cookieDemo5")
public class CookieDemo5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//新建一个Cookie,并设置持久化存储时间为1000秒
Cookie cookie = new Cookie("msg", "你好");
//设置共享
cookie.setPath("/");
//发送cookie
response.addCookie(cookie);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
新しいプロジェクトをcookie
作成し、出力情報クラスをコピーして、文を追加します。2番目のプロジェクト:
以下のサーバーを実行し、最初に送信されたcookie
プロジェクトを実行してから、新しく作成されたプロジェクトにアクセスします。出力は次のとおりです。