ここに初めて投稿するときは、それが有効な質問であることを願っています。私は、ページ上のフォームから3つの名前/値ペアを受け入れ、それらを1.リクエスト属性2.セッション属性および3.Cookie属性として設定する基本的なJavaサーブレットを構築してきました。次に、Cookieが応答に追加され、ビュー(AccountSettings.jsp)が転送されます。次に、AccountSettingsページはrequest.getCookies()を使用してそれらを配列にダンプし、配列から値を読み取ることになっています。このすべては、私がこのフォームを使用するたびに発生することになっています。
私の問題は、Cookieの値が正しいのは、最初にフォームを使用したときだけであり、その後、フォームを再度使用するたびに、ページの読み込み時に入力された最後の値がCookieに表示されることです。ただし、ページを更新すると、Cookieの値は正しく表示されます。ログアウトサーブレットでCookieを手動で削除しようとしましたが(setMaxAge(0)を実行してから応答に再追加)、インデックス1で定数ArrayOutOfBoundsExceptionしか生成されなかったため、その部分をコメントアウトしてCookieをそのままにしました。
ページが表示された後、Chromeでlocalhostに関連付けられたCookieを確認しましたが、値が正しく設定されているため、Cookieが実際に正しく設定される前にJSPが描画されているように見えます。
これを修正する方法についての助けをいただければ幸いです。これが私のコードです。
サーブレット:
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
public Login() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
login(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
login(request, response);
}
private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
// get a new or existing session
HttpSession session = request.getSession();
// Instantiate user and populate values
User user = new User();
user.setUser(request.getParameter("user"));
user.setPass(request.getParameter("pass"));
// Get last page
String referringUrl = request.getParameter("referringPage");
session.setAttribute("user", user.getUser());
session.setAttribute("pass", user.getPass());
session.setAttribute("lastPage", referringUrl);
Cookie cookie1 = new Cookie("user", user.getUser());
Cookie cookie2 = new Cookie("pass", user.getPass());
Cookie cookie3 = new Cookie("lastPage", referringUrl);
response.addCookie(cookie1);
response.addCookie(cookie2);
response.addCookie(cookie3);
request.setAttribute("user", user.getUser());
request.setAttribute("pass", user.getPass());
request.setAttribute("lastPage", referringUrl);
try{
if (user.authorize()){
session.setAttribute("name", user.getName());
session.setAttribute("authorized", "1");
}else{
session.setAttribute("authorized", "0");
}
}
catch(Exception e){
e.printStackTrace();
}
RequestDispatcher view = request.getRequestDispatcher("AccountSettings.jsp");
view.forward(request, response);
user.destroy();
}
}
意見:
<div id="content">
<div class="padding">
<%
if (!loggedIn){
out.print(
"Oops! I'm not sure how you got here..."
);
}else{
Cookie[] cookies = request.getCookies();
out.print(
"<h2>Account Settings</h2><br><br>" +
"<table>" +
"<tr>" +
"<th>Source</th>" +
"<th>Username</th>" +
"<th>Password</th>" +
"<th>Last Page Visted</th>" +
"</tr>" +
"<tr>" +
"<th>Request</th>" +
"<td>" + request.getAttribute("user") + "</td>" +
"<td>" + request.getAttribute("pass") + "</td>" +
"<td>" + request.getAttribute("lastPage") + "</td>" +
"</tr>" +
"<tr>" +
"<th>Session</th>" +
"<td>" + session.getAttribute("user") + "</td>" +
"<td>" + session.getAttribute("pass") + "</td>" +
"<td>" + session.getAttribute("lastPage") + "</td>" +
"</tr>" +
"<tr>" +
"<th>Cookies</th>" +
"<td>" + cookies[1].getValue() + "</td>" +
"<td>" + cookies[2].getValue() + "</td>" +
"<td>" + cookies[3].getValue() + "</td>" +
"</tr>" +
"</table>"
);
}
%>
</div>
</div>