質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

0回答

2110閲覧

jspのセッションに有無による画面遷移をしたい

marosu

総合スコア5

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2020/04/21 07:45

前提・実現したいこと

jspとサーブレットの学習に取り組んでいます。
以下のような問題です。

【問題文】
入力画面でイベント名とその年月日を入力し,ボタンを押すと,「XX(イベント名)まであとYY日です.」と表示されるページを作れ.(例:東京五輪[2020年7月24日]まであとZZ日.)
上記をクッキーを用いて拡張する.初めて利用するユーザに対しては入力画面を表示し,イベント名とその年月日を求めてから,「XX(イベント名)まであとYY日です.」と表示せよ.2回目以降の入力画面には前回入力したイベント名,年月日をデフォルト値として表示すること.

問題文の「初めて利用するユーザに対しては入力画面を表示し」という部分で全く方法が分かりません。
Event.jsp内でセッションの有無を判断し、セッションがある場合はEventServlet.javaに自動でデータを送信してEventRedirect.jspを表示するという認識なのですが、
そもそもjsp内でsessionの有無で自動でデータを送信することではできないのでしょうか。
解決策があればご教授いただきたいです。

なお、全くの初心者でコードレビューなどは受けたことがないのでかなり汚いかもしれません。
読みづらい点があればご指摘いただけると嬉しいです。
よろしくお願いいたします。

該当のソースコード

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" 2 import="java.net.*"%> 3<% 4String eventName = ""; 5String eventYear = ""; 6String eventMonth = ""; 7String eventDay = ""; 8Cookie[] cookies = request.getCookies(); 9 10if(cookies != null){ 11 for(int i = 0; i<cookies.length;i++){ 12 if(cookies[i].getName().equals("eventName")){ 13 eventName = URLDecoder.decode(cookies[i].getValue(),"UTF-8"); 14 }else if(cookies[i].getName().equals("eventYear")){ 15 eventYear = cookies[i].getValue(); 16 }else if(cookies[i].getName().equals("eventMonth")){ 17 eventMonth = cookies[i].getValue(); 18 }else if(cookies[i].getName().equals("eventDay")){ 19 eventDay = cookies[i].getValue(); 20 } 21 } 22} 23%> 24<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 25<html> 26<head> 27<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 28<title>Insert title here</title> 29</head> 30<body> 31 <form action = "<%=request.getContextPath()%>/EventServlet" method="post"> 32 イベント名を入力してください: 33 <input type="text" value="<%=eventName %>" name="eventName"><br> 34 年月日を入力してください: 35 <input type="text" value="<%=eventYear %>" name="year" size="4" maxlength="4">年 36 <input type="text" value="<%=eventMonth %>"name="month" size="2" maxlength="2">月 37 <input type="text" value="<%=eventDay %> "name="day" size="2" maxlength="2">日<br> 38 ※YYYYMMDDで入力してください<br> 39 <button type="submit" >送信</button> 40 </form> 41</body> 42</html>

java

1import java.io.IOException; 2import java.net.URLEncoder; 3import java.text.ParseException; 4import java.text.SimpleDateFormat; 5import java.util.Date; 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.Cookie; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14 15@WebServlet("/EventServlet") 16public class EventServlet extends HttpServlet { 17 private static final long serialVersionUID = 1L; 18 19 20 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 21 request.setCharacterEncoding("UTF-8"); 22 String eventName = request.getParameter("eventName"); 23 String year = request.getParameter("year"); 24 String month = request.getParameter("month"); 25 String day = request.getParameter("day"); 26 String dateString = year + month + day + " 00:00:00"; 27 String dateString1 = year + "年" + month + "月" + day + "日"; 28 Date dateNow = new Date(); 29 30 try { 31 SimpleDateFormat dateFormatEvent = new SimpleDateFormat("yyyyMMdd HH:mm:ss"); 32 Date dateEvent = dateFormatEvent.parse(dateString); 33 long nowDate = dateNow.getTime(); 34 long eventDate = dateEvent.getTime(); 35 long one_date_time = 1000 * 60 * 60 * 24; 36 long diffDate = ( eventDate - nowDate ) / one_date_time; 37 38 request.setAttribute("eventName", eventName); 39 request.setAttribute("eventDate", dateString1); 40 request.setAttribute("diffDate", diffDate); 41 42 Cookie cookie1 = new Cookie(URLEncoder.encode("eventName","UTF-8"),URLEncoder.encode(eventName,"UTF-8")); 43 Cookie cookie2 = new Cookie("eventYear",year); 44 Cookie cookie3 = new Cookie("eventMonth",month); 45 Cookie cookie4 = new Cookie("eventDay",day); 46 cookie1.setMaxAge(60*60*24*7); 47 cookie2.setMaxAge(60*60*24*7); 48 cookie3.setMaxAge(60*60*24*7); 49 cookie4.setMaxAge(60*60*24*7); 50 51 response.addCookie(cookie1); 52 response.addCookie(cookie2); 53 response.addCookie(cookie3); 54 response.addCookie(cookie4); 55 56 String url = "/EventRedirect.jsp"; 57 RequestDispatcher dispatcher = request.getRequestDispatcher(url); 58 dispatcher.forward(request, response); 59 } catch (ParseException e) { 60 e.printStackTrace(); 61 } 62 } 63}

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<% 4 request.setCharacterEncoding("UTF-8"); 5 String eventName = (String) request.getAttribute("eventName"); 6 String eventDate = (String) request.getAttribute("eventDate"); 7 long diffDate = (long) request.getAttribute("diffDate"); 8%> 9<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 10<html> 11<head> 12<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 13<title>Redirected Page</title> 14</head> 15<body> 16 <%=eventName %>[<%=eventDate %>]まであと<%=diffDate %>日<br> 17</body> 18</html>

試したこと

・Event.jspのスクリプトレットでsessionがある場合にはforwardでデータを送信しようとした

補足情報(FW/ツールのバージョンなど)

eclipse_4.7.3
tomcat8
を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問