• 締切済み

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以外省いています. 宜しくお願いします。

  • Java
  • 回答数1
  • ありがとう数7

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

IPアドレスで判断できるだろうし セッションIDで判断できるだろうし 判断できる情報はあるわよ。

kannitiha
質問者

お礼

IPアドレスですか。 セッションとか以外でできないのかと思っていたので。 IPアドレス、セッションIDで判断するようにしてみます。 ありがとうございました。

関連するQ&A

  • サーブレットの構成が上手く行かない

    サーバーサイド技術の学習を始めたばかりの新参者です。 今回はサーブレットが動作しない問題が発生したため、質問させて頂きます。 要件はウェブブラウザで"UserAuthentication.html"にアクセスし、そのページのステータスをTomcat上に構成されたサーブレットに渡し、返却されるhtmlを受け取って表示する、という単純な物です。 サーブレットの構成に必要なリソースを以下の様な内容に編集し、準備しましたが、実際にTomcatのサービスを起動し、ブラウザで"UserAuthentication.html"上の"送信"ボタンを押すと、"HTTPステータス 404 ~ The requested resource (/System/TestServlet) is not available."というエラーが返却されてしまいます。 2日余りこの問題と向き合いましたが、エラーが除去出来ず、途方に暮れています。 何が問題なのかご指摘頂けませんでしょうか、よろしくお願いします。 =TestServlet.class= 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 TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ // ContentTypeを設定 response.setContentType("text/html; charset=Shift_JIS"); // 出力用PrintWriterを取得 PrintWriter out = response.getWriter(); out.println("<html"); out.println("<head>"); out.println("<title>テストサーブレット</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Welcome!! MyServlet!!</h1>"); out.println("</body>"); out.println("</html>"); } } =web.xml= <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>TestServlet.class</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/System/UserAuthentication.html</url-pattern> </servlet-mapping> </web-app> =UserAuthentication.html= <html> <head> <title>システム:利用者認証画面</title> </head> <div align="center"> <h1>利用者認証画面</h1> <h2>認証する利用者の情報を入力して"送信"ボタンを押して下さい</h2> <br> <form action="TestServlet" method="get"> <table border="4"> <tr> <td>  ネーム:<input type="text" name="name"></td> <td>パスワード:<input type="text" name="password"></td> </tr> <tr> <td><div align="left"><a href="index.html">戻る</a></div></td> <td><div align="right"><input type="reset" value="取消"><input type="submit" value="送信"></div></td> </tr> </table> </form> <br> </div> </body> </html>

    • ベストアンサー
    • Java
  • 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の文字化けに困っています。

    改善方法はありますか。 public class daytime extends HttpServlet { protected String decodeString(String str){ try{ byte[] byteData = str.getBytes("ISO_8859_1"); str = new String(byteData, "Shift_JIS"); }catch(UnsupportedEncodingException e){ return null; } return str; } public void doGet(HttpServletRequest request ,HttpServletResponse response) response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); String tmp; String name = ""; tmp = request.getParameter("name"); Calendar cal = Calendar.getInstance(); out.println("<html lang=\"ja\" >"); out.println("<head>"); out.println("<title>ContextParam Example</title>"); out.println("<style>"); out.println("</style>"); out.println("<meta http-equiv=\"Content-Type\" Content=\"text/html;charset=Shift_JIS\">"); out.println("</head>"); out.println("<body>"); out.println("<table>"); out.println("<p>"); Connection conn = null; String url = "jdbc:mysql://localhost/list2"; String user = "list2"; String password = "list2"; out.println("</table>"); try { Class.forName("com.mysql.jdbc.Driver").newInstance(); out.println("Mysqlのロードに成功"); conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); String sql = "SELECT * FROM goods"; ResultSet rs = stmt.executeQuery(sql); out.println("<table>"); while(rs.next()){ out.println("<tr>"); out.println("<td>" +rs.getInt("id") + "</td>"); out.println("<td>" +rs.getString("name") + "</td>"); out.println("<td>" +rs.getString("mail") + "</td>"); out.println("<td>" +rs.getInt("price") + "</td>"); out.println("<form method=\"GET\" action=\"./daytime3\">"); out.println("<input type=\"hidden\" name=\"id\" value=\""+ rs.getInt("id") + "\">"); out.println("<td><input type=\"submit\" value=\"更新\"></td>"); out.println("<td><input type=\"submit\" value=\"削除\"></td>"); out.println("</form>"); out.println("</tr>"); } out.println("</table>"); rs.close(); stmt.close(); } catch (ClassNotFoundException e){ out.println("ClassNotFoundException:" + e.getMessage()); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } catch (Exception e){ out.println("Exception:" + e.getMessage()); }finally{ try{ if (conn != null){ conn.close(); out.println("DBに切断"); }else{ out.println("データベースの接続ない"); } }catch (SQLException e){ } } out.println("</p>"); out.println("<tr>"); out.println("</tr>"); out.println("<A HREF='/dddd/daytime2'>登録</A>"); out.println("<A HREF='/dddd/daytime5'>アンケート</A>"); out.println("<div style=\"font-size: 40px; text-align: center; font-weight: bold\">"); out.println(cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DATE) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE)); out.println("</div>"); out.println("</body>"); out.println("</html>"); protected String decodeString(String str){ try{ byte[] byteData = str.getBytes("ISO_8859_1"); str = new String(byteData, "Shift_JIS"); }catch(UnsupportedEncodingException e){ return null; } return str; } } }

  • Java ApachePOIについて

    サーブレットとApachePOIについて質問です。 下記のソースで書き込んだセルをすべて黄色で塗りつぶしをしたいのですが、 ソースの書き方を教えてください。 以上、お願いします。 「ソース」 // 業務名前 String[] name4 = request.getParameterValues("gyoumuname"); for (int i = 0; i < name4.length; i++) { System.out.println(i + " " + name4[i]); name4[i] = new String(name4[i].getBytes("8859_1"), "UTF-8"); List outList=new ArrayList(); for (int i = 0; i < name4.length; i++) { outList.add(name4[i]); } for (int i = 0; i < outList.size(); i++) { Row row5 = sheet.getRow(8 + i); row5.getCell(3).setCellValue(new HSSFRichTextString(outList.get(i).toString())); } // 値を書き込んだエクセルを出力する FileOutputStream out = null; try { out = new FileOutputStream( "C:\\Users\\satou\\Desktop\\weekreport.xls"); workbook.write(out); } catch (IOException e) { System.out.println(e.toString()); } finally { try { out.close(); } catch (IOException e) { System.out.println(e.toString()); } } 以下省略。

  • 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
  • HTMLの質問なのかJAVAサーブレットの質問なのか微妙なのですがテー

    HTMLの質問なのかJAVAサーブレットの質問なのか微妙なのですがテーブルを一行に二つ表示したいのですが表示はできるんですが表示位置を中央にすることができなくて困ってます どうすれば中央にすることができますか? while(rs2.next()){ String name = rs2.getString("st.staff_name"); String kana = rs2.getString("st.staff_kana"); String birthday = rs2.getString("st.birthday"); String sex = rs2.getString("sm.sex"); String blood = rs2.getString("bm.blood_type"); String hight = rs2.getString("st.hight"); String weight = rs2.getString("st.weight"); String reration = rs2.getString("st.reration"); String mobile = rs2.getString("st.mobile_tel"); String tel = rs2.getString("st.tel"); out.println("<br></br><TABLE border=0 align=\"center\"><table border=1 align=\"left\"><tr><th width=150>氏名</th>"); out.println("<td width=200>"+name+"</td></tr><tr>"); out.println("<th>ヨミガナ</th>"); out.println("<td>"+kana+"</td></tr><tr>"); out.println("<th>生年月日</th>"); out.println("<td>"+birthday.replace("-", "/")+"</td></tr><tr>"); out.println("<th>性別</th>"); out.println("<td>"+sex+"</td></tr><tr>"); out.println("<tr><th>身長</th>"); out.println("<td>"+hight+"</td></tr>"); out.println("<tr><th>体重</th>"); out.println("<td>"+weight+"</td></tr>"); out.println("<tr><th>血液型</th>"); out.println("<td>"+blood+"</td></tr>"); out.println("<tr><th>携帯電話番号</th>"); String mtel=""; if(mobile!=null&&mobile.length()>0){ for (int i = 0; i < mobile.length(); i++) { char ch = mobile.charAt(i); if(i==3){ mtel+="-"; } if(i==7){ mtel+="-"; } mtel+=ch; if(mobile.length()==0){ mtel="-"; } } }else{ mtel="不所持"; } out.println("<td>"+mtel+"</td></tr>"); out.println("<tr><th>自宅電話番号</th>"); String ttel=""; for (int i = 0; i < tel.length(); i++) { char ch = tel.charAt(i); if(i==4){ ttel+="-"; } if(i==6){ ttel+="-"; } ttel+=ch; } out.println("<td>"+ttel+"</td></tr>"); out.println("<tr><th>続柄</th>"); out.println("<td>"+reration+"</td>"); out.println("</tr></table>");

  • java 緊急質問

    java プログラムの課題です このプログラムはファイルを読み込むと最初に十数行の空行が出来てしまいます またファイル内のメールアドレスのみを読み取りたいのですが@の入っていない文も読み取ってしまいます。 あと読み込んだメールアドレスの数だけカウントしたいのですがそこもうまくいっていません。 @を含む一文だけを読み取るようにしたいです。 import java.io.*; public class Email11 { public static void main(String[] argv) throws Exception { String input = "fileContainingEmails.txt"; String output = "copyPasteMyEmails.txt"; BufferedReader cin; cin = new BufferedReader(new InputStreamReader(System.in)); String userInput; System.out.println("Enter input file name [default name: fileContainingEmails.txt]"); userInput = cin.readLine(); if (userInput.equals("")) userInput = input; String name; if (userInput.equals(input)) name = output; else name = userInput; String userOutput; System.out.println("Enter output file name [default name: " + name + " ]"); userOutput = cin.readLine(); if (userOutput.equals("")) userOutput = name; System.out.println("Input FIle : " + userInput); System.out.println("Output FIle : " + userOutput); BufferedReader fin; fin = new BufferedReader(new FileReader(userInput)); String lineFromFile = ""; while (true) { if (!fin.ready()) break; fin.readLine(); lineFromFile = fin.readLine(); System.out.println(lineFromFile.substring(0, lineFromFile.indexOf('@')+1)); PrintWriter fout; fout = new PrintWriter(new FileWriter(userOutput, true)); fout.println(lineFromFile.substring(0, lineFromFile.indexOf('@')+1)); fout.close(); } fin.close(); int count = 0; for (int p = 0; p < lineFromFile.length(); p++) { if (lineFromFile.equals('@')); count++; } if (count == 0) System.out.println("Sorry, no email addresses were found in the file " + userInput); else System.out.println(count + "email addresses were found, and copied to " + userOutput); どのように書き直したらよいのでしょうか?

    • ベストアンサー
    • Java
  • サーブレットとMysqlについて

    画面のtextboxからDB(Mysql)にinsertするときの質問です。 皆さんのおかげでinsertすることができました。 しかし、textboxが一個で値も一つなのに、 insertするとDBには2行同じ値がinsertされます。 下記のソースのどこがいけないのでしょうか? ご教示をお願いします。 「ソース」 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name10 = request.getParameterValues("sonota"); for (int i = 0; i < name10.length; i++) { System.out.println(i + " " + name10[i]); name10[i] = new String(name10[i].getBytes("8859_1"), "UTF-8"); } Connection conn = null; CallableStatement cs = null; PreparedStatement stmt = null; ResultSet rs = null; String url = "jdbc:mysql://localhost/Sample_db"; String dbUser = "root"; String dbPass = "taratara"; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, dbUser, dbPass); String sql= "insert into Sample_table (name) values (?)"; stmt = conn.prepareStatement(sql); for (String n : name10) { stmt.setString(1, n); stmt.executeUpdate(); } int cnt = stmt.executeUpdate(); stmt.close(); RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); }catch(Exception e){ } } }

  • JAVAの初心者です.

    import java.io.*; class Sample3 { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int meny; int max = 0; int kingaku[]; kingaku = new int[5]; char ss[][]; ss = new char[5][80]; do{ String hako = br.readLine(); meny = Integer.parseInt(hako); System.out.println("1:入力とその長さ"); System.out.println("2:データ入力"); System.out.println("3:データ表示"); System.out.println("4:おしまい"); switch(meny){ case 1: System.out.println("文字を入力してください。"); String input = br.readLine(); System.out.println(input + "は" + input.length + "文字です。"); break; case 2: if (max == 0){ System.out.printin("登録をしてからお選びください。"); }else{ System.out.println("名前を入力してください。"); String ss[max] = br.readLine(); System.out.println("金額を入力してください。"); String kingaku[max] = br.readLine(); System.out.println(ss[max] + "さんで" + kingaku[max] + "を登録します。"); max++; } break; case 3: System.out.println("現在登録人数は" + max + "人です。"); for(int aa = 0;aa<max;aa++){ System.out.println(name[max] + kingaku[max]); } break; } }while(meny != 4); } } 上記のソースなのですが、コンパイルで今のところ2つエラーが出てしまうのです。 String ss[max] = br.readLine(); String kingaku[max] = br.readLine(); の所がエラーと表示されます。 javaは入力した文字を表示するだけでしたら    = Integer.paruseint()する必要ないですよね?? 初心者ならではの質問でごめんなさい。 ご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • この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 jspmodai4Servlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("Windows-31J"); response.setContentType("text/html; charset=Windows-31J"); PrintWriter out = response.getWriter(); String[] nam = request.getParameterValues("text1"); int x = Integer.parseInt(nam[0]); int y = Integer.parseInt(nam[1]); String ans = request.getParameter("radio1"); int z = 0; for(int i = 0; i < z; i++){ } if(ans.equals("value1")){ z = x + y; out.println("奇数の結果は" + z); } }else if (ans.equals("value2") && z%2==0 ){ z = x + y; out.println("偶数の結果は" + z); }else if(x == y){ out.println("エラー"); }else{ out.println("エラー"); } } } 入力フォームから二つの数値を入力させ、「計算」ボタンを押すと、 二つの数値を含む数値間の奇数のみ足し算するプログラム。 でif値がおかしいので奇数と偶数の判定ができません テキストの問題の答えがないので、 なんともいえませんが、 友達に聞いたら、例えば2つの入力フォームで1と4を記述したら、 偶数なら2と4で6となり、奇数なら1と3で4になるそうです。 よろしくお願いします

専門家に質問してみよう