• ベストアンサー
  • すぐに回答を!

javaの掲示板について

サーブレットの削除機能の抜粋なのですが public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { MessageDao dao = new MessageDao(); String sendMessage = request.getParameter("sendMessage"); String deleteMessage = request.getParameter("deleteMessage"); //削除 if(deleteMessage != null){ String sql = "SELECT * FROM MESSAGE_TABLE where ID ="; String rsPassword = request.getParameter("rsPassword"); String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); if (deletepassword.equals(sql) || deleteid.equals(sql)){ dao.deleteMessage(delete); success = "削除しました。"; request.setAttribute("success", success); } if (!deletepassword.equals(sql) || deleteid.equals(sql)){ errorpass = "パスワードが違います。"; request.setAttribute("errorpass", errorpass); } } ------------------------------------------------------------------------------------ jsp部分 <input type="deletepassword" size="20"> <input type="hidden" name="id" value="<%= message.getId() %>"> <input type="hidden" name="rsPassword" value="<%= message.getPassword() %>"> <input type="submit" name="deleteMessage" value="削除"> それぞれをこの様な書き方で記述した場合、削除ボタンを押された際に削除フォームに入力されたパスワードとidをデータベース内に格納されているパスワードとidと比較して削除、もしくはエラーという様にできているでしょうか?できていなければ変更点の御指摘をお願いします。 ------------------------------------------------------------------------------------ <% String errorpass = (String)request.getAttribute("errorpass"); if(errorpass != null){ out.println(errorpass); } %> またjspの表示部分を上記のようにしているのですが、out.printlnを使わないで記述する場合どのように書けばよいのでしょうか? よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数743
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • teketon
  • ベストアンサー率65% (141/215)

>String sql = "SELECT * FROM MESSAGE_TABLE where ID ="; SQLを使用してDBへアクセスして結果を受け取ってください。 MessageDaoクラスで参考になるようなことをやっているのではないですか? ><input type="hidden" name="rsPassword" value="<%= message.getPassword() %>"> hiddenはHTMLのソースから参照できるので、 パスワードの値をユーザ側へ送信してはいけません。 これは技術的にはできるけど、セキュリティ的には普通やらないよねといった指摘です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。この様に改良してみたのですがコンパイルエラーが起こります。 ------------------------------------------------------- Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = this.getConnection(); String sql = "SELECT * FROM MESSAGE_TABLE where ID =" + deleteid; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()) { String password = rs.getString("PASSWORD"); } } finally { this.close(rs); this.close(pstmt); this.close(conn); } --------------------------------------------------- エラー: シンボルを見つけられません conn = this.getConnection();       ^ と表示されます。これはなぜ起こるのでしょうか?

関連するQ&A

  • javaの掲示板について

    サーブレットの削除機能の抜粋なのですが public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { MessageDao dao = new MessageDao(); String sendMessage = request.getParameter("sendMessage"); String deleteMessage = request.getParameter("deleteMessage"); if(deleteMessage != null){ String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); String rsPassword = request.getParameter("rsPassword"); if (deletepassword.equals("rsPassword") || deleteid.equals("id")){ Message message = new Message(); message.setId(Integer.parseInt(deleteid)); } if (!deletepassword.equals("rsPassword") || deleteid.equals("id")){ } } 削除成功や、削除パスが違う時に投稿用jspに文を表示して、かつレコードを消すという処理をしたいのですが、そのような記述はどのようにすればいいのでしょうか? 今のままだと判定だけして終わっていると思うのですが思いつきません。 よろしくお願いします。

  • javaの掲示板について

    今現在パスワードを比較して一致していれば削除としたのですがjava.sql.SQLException: Can not issue data manipulation statements with executeQuery().というエラーがtomcatにでます。 サーブレットはこう書いています //削除 if(deleteMessage != null){ String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); String rspassword = dao.getPassword(deleteid); if (deletepassword.equals(rspassword)){ dao.deleteMessage(delete); success = "削除しました。"; request.setAttribute("success", success); } else{ errorpass = "パスワードが違います。"; request.setAttribute("errorpass", errorpass); } } 比較用のパスワードをデータベースから取り出すDAOはこうしています。 public int deleteMessage(String strid) throws Exception { Vector messageList = new Vector(); int i = 0; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ conn = this.getConnection(); String sql = "delete from MESSAGE_TABLE where ID = ? "; pstmt = conn.prepareStatement(sql); pstmt.setString(1, strid); rs = pstmt.executeUpdate(); } finally { this.close(rs); this.close(pstmt); this.close(conn); } return i; } public String getPassword(String id) throws Exception { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String rspassword = null; try { String deleteid = null; conn = this.getConnection(); String sql = "SELECT * FROM MESSAGE_TABLE where ID = ? "; pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); rs = pstmt.executeQuery(); if(rs.next()){ rspassword = rs.getString("PASSWORD"); } } finally { this.close(rs); this.close(pstmt); this.close(conn); } return rspassword; } データベースからパスワードがとれていないから起きているのだとは思うのですが、どのようにしたらとれるでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • javaの掲示板について

    サーブレットにおいて未入力のチェックを行っているのですがこのままだと、未入力の表示と一緒に空欄の投稿ができてしまいます。 String sendMessage = request.getParameter("sendMessage");               String name = request.getParameter("name"); if(name.equals("")){ errorname = "名前を入力してください"; request.setAttribute("errorname",errorname); } Message message = new Message(); message.setName(name); Vector messageList = dao.getMessageList(); request.setAttribute("MESSAGE_LIST", messageList); ServletContext sc = this.getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/bbs.jsp"); rd.forward(request, response); } catch (Exception e) { e.printStackTrace(); } 空欄の投稿がされないようにするにはどうすればいいのでしょうか? 全く思いつかないので詳しく説明をお願いします。

    • ベストアンサー
    • Java

その他の回答 (1)

  • 回答No.2
  • teketon
  • ベストアンサー率65% (141/215)

>エラー: シンボルを見つけられません >conn = this.getConnection();       ^ >と表示されます。これはなぜ起こるのでしょうか? 貼り付けたクラスのインスタンスがgetConnectionメソッドを持っていないから。

共感・感謝の気持ちを伝えよう!

関連するQ&A

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

  • Tomcatを使用したWebログイン画面

    Tomcatを使用して、 サーバ(logintest.html)にブラウザからアクセスしてログイン画面を表示させます。 ユーザIDがuser、パスワードがpasswordだった場合は「ログイン成功」と表示し、それ以外は「ログイン失敗」と表示させます。 Servletのソース(loginteset.java)がコンパイルエラーになります。 アドバイスをいただけませんか? logintest.html <html> <head> <meta http-equiv="content-type" content="text/html; charset=Windows-31J" /> <title>Login</title> </head> <body> <form action="./checkservlet" method="post">   ユーザIDを入力してください : <input type="text" name="userid" size="20" /> <br><br>   パスワードを入力してください : <input type="password" name="userpass" size="20" /> <br><br> <input type="submit" value="ログイン" /> </form> </body> </html> logintest.java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FormServletTest extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html;charset=Windows-31J"); } String id = request.getParameter("userid"); String pass = request.getParameter("userpass"); if(id.equals("user") && pass.equals("password")){ out.println("ログイン成功"); } else { out.println("ログイン失敗"); } }

    • ベストアンサー
    • Java
  • Error 500

    Servletをやってます。 String同士を比較しようとするとコンパイルエラーではなくInternal Servlet Errorになります。 問題の行は if((request.getParameter("order_flg")).equals("on"))書いています。 request.getParameter("order_flg")の戻り値は "on"になってます、出力して確認済み。 そしてgetParameterの戻り値はString型なのでインスタンスメソッドを使いString同士の比較をするためにequalsをつかいました。 どうしてエラーがでるのですか? よろしくお願いします。

    • ベストアンサー
    • 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
  • 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

  • JSPとサーブレットの連携

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("windows-31j"); response.setContentType("text/html;charset=windows-31j"); PrintWriter out=response.getWriter(); request.setCharacterEncoding("windows-31j"); String st = request.getParameter("ti"); String s2 = request.getParameter("ho"); String s3 = request.getParameter("ke"); Connection con = null; ResultSet rs = null; Statement stmt = null; try { String url = "jdbc:mysql:///o?user=&password=2&useUnicode=true&characterEncoding=windows-31J"; con = (Connection) DriverManager.getConnection(url); stmt = (Statement) con.createStatement(); String sql = "INSERT INTO o_tb(tiiki,houmon,keiyaku) VALUES('" + request.getParameter("ti")+ "','" + request.getParameter("ho")+ "','" + request.getParameter("ke")+ "') "; int rss=0; rss = stmt.executeUpdate(sql); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } JSPから上記のサーブレットに値を渡し、DB格納までは上手くいきました。 ですが当然上記だと真っ白なサーブレットページが表示されるだけです。 JSPのボタンを押し→サーブレットでDB格納したら、またJSPページを表示させたいんですが、どうしたらいいですか??

    • ベストアンサー
    • Java
  • Java PostgreSQL スクリプトレット

    スクリプトレットを使用し、ログイン画面を作成しようと考えています。 <%@ page import="java.io.*,javax.servlet.*,javax.servlet.http.*,java.net.*,java.sql.*" %> <% request.setCharacterEncoding("Shift_JIS"); String id = (String)request.getParameter("id"); String pass = (String)request.getParameter("pass"); String drv = "org.postgresql.Driver"; String dsn = "jdbc:postgresql://localhost:5432/?user=postgres&password=aipo"; String sql = "SELECT * FROM TURBINE_USER"; Connection cn = DriverManager.getConnection(dsn); Statement st = cn.createStatement(); ResultSet rs = st.executeQuery(sql); while (rs.next()) { out.println("<P>" + rs.getString(1) + "</P>"); } rs.close(); st.close(); cn.close(); %> 上記を実行すると org.apache.jasper.JasperException: Exception in JSP: /get.jsp:18 となり、 ResultSet rs = st.executeQuery(sql); の時点でエラーとなります。 Statement st = cn.createStatement(); まで正常に動作するのは確認済みです。 類似する質問に http://oshiete1.goo.ne.jp/qa3522131.html がありましたが、解決できませんでした。 どこが間違っていますでしょうか。

  • ブラウザーでの入力値をサーブレットで取得する方法

    サーブレットの開発を行っていますが、ブラウザー側で 入力したパラメーターをサーブレットで受け取りたいのですがうまくいきません。 受け取りたいのは、以下のHTMLで作成したテキストボックスへの入力値です <form name="form7" method="post" action=""> <p> <input type="text" name="textfield2" size="4" maxlength="4"> 年 <input type="text" name="textfield" size="2" maxlength="2"> 月</p> </form> ブラウザー側からは <form action="http://localhost/servlet/yuushi" method=post> の指定を行っています。 サーブレットでの受け取り方は、 String p=request.getParameter("textfield2"); String p1=request.getParameter("textfield"); としましたが、p、p1とも何の値も入りませんでした。 getParameterで取得できると思ったのですが取得できませんでした。 値の取得方法の御教示をお願いいたします。

    • ベストアンサー
    • 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の課題について教えてください

    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になるそうです。 よろしくお願いします