練習問題 解答

12.5 練習問題 解答

問1

① ○
② ○
③ ×:スコープから登録されていない名前のデータを取得すると、null値が返されます。
④ ×:セッションは任意に破棄することができます。
⑤ ×:ブラウザが閉じられたかどうかを正確に判断できないため、セッションタイムアウトによって削除されます。

問2

➢ practice1201.jsp
<%@page contentType= "text/html; charset=UTF-8" %>
<%@page import="java.net.*" %>
<%
String job = "";

Cookie[] jobCookie = request.getCookies();
if(jobCookie != null){
	for(int i = 0 ; i < jobCookie.length; i++){
		if(jobCookie[i].getName().equals("job")){
			job = URLDecoder.decode(jobCookie[i].getValue(), "UTF-8");
		}
	}
}else{
	job = (String)session.getAttribute("job");
	if(job == null){
		job = "";
	}
}
String message = (String)request.getAttribute("message");
if(message == null){
	message = "";
}
%>
<html>
	<head>
		<title>practice1101</title>
	</head>
	<body>
		<form action="<%= request.getContextPath() %>/Practice1201Servlet" method="get">
			あなたの職業はなんですか?<br>
			<input type="text" name="job" value=<%= job %>>
			<input type="submit" value="送信"><br>
			<%= message %>
		</form>
	</body>
</html>
➢ Practice1201Servlet.java
package ch12exercise;

import java.io.IOException;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

@WebServlet("/Practice1201Servlet")
public class Practice1201Servlet extends HttpServlet {

 	public void doGet(HttpServletRequest request, HttpServletResponse response)
 			throws ServletException, IOException {

 		String job = request.getParameter("job");
 		String message = null;
 
 		if(job == null){
 			message = "フォーム画面から入力してください。";
 		}else if(job.equals("")){
 			message = "何も入力されていません。";
 		}
 
 		if(message == null){
 			Cookie jobCookie = new Cookie("job", job);
 			jobCookie.setMaxAge(60 * 60 * 12);
 			response.addCookie(jobCookie);
 
 			HttpSession session = request.getSession();
 			session.setAttribute("job", job);
 			request.getRequestDispatcher("/view/ch12exercise/practice1202.jsp").forward(request, response);
 		}else{
 			request.setAttribute("message", message);
 			request.getRequestDispatcher("/view/ch12exercise/practice1201.jsp").forward(request, response);
 		}
	
 	}
 }
➢ practice1202.jsp
<%@page contentType= "text/html; charset=UTF-8" %>

<%
String job = (String)session.getAttribute("job");
%>

<html>
	<head>
		<title>practice1202</title>
	</head>
	<body>
		職業は「<%= job %>」なのですね。<br>
		<form action="<%= request.getContextPath() %>/view/ch12exercise/practice1201.jsp" method="get">
			<input type="submit" value="戻る">
		</form>
	</body>
</html>

NEXT>> 第13章 Webアプリケーションとデータベース