練習問題 解答

12.5 練習問題 解答

問1

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

問2

➢ practice1201.jsp
1<%@page contentType= "text/html; charset=UTF-8" %>
2<%@page import="java.net.*" %>
3<%
4String job = "";
5 
6Cookie[] jobCookie = request.getCookies();
7if(jobCookie != null){
8    for(int i = 0 ; i < jobCookie.length; i++){
9        if(jobCookie[i].getName().equals("job")){
10            job = URLDecoder.decode(jobCookie[i].getValue(), "UTF-8");
11        }
12    }
13}else{
14    job = (String)session.getAttribute("job");
15    if(job == null){
16        job = "";
17    }
18}
19String message = (String)request.getAttribute("message");
20if(message == null){
21    message = "";
22}
23%>
24<html>
25    <head>
26        <title>practice1101</title>
27    </head>
28    <body>
29        <form action="<%= request.getContextPath() %>/Practice1201Servlet" method="get">
30            あなたの職業はなんですか?<br>
31            <input type="text" name="job" value=<%= job %>>
32            <input type="submit" value="送信"><br>
33            <%= message %>
34        </form>
35    </body>
36</html>
➢ Practice1201Servlet.java
1package ch12exercise;
2 
3import java.io.*;
4import java.net.*;
5import javax.servlet.*;
6import javax.servlet.http.*;
7 
8public class Practice1201Servlet extends HttpServlet {
9 
10    public void doGet(HttpServletRequest request, HttpServletResponse response)
11    throws ServletException, IOException {
12  
13        request.setCharacterEncoding("UTF-8");
14        String job = request.getParameter("job");
15        String message = null;
16  
17        if(job == null){
18            message = "フォーム画面から入力してください。";
19        }else if(job.equals("")){
20            message = "何も入力されていません。";
21        }
22  
23        if(message == null){
24            String value = URLEncoder.encode(job, "UTF-8");
25            Cookie jobCookie = new Cookie("job", value);
26            jobCookie.setMaxAge(60 * 60 * 12);
27            response.addCookie(jobCookie);
28  
29            HttpSession session = request.getSession();
30            session.setAttribute("job", job);
31            request.getRequestDispatcher("/view/ch12exercise/practice1202.jsp").forward(request, response);
32        }else{
33            request.setAttribute("message", message);
34            request.getRequestDispatcher("/view/ch12exercise/practice1201.jsp").forward(request, response);
35        }
36    }
37 }
➢ practice1202.jsp
1<%@page contentType= "text/html; charset=UTF-8" %>
2 
3<%
4String job = (String)session.getAttribute("job");
5%>
6 
7<html>
8    <head>
9        <title>practice1202</title>
10    </head>
11    <body>
12        職業は「<%= job %>」なのですね。<br>
13        <form action="<%= request.getContextPath() %>/view/ch12exercise/practice1201.jsp" method="get">
14            <input type="submit" value="戻る">
15        </form>
16    </body>
17</html>

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

f