これは学校の宿題です。ハマった。サーブレットを使用して、ユーザーが色を選択できるドロップダウンを作成し、その色を反映するように背景を変更します。次に、その Cookie が最新の場合はいつでも、その背景がその色で表示されます。明確にするために宿題からの質問は次のとおりです。ユーザーの好みの色を含む Cookie がリクエストに含まれているかどうかを確認するサーブレットを作成する必要があります。リクエストにこの Cookie がない場合、コードは白い背景の HTML ページを作成します。このページは、ユーザーの色の好みを収集するために使用されます。このページには、選択、白、青、グレーの 4 つのオプションを含むドロップダウン選択ボックスが含まれます。JavaScript を使用して、ユーザーが「選択」エントリ以外を選択したことを確認します。JavaScript は、インラインではなく、イベント リスナーを使用して実装する必要があります。ユーザーが有効な選択をしなかった場合、送信を許可しません。ユーザーが選択してページを送信すると、コードはユーザーの色設定を Cookie に保存し、背景をユーザーが以前に選択した色に設定するページを生成します。Cookie は 30 秒間のみ有効です。注: Cookie が作成されたら、(ブラウザーを閉じずに) このサーブレットに戻ると、ユーザーに再度情報を提供するように要求しなくても、正しい背景が表示されます。Cookie の有効期限が切れた後、サーブレットはもう一度ユーザーに色の設定を要求する必要があります。ユーザーが選択してページを送信すると、コードはユーザーの色設定を Cookie に保存し、背景をユーザーが以前に選択した色に設定するページを生成します。Cookie は 30 秒間のみ有効です。注: Cookie が作成されたら、(ブラウザーを閉じずに) このサーブレットに戻ると、ユーザーに再度情報を提供するように要求しなくても、正しい背景が表示されます。Cookie の有効期限が切れた後、サーブレットはもう一度ユーザーに色の設定を要求する必要があります。ユーザーが選択してページを送信すると、コードはユーザーの色設定を Cookie に保存し、背景をユーザーが以前に選択した色に設定するページを生成します。Cookie は 30 秒間のみ有効です。注: Cookie が作成されたら、(ブラウザーを閉じずに) このサーブレットに戻ると、ユーザーに再度情報を提供するように要求しなくても、正しい背景が表示されます。Cookie の有効期限が切れた後、サーブレットはもう一度ユーザーに色の設定を要求する必要があります。(ブラウザを閉じずに) このサーブレットに戻ると、ユーザーに再度情報を提供するように要求することなく、正しい背景がレンダリングされます。Cookie の有効期限が切れた後、サーブレットはもう一度ユーザーに色の設定を要求する必要があります。(ブラウザを閉じずに) このサーブレットに戻ると、ユーザーに再度情報を提供するように要求することなく、正しい背景がレンダリングされます。Cookie の有効期限が切れた後、サーブレットはもう一度ユーザーに色の設定を要求する必要があります。
これが私のCookie Serlevtです:
package edu.edgewood.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class CookieServlet
*/
@WebServlet("/CookieServlet")
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected final static String PREFS_BGCOLOR = "prefs.bgcolor";
protected String faveColor = DEFAULT_COLOR;
protected final static String DEFAULT_COLOR = "white";
public CookieServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
@SuppressWarnings("unused")
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
final String PREFS_BGCOLOR = "prefs.bgcolor";
PrintWriter printWriter = response.getWriter();
Cookie[] cookie = request.getCookies();
if (cookie == null) {
printWriter.println("No Cookies");
printWriter.println("</br>");
renderPage(printWriter, false);
} else {
for (int i = 0; i < cookie.length; i++) {
Cookie cookies = cookie[i];
if (cookies.getName().equals(PREFS_BGCOLOR)) {
faveColor = cookies.getValue();
printWriter.println("This is your colored page"); //testing
//printWriter.println("<body bgcolor= 'PREFS_BGCOLOR'>"); //testing
printWriter.println("<body bgcolor=\"");
printWriter.print(faveColor);
printWriter.println("\">");
break;
}
printWriter.println(cookies.getValue());
}
}
}
private void renderPage(PrintWriter printWriter, boolean post) {
printWriter.println("<html>");
printWriter.println("<head >");
printWriter.println("<script language='javascript' src='js/common.js'></script>");
printWriter.println("</head>");
printWriter.println("<body bgcolor= 'faveColor'>"); //determines background
printWriter.println("Please choose a color");
printWriter.println("<form action='CookieServlet' method='post'>");
printWriter.println("<select id='colorid' onchange='if(this.value == '') this.selectedIndex = 1' name ='colorid'><option value='' disabled='disabled' selected='selected'>Please select a color</option> <option value='#FF0000'>Red</option> <option value='#0000FF'>Blue</option> <option value='#00FF00'>Green</option>");
printWriter.println("<input type='button' id='submitBtn' value='Submit' onClick=getElementById('colorid').value/>");
printWriter.println("</select>");
printWriter.println("</br>");
printWriter.println("</form>");
printWriter.println("<script language ='javascript'>addControlListeners();</script>");
printWriter.println("</body>");
printWriter.println("</html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie(PREFS_BGCOLOR, faveColor);
cookie.setMaxAge(10);
response.addCookie(cookie);
}
}
現在、最初のページが黄色くレンダリングされています...どこから来たのかわかりません。次に、ドロップダウンで色を選択し、[送信] をクリックします。送信ボタンは検証されていませんが、空白の白い画面に移動します。次に、Cookie がまだアクティブで、テキストが表示された状態でページが白くレンダリングされているときに、ページに戻ります。どんな助けでも大歓迎です。ありがとうございました。