• 締切済み

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に文を表示して、かつレコードを消すという処理をしたいのですが、そのような記述はどのようにすればいいのでしょうか? 今のままだと判定だけして終わっていると思うのですが思いつきません。 よろしくお願いします。

  • ofuoo
  • お礼率76% (23/30)
  • Java
  • 回答数6
  • ありがとう数4

みんなの回答

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

>なのでその表示方法の記述が思いつかないし、調べてもうまくはまらないので質問をさせていただいているのです。 そこからですか。やっぱり整理できていないように見えます。 >削除ボタンが押される >↓ >押された投稿のIDと入力されたパスワードのチェック >↓ >一致していれば該当の投稿を消し掲示板先頭に”削除しました。”、 >一致していなければ”パスワードが違います”と表示 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { MessageDao dao = new MessageDao(); //押された投稿のIDと入力されたパスワードのチェック //下記は、IDと入力されたパスワードの値でもないから不要 String sendMessage = request.getParameter("sendMessage"); String deleteMessage = request.getParameter("deleteMessage"); //deleteMessageは受け取らないので不要 if(deleteMessage != null){ //下記は、IDの値であるから必要。 String deleteid = request.getParameter("id"); //下記は、パスワードの値であるから必要。 String deletepassword = request.getParameter("deletepassword"); //下記は、IDと入力されたパスワードの値でもないから不要。 String rsPassword = request.getParameter("rsPassword"); //処理追加1.IDのパスワードをDBから取得する処理 //処理追加2-1.IDの入力されたパスワードとDBから取得したパスワードが一致するか? //処理追加2-2.一致しなければパスワードが違いますとメッセージする //処理追加2-3.一致していればDBから該当メッセージを削除し(DAOのdeleteMessageメソッド)、削除しましたとメッセージする //処理追加3.メッセージを表示する //処理追加したので以下は不要。 if (deletepassword.equals("rsPassword") || deleteid.equals("id")){ Message message = new Message(); message.setId(Integer.parseInt(deleteid)); } //処理追加したので以下は不要。 if (!deletepassword.equals("rsPassword") || deleteid.equals("id")){ } } 追加した処理を純に記述すればいいはずです。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.5

>>ですので、そういった部分や私の最初の質問に対してのわかりやすい解説の載っているサイトなどを教えていただけませんか? このような初心者レベルの勉強では、体系だった学習が必要です。 ネットというか、サイトで勉強するのはダメです。 大手書店には、イロイロとプログラム入門の書籍がありますので、自分で解るレベルの本を探して購入して勉強しましょう。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.4

>>投稿ページと一覧表示が同じ2ちゃんねるみたいな形で作っているので、他のページにいかないように作ろうと考えています。 私は、2ちゃんねるがどんな形か知りませんけど、他のページに移動しない動きは、ちょっと難しくなると思います。 jspとかプログラムうんぬんするよりも前に、思っている動作が実現できるフローチャート的なものはちゃんと作っていますか? もしくは、フロー的なものは作ってなくとも、頭の中でそういうことが明確になっていますか? 画面と制御というかロジックが明確になっていないなら、プログラムを作り上げるのは質問者には、まだまだ無理です。

ofuoo
質問者

お礼

ありがとうございます。 そうですね、確かに未だ勉強不足だと思います。 ですので、そういった部分や私の最初の質問に対してのわかりやすい解説の載っているサイトなどを教えていただけませんか?

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

>削除ボタンが押される >↓ >押された投稿のIDと入力されたパスワードのチェック >↓ >一致していれば該当の投稿を消し掲示板先頭に”削除しました。”、 >一致していなければ”パスワードが違います”と表示 では、わかっているところまでプログラムを書きましょう。 そしてわからないところを明確にしてください。

ofuoo
質問者

お礼

なのでその表示方法の記述が思いつかないし、調べてもうまくはまらないので質問をさせていただいているのです。

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

拝見した感じでは、プログラムを書く以前に、どの手順を実行すれば削除できるか、 その手順が整理できていないように感じられます。 成功時の画面遷移、失敗時の画面遷移、画面間で受け渡すデータの種類、DB更新時の変更内容などなど。 >jspファイルに直接書くやり方や、エラーページに飛ばすやり方や、jspを使わずに全ての処理をサーブレットに書くやり方なら確かにたくさん出てくるのですが、目当ての書き方を見つけられ無かったのです。 大体はそのやり方です。違うやり方をしたいならば、どんなやり方をしたいのか明記してください。

ofuoo
質問者

お礼

ありがとうございます。 手順としては 削除ボタンが押される ↓ 押された投稿のIDと入力されたパスワードのチェック ↓ 一致していれば該当の投稿を消し掲示板先頭に”削除しました。”、一致していなければ”パスワードが違います”と表示 というように考えています。 投稿ページと一覧表示が同じ2ちゃんねるみたいな形で作っているので、他のページにいかないように作ろうと考えています。

ofuoo
質問者

補足

おっしゃる通り最初に質問の情報が少なかったです。 申し訳ございません。 こちらがDAOファイルの削除部分の抜粋です。 public int deleteMessage(String id) 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 = " + id; pstmt = conn.prepareStatement(sql); i = pstmt.executeUpdate(); } finally { this.close(rs); this.close(pstmt); this.close(conn) } return i; }

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>削除成功や、削除パスが違う時に投稿用jspに文を表示して、かつレコードを消すという処理をしたいのですが、そのような記述はどのようにすればいいのでしょうか? そういうロジックを考えて、それを設計し、いくつかのソースコードに分けて一生懸命作りこむことになると思います。 自分で考えるのは大変ですから、同様な機能を持っているオープンソースを探すとか、書籍のコード例を参考にしながら、作っていくほうが早いと思います。 言語制限が無く、できるだけ楽して作りたい方は、Javaを使わず、PHPやRuby on Railsなどを選択するでしょうけどね。

ofuoo
質問者

お礼

ありがとうございます。 jspファイルに直接書くやり方や、エラーページに飛ばすやり方や、jspを使わずに全ての処理をサーブレットに書くやり方なら確かにたくさん出てくるのですが、目当ての書き方を見つけられ無かったのです。 どこか御存じないでしょうか? よろしくお願いいたします。

関連する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 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を使わないで記述する場合どのように書けばよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • 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
  • この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になるそうです。 よろしくお願いします

  • 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質問

    @Override protected String execute(HttpServletRequest request, HttpServletResponse response) { String itemName = request.getParameter("iName"); String jancode = request.getParameter("code"); if (!isValidInput(Name, code)) { return "/Order"; } /** * 入力値のチェックを行う */ private boolean isValidInput(String Name, String code,) { /** 未入力チェック処理(省略)*/ return false; } } これをtrueの場合は request.setAttribute("itemName",Name); request.setAttribute("janCode",code); try { Part image = request.getPart("image"); Long fileName = System.currentTimeMillis(); image.write(fileName.toString()); request.setAttribute("fileName", fileName); } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "/WEB-INF/view/orderstragedata.jsp"; } といった処理をしたいのですがtrueはどのように作成すればよいのでしょうか?

  • doPost+doGet

    public class Class{ public void doPost (HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException try{ //処理 }catch(Exception e){ e.printStackTrace(); } } public void doGet (HttpServletRequest request,HttpServletResponse response){ try{ doPost(request, response); }catch(Exception e){ e.printStackTrace(); } } } この処理は、doGetで送信されたものをdoPostに送って処理するということでよろしいのでしょうか? 分かる方がいましたら、よろしくお願いします。

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

  • 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
  • サーブレット初歩に関して。

    package oty; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Otys */ public class Otys extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Otys() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } 初期状態がこんな状態なんですが、これになにを追加したらhelloworldとでますか?? 普通にJAVA入門みたいに、System.out.printlnしたらいいんでしょうか??

    • ベストアンサー
    • Java
  • 入力チェックとエラーメッセージの表示

    Javaについて勉強している者です。 現在、エントリー(登録)画面で入力した文字の検証処理をサーバーサイドで行い、 エラーがある場合は再度ページを表示し、その際には一緒に エラーメッセージを添える処理を作成したいと考えております。 入力チェックを行うクラスを作ってみたものの、 エラーメッセージをどのように組み込めば良いかという点に悩んでおります。 まとめてみると、期待する処理の流れは次の通りです。 1、エントリー画面に入力された文字の検証処理を行う 2、エラーがある場合にはJSPを再度表示(entry.jsp) 3、再度表示した際にエラーメッセージを添える。 下記はコードの一部です。 //INSERTChecker.java //未入力チェック public boolean requiredCheck(String input){ if(input.equals("")){ return false; } return true; } //数値チェック// public boolean numberCheck(String input){ for(int i = 0; i < input.length(); i++){ if(!Character.isDigit(input.charAt(i))){ return false; } } return true; } } //Validator.java public class Validator extends HttpServlet{ public boolean validate(HttpServletRequest req) throws ServletException,IOException{ request.setCharacterEncoding("Windows-31J"); String id = req.getParameter("id"); String pass = req.getParameter("pass"); String name = req.getParameter("name"); String tel = req.getParameter("tel"); InputChecker check = new InputChecker(); //未入力事項がないかチェック check.requiredCheck(id); check.requiredCheck(pass); check.requiredCheck(name); check.requiredCheck(tel); //数字のみが入力されているかをチェック check.numberCheck(tel); return true; //Servlet else if(select != null && select.equals("エントリー")){ String id = req.getParameter("id"); String pass = req.getParameter("pass"); String name = req.getParameter("name"); String tel = req.getParameter("tel"); Bean bean=new Bean(); bean.setId(id); bean.setPass(pass); bean.setName(name); bean.setTel(tel); Entry cEntry=new Entry();//登録クラス cEntry.entry(bean); Validator vEntry=new Validator(); vEntry.validate(req); req.setAttribute("INSERT",cEntry); target = "/top.html";//登録後、topページに戻る } request辺りがキーワードになるのかな、と考え、色々調べたのですが 解決策は見つかりませんでした。 記述方法やアドバイス等御座いましたら、ご教授お願いいたします。 長文失礼いたしました。

専門家に質問してみよう