Javaサーブレットで、既存のCookieの値を変更するにはどうすればよいですか?addCookieメソッドはありますが、HttpServletResponseにはdeleteCookieまたはeditCookieはありません。
それらは確かに存在しません。それを行うユーティリティメソッドを自分で作成するだけです。特に、目的のCookieを取得することは非常に肥大化しています。例えば。
public final class Servlets {
private Servlets() {}
public static Cookie getCookie(HttpServletRequest request, String name) {
if (request.getCookies() != null) {
for (Cookie cookie : request.getCookies()) {
if (cookie.getName().equals(name)) {
return cookie;
}
}
}
return null;
}
}
Cookieを編集するには、その値を設定してから応答に追加します。
Cookie cookie = Servlets.getCookie(request, "foo");
if (cookie != null) {
cookie.setValue(newValue);
response.addCookie(cookie);
}
デフォルトと異なる場合は、必要に応じてmaxage、path、およびdomainも設定します。つまり、クライアントはこの情報を送り返しません。
Cookieを削除するには、最大年齢を0
に設定します(できればnull
に設定することもできます)。
Cookie cookie = Servlets.getCookie(request, "foo");
if (cookie != null) {
cookie.setMaxAge(0);
cookie.setValue(null);
response.addCookie(cookie);
}
デフォルトと異なる場合は、必要に応じてパスとドメインも設定します。つまり、クライアントはこの情報を送り返しません。
Kodejavaの例を次に示します。
public class ReadCookieExample extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
writer.println("Name: " + cookies[i].getName() + "; Value: " + cookies[i].getValue());
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
Cookieリストを取得し、必要なものを取得し、値を出力する代わりに、次のようなことを行います。
cookie.setValue(String.valueOf(<new Value>));
cookie.setMaxAge(60*60*24*365);
cookie.setPath("/");
response.addCookie(cookie); etc...
HTH、
ジェームス