練習問題 解答

11.5 練習問題 解答

問1

① ×:リクエストスコープ内のデータは何度でも取得することができます。
② ×:リクエストスコープ内のデータは1リクエストの間有効なため、次のリクエストでは利用できません。
③ ○
④ ○
⑤ ×:既存のクラス以外に、自作したクラスのオブジェクトも登録することが可能です。

問2

➢ practice1101.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}
14String message = (String)request.getAttribute("message");
15if(message == null){
16    message = "";
17}
18%>
19<html>
20    <head>
21        <title>practice1101</title>
22    </head>
23    <body>
24        <form action="<%= request.getContextPath() %>/Practice1101Servlet" method="get">
25            あなたの職業はなんですか?<br>
26            <input type="text" name="job" value=<%= job %>>
27            <input type="submit" value="送信"><br>
28            <%= message %>
29        </form>
30    </body>
31</html>
➢ Practice1101Servlet.java
1package ch11exercise;
2 
3import java.io.IOException;
4 
5import jakarta.servlet.ServletException;
6import jakarta.servlet.annotation.WebServlet;
7import jakarta.servlet.http.Cookie;
8import jakarta.servlet.http.HttpServlet;
9import jakarta.servlet.http.HttpServletRequest;
10import jakarta.servlet.http.HttpServletResponse;
11 
12@WebServlet("/Practice1101Servlet")
13public class Practice1101Servlet extends HttpServlet {
14 
15    public void doGet(HttpServletRequest request, HttpServletResponse response)
16            throws ServletException, IOException {
17  
18        String job = request.getParameter("job");
19        String message = null;
20  
21        if(job == null){
22            message = "フォーム画面から入力してください。";
23        }else if(job.equals("")){
24            message = "何も入力されていません。";
25        }
26  
27        if(message == null){
28            Cookie jobCookie = new Cookie("job", job);
29            jobCookie.setMaxAge(60 * 60 * 12);
30            response.addCookie(jobCookie);
31  
32            request.setAttribute("job", job);
33            request.getRequestDispatcher("/view/ch11exercise/practice1102.jsp").forward(request, response);
34        }else{
35            request.setAttribute("message", message);
36            request.getRequestDispatcher("/view/ch11exercise/practice1101.jsp").forward(request, response);
37        }
38     
39    }
40 }
➢ practice1102.jsp
1<%@page contentType= "text/html; charset=UTF-8" %>
2 
3<%
4String job = (String)request.getAttribute("job");
5%>
6 
7<html>
8    <head>
9        <title>practice1102</title>
10    </head>
11    <body>
12        職業は「<%= job %>」なのですね。
13    </body>
14</html>

NEXT>> 第12章 セッションを利用しよう

f