• 締切済み

java サーブレット セッションの使用方法

たびたび質問してすいません eclipse tomcatを使ったクイズの問題ですが1問目から回答を保持したまま2問目に移動する方法が分かりません、 作りかけが下にあります,これだと1問目から3問目に2問目を飛ばしていってしまいます 条件 使用できるのはPage1.java・Page2java・web.xmlのみ 表示したいページはこんな感じです Page1の問題 データ通信の通信速度や通信手順の取り決めは? ○ Aプログラム ○ Bプロトコル ○ Cプロファイル ○ Dプロメテウス Page2へ進む Page2の問題 1MBを1KBに換算すると? ○ A1024 ○ B1022 ○ C1028 ○ D1026 Page3へ進む Page3 問題1は正解/不正解です 問題2正解/不正解です 問題1 package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class UseSession1 extends HttpServlet{ String html; String html1="<!doctype html><html lang=ja><head><meta charset=utf-8><title>UseSession1</title></head></body>"; String html2="<form action=UseSession1 method=post><table><tr><td><input type=radio name=pp value=Aプログラム>Aプログラム<br>"+ "<input type=radio name=pp value=Bプロトコル>Bプロトコル<br>"+ "<input type=radio name=pp value=Cプロファイル>Cプロファイル<br>"+ "<input type=radio name=pp value=Dプロメテウス>Dプロメテウス</td></tr></table><br>"+ "<input type=submit value =送信><input type=reset value=リセット></form></body></html>"; public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); html=html1+html2; out.println(html); out.close(); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ request.setCharacterEncoding("UTF-8"); HttpSession session =request.getSession(); session.setAttribute("pp",request.getParameter("pp")); ServletContext context=getServletConfig().getServletContext(); RequestDispatcher dispatcher =context.getRequestDispatcher("/UseSession3"); dispatcher.forward(request,response); } } 問題2 package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class UseSession2 extends HttpServlet { String html; String html1="<!doctype html><html lang=ja><head><meta charset=utf-8><title>UseSession1</title></head></body>"; String html2="<form action=UseSession2 method=post><table><tr><td><input type=radio name=oo value=A1024>A1024<br>"+ "<input type=radio name=oo value=B1022>B1022<br>"+ "<input type=radio name=oo value=C1028>C1028<br>"+ "<input type=radio name=oo value=D1026>D1026</td></tr></table><br>"+ "<input type=submit value =送信><input type=reset value=リセット></form></body></html>"; public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); html=html1+html2; out.println(html); out.close(); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ request.setCharacterEncoding("UTF-8"); HttpSession session =request.getSession(); session.setAttribute("oo",request.getParameter("oo")); ServletContext context=getServletConfig().getServletContext(); RequestDispatcher dispatcher =context.getRequestDispatcher("/UseSession3"); dispatcher.forward(request,response); } }

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

  • mintia007
  • ベストアンサー率59% (16/27)
回答No.2

いろいろと質問されているようですけど解決はされているんでしょうか? 解決していて理解されているのなら前の質問は締め切って欲しいです。 (回答する側もどこまで理解しているか解るので) セッションを使用しているようですが、セッションについて理解されているでしょうか? (セッションについて理解していれば質問していませんね) ネットで検索してみると色々とサンプルとか沢山出てきます。 ・・・と書いてみましたが、恐らく補足すら書いてもらえないかもですね。

回答No.1

背伸びをされてませんか? まずは、HTMLだけ書いてテストしてみるとか、とりあえずJavaScriptを使って書いてみるとかしてみたほうが良いかと思いますよ。

関連するQ&A

  • java サーブレットの質問

    Page1・Page2でラジオボタンで答えた回答をPage3で正解か不正解かを セッションを使い表示させたいのですがどうすればいいのでしょうか? eclipseとtomcatを使っています 下にあるのが作りかけのです セッションを使う保持・引渡し 正誤判断なんかが良く分かりません 条件 使用できるのはPage1.java・Page2java・Page3.java・web.xmlのみ 表示したいページはこんな感じです Page1の問題 データ通信の通信速度や通信手順の取り決めは? ○ Aプログラム ○ Bプロトコル ○ Cプロファイル ○ Dプロメテウス Page2へ進む Page2の問題 1MBを1KBに換算すると? ○ A1024 ○ B1022 ○ C1028 ○ D1026 Page3へ進む Page3 問題1は正解/不正解です 問題2正解/不正解です package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; 「Page1.java」 public class Page1 extends HttpServlet{ String html; String html1="<!doctype html><html lang=ja><head><meta charset=utf-8><title>Page1</title></head></body>"; String html2="<form action=Page1 method=post><table><tr><td><input type=radio name=occupation value=Aプログラム>Aプログラム<br>"+ "<input type=radio name=occupation value=Bプロトコル>Bプロトコル<br>"+ "<input type=radio name=occupation value=Cプロファイル>Cプロファイル<br>"+ "<input type=radio name=occupation value=Dプロメテウス>Dプロメテウス</td></tr></table><br>"+ "<input type=submit value =送信><input type=reset value=リセット></form></body></html>"; public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); }

    • ベストアンサー
    • Java
  • java eclipseでのエラーについて

    環境 eclipse tomcat6 javaファイルとweb.xmlを用いており 職業を選択し送信ボタンを押すとあなたの職業はXXXですと表示するはずなのですが HTTPステータス 404がでて困っています どこが間違っているのでしょうか package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class RadioInput extends HttpServlet{ String html; String html1="<!doctype html><html lang=ja><head><meta charset=utf-8><title>Radioinput</title></head></body>"; String html2="職業をお選びください<form action=Radioinput method=post><table><tr><td><input type=radio name=occupation value=会社員>会社員<br><input type=radio name=occupation value=学生>学生<br><input type=radio name=occupation value=主婦>主婦<br><input type=radio name=occupation value=その他>その他</td></tr></table><br><input type=submit value =送信><input type=reset value=リセット></form></body></html>"; public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); html=html1+html2; out.println(html); out.close(); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ int numberOfErrors=0; String errorMessage="<div class=alerm>入力値にエラーがありました</div>"; String noRadioValueError="<div class=alerm>「エラー入力値がありません」</div>"; request.setCharacterEncoding("UTF-8"); String occupation=request.getParameter("occupation"); if(occupation==null){ numberOfErrors +=1; errorMessage +=noRadioValueError; } response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); if(numberOfErrors>0){ html = html1+errorMessage+html2; out.println(html); }else{ html=html1+"あなたの職業は"+occupation+"ですね</body></html>"; out.println(html); } out.close(); } }

    • ベストアンサー
    • Java
  • サーブレットの【405】POSTについて

    「HTTPのGETメソッドは、このURLではサポートされていません。」のエラーが出ます。 コードは「スッキリわかるサーブレット&JSP」本の10章です。 サーブレットを右クリックで実行すると、上記のエラーが出ます。 ----------------------------------------------------------------- package servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import model.LoginLogic; import model.User; @WebServlet("/Login") public class Login extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // リクエストパラメータの取得 request.setCharacterEncoding("UTF-8"); //PrintWriter out = response.getWriter(); //out.println(createHTML("POST")); //out.close(); String name = request.getParameter("name"); String pass = request.getParameter("pass"); // Userインスタンス(ユーザー情報)の生成 User user = new User(name, pass); // ログイン処理 LoginLogic loginLogic = new LoginLogic(); boolean isLogin = loginLogic.execute(user); // ログイン成功時の処理 if (isLogin) { // ユーザー情報をセッションスコープに保存 HttpSession session = request.getSession(); session.setAttribute("loginUser", user); } // ログイン結果画面にフォワード RequestDispatcher dispatcher =request.getRequestDispatcher("/WEB-INF/jsp/loginResult.jsp"); dispatcher.forward(request, response); } //private char[] createHTML(String string) { // TODO 自動生成されたメソッド・スタブ //return null; //} } ------------------------------------------------------------------------------------ ビュー <%--つぶやきトップ画面 --%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>つぶやき画面</title> </head> <body> <br><br><br><p style="text-align:center"><b>ようこそ!!つぶやきアプリへ!</b></p> <form action="Tsubuyaki/Login" method="post"> <p style="text-align:center">ユーザー名:<input type="text" name = "name"></p> <p style="text-align:center">パスワード:<input type="text" name = "pass"></p> <p style="text-align:center"><input type="submit" value="ログイン"></p> </form> </body> </html> ------------------------------------------------------------------------------------ どこがダメかご回答願います。

  • javaサーブレット sessionの使い方

    sessionを使ってデータの受け渡しをしたいのですが、ページ移動が増えると上手く受け渡せ無くて困っています。 jsp→Servlet のみでテストした時は正常に動いたのですが、ページを増やすと値が上手く更新されないのです。 下のプログラムではjspでセッションを開始して、ボタンを押すことでNS1.javaに移動し値を1増やしてNS2.javaに移動します。NS2.javaでも値を1増やしているので結果的に2つ値が増えるはずなのに1つも増えません。 何が悪いのでしょうか。解決策を教えて下さい。 // NStest.jsp <%@ page contentType="text/html;charset=Windows-31J" %> <html> <head> <title>移動</title> </head> <body> <% // isNewメソッドでセッション管理されているか確認します。 if (session.isNew()) { // セッション管理されていない場合、データを登録します。 session.setAttribute("count", 0); // 初回用メッセージ out.println(" Nice to meet you."); } else { // セッション管理されている場合、データを表示します。 out.println("count: " + session.getAttribute("count")); } %> <form method="POST" enctype="multipart/form-data" action="NS1"> <INPUT type="SUBMIT" name="button1" value="移動"> </form> </body> </html> // NS1.java package NStest; import java.io.*; import javax.servlet.*; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class NS1 extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 出力形式等の設定 ServletContext context = this.getServletContext(); response.setContentType("text/html;charset=Windows-31J"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(false); String message; if (null == session) { // nullが返ってくる場合はセッションが作成されていない session.setAttribute("count", 0); out.println("セッションが開始されていません。"); } else { // セッションインスタンスからcountの値を取得して表示 // 1加算してふたたび保存 Integer count = (Integer)session.getAttribute("count"); session.setAttribute("count", 1 + count.intValue()); message = "ページカウント: " + count; out.println(message); } // 処理後はNS2.javaにリダイレクト response.sendRedirect("NS2.java"); } } // NS2.java package NStest; import java.io.*; import javax.servlet.*; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class NS2 extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 出力形式等の設定 ServletContext context = this.getServletContext(); response.setContentType("text/html;charset=Windows-31J"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(false); String message; if (null == session) { // nullが返ってくる場合はセッションが作成されていない session.setAttribute("count", 0); out.println("セッションが開始されていません。"); } else { // セッションインスタンスからcountの値を取得して表示 // 1加算してふたたび保存 Integer count = (Integer)session.getAttribute("count"); session.setAttribute("count", 1 + count.intValue()); message = "ページカウント: " + count; out.println(message); } } }

    • ベストアンサー
    • Java
  • サーブレットのパラメタ変更

    例えば、 - a.html - <form method="post" action="/Servlet1"> <input type="text" name="animal" size="12"> <input type="submit" value="送信"> </form> というHTML文がありanimalのテキスト内容がcatとしてServlet1へリクエストしたとします。 Servlet1ではgetParameter("animal")でcatを取得できます。そこで次のページをレスポンスするべく、 getServletContext().getRequestDispatcher("Jsp1.jsp").forward( request, response ); という形でJsp1.jspへフォワードします。Jsp1.jspでもrequest.getParameter("animal");とすると catという値が取得できると思うのですが、これをServlet1でanimalがcatならdogというようにパラメータの値を変更することはできますでしょうか? 初歩的な質問かと思いますが、何卒、宜しくお願いいたします。

    • ベストアンサー
    • Java
  • JSPとサーブレット間での画面遷移でうまく表示できません。

    いつもお世話になっております。。。 eclipse3.4 tomcat6.0 の環境で作業しています。 JSPから受け取ったパラメータをサーブレットで条件分岐して、 条件ごとにdispatch fowardで異なったページに遷移させるページを作りたいのですが、うまくいきません。 送信JSPで、 <form action="受け取りサーブレット名" method="post"> <input type="radio" name="url" value="value1"checked> <input type="radio" name="url" value="value2"> <input type="radio" name="url" value="value3"> <input type="submit" value="jump!"> </form> と書き、受け取りでサーブレットで public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { perform(request, response); }      private void perform(HttpServletRequest request, HttpServletResponse response)         throws ServletException, IOException { response.setContentType("text/plain; charset=Windows-31J"); request.setCharacterEncoding("Windows-31J"); request.getParameter("url"); String i = request.getParameter("url"); if( i.equals("value1")) {           request.getRequestDispatcher("/遷移先1").forward(request,response); }else if(i.equals("value2")) {           request.getRequestDispatcher("/遷移先2").forward(request,response); }else if(i.equals("value3")) {           request.getRequestDispatcher("/遷移先3").forward(request,response); としています。 これでJSPからデバッグを実行すると、変数iにparam"url"でとってきた"value1"が入っているので、getParameterが成功しているのが分かりますが、その後なぜか遷移先に移りません。 おそらくdispaccher fowardがうまくいっていないか、 if文が間違ってるかだと思うのですが、 どなたかご教授くださいm(_ _)m

  • サーブレットが起動しない

    HTMLのSubmitボタンを押すと、Sample_Servletにリクエストが 送信されます。そして、JSPを表示します。 その後、JSPのSubmitボタンを押すと 何もかわりません。Servletにリクエストが わたってないのだと思います。 <FORM ACTION ="sample.Sample_Servlet" METHOD = "POST"> ・・・ <INPUT TYPE = "submit" NAME="btn" VALUE ="btn"> としているのですが、、、、 何か心当たりがありましたらお願いします。

    • ベストアンサー
    • Java
  • WEBブラウザからJSPを介して、サーブレットを呼び出したいのですが・・・

    オールインワンeclipse3.4 tomcat5.5を使用して 動的WEBプロジェクトを作成して JSP~サーブレットを呼び出したいのですが、 なぜかJSPファイルを認識してくれず、404エラーとなります。 考えられるのは、ファイルの配置箇所くらいしか、思いつきませんが、色々動かしても結果は変わりませんでした。 どなたか、ご指導お願いいたします。 □basic |□javaリソースsrc>□パッケージinput>EchoServret.java |□WebContent>echo.jsp echo.jspソース <%@ page contentType="text/html; charset=windows-31j"pageEncoding="windows-31j"%> <html> <body> <h2>EchoServletの入力</h2> <form action = "../servlet/input.EchoServlet"> <input type="text" name="message"> <input type="submit"> </form> </body> </html> EchoServlet.javaソース package input; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class EchoServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ String msg = request.getParameter("message"); response.setContentType("text/plain; charset=Windows-31J"); PrintWriter out = response.getWriter(); out.println("message=" + msg); } } WEB.XML <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>basic2</display-name> <servlet> <display-name>EchoServlet</display-name> <servlet-name>EchoServlet</servlet-name> <servlet-class>input.EchoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>EchoServlet</servlet-name> <url-pattern>/EchoServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app> よろしくお願いいたします!

    • ベストアンサー
    • Java
  • Formのラジオボタンリセット方法

    下記のradioボタンのグループr1、r2、r3、r4のうちグループr1とr2だけを同時にリセットする方法はありますか? グループ1つリセットする方法はわかりますが、2つリセットになると方法が分かりません。 良い方法はありませんか?よろしくお願いします。 <form> <p> <input type="radio" name="r1" value="1" checked>1<br> <input type="radio" name="r1" value="2">2<br> <input type="radio" name="r1" value="3">3 </p> <p> <input type="radio" name="r2" value="a" checked>a<br> <input type="radio" name="r2" value="b">b<br> <input type="radio" name="r2" value="c">c </p> <p> <input type="radio" name="r3" value="a" checked>a<br> <input type="radio" name="r3" value="b">b<br> <input type="radio" name="r3" value="c">c </p> <p> <input type="radio" name="r4" value="a" checked>a<br> <input type="radio" name="r4" value="b">b<br> <input type="radio" name="r4" value="c">c </p> </form>

  • javaサーブレットでのlocalアクセス

    いつもお世話になっています。 javaサーブレット実行時における、処理について質問します。 現在、javaサーブレットを使って、複数のidで処理しようとしています。 その際、同期化を行うため、ラップオブジェクト同期化を使用していています。 その際、複数画面からアクセスされた場合、 アクセスされた順番に処理は行えるのですが、 このときどのユーザーが行ったかを判別したいと考えています。 これは、可能なのでしょうか? ソースは以下の方法で作成しています。 jsp側 <body> <form name="groupForm" action="./Group_Run_Servlet" method="POST"> <input type="text" name="userId" value="nanami_45"> <input type="text" name="password" value="moon_Light"><br> ◆更新・削除のどちらかをチェックしてください。<br>Test <table border="2"> <tr> <td style="background-color:white;"></td> <td style="background-color:white;"></td> <td>No.</td> <td>グループ名称</td> </tr> <tr> <td> <input type="checkbox" name="update" value="0">更新 </td> <td> <input type="checkbox" name="delete" value="0">削除 </td> <td><input type="hidden" name="groupNumber" value="24"> 24 </td> <td> <input type="text" name="groupName" value="at"> </td> </tr> </table> </body> ※文字の加減で、一個にしています。 サーブレット側 public class Group_Run_Servlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { /** ラップオブジェクト同期化 **/ private static final List<String> list = Collections.synchronizedList(new ArrayList<String>() ); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); //このとき、実行adminユーザーを判定する必要がある。 //方法として、渡されてきた順に一度listかに格納する必要がある System.out.println("userId="+AdminUser_Session.getUserID()); System.out.println("password="+AdminUser_Session.getPassword()); String userId = String.valueOf(request.getParameter("userId")); String password = String.valueOf(request.getParameter("password")); System.out.println("userid:"+userId + "/password:"+ password); synchronized(list) { //checkboxの値を取得する String[] update = request.getParameterValues("update"); String[] delete = request.getParameterValues("delete"); String[] groupNumbers = request.getParameterValues("groupNumber"); String[] groupNames = request.getParameterValues("groupName"); //更新 if(update != null ) { System.out.println("update.length:"+ update.length ); for(int u=0;u<update.length;u++ ) { System.out.println("update[" + u + "]:" + update[u]); testWait(c); } } //削除 if(delete != null ) { System.out.println("delete.length:"+ delete.length); for(int d=0;d<delete.length;d++ ) { System.out.println("delete["+ d + "]: " + delete[d]); testWait(c); } } } private void testWait( int userCnt) { for(int s=0;s<30;s++) { try { Thread.sleep(300); System.out.println("--- " + s ); } catch (InterruptedException e) { e.printStackTrace(); } } } } ※doPost以外省いています. 宜しくお願いします。