2011-06-26 4 views
-2

私はしばらくの間、MySQLテーブルを表示しようとしていましたが、成功しましたが、クエリを使用してテーブルを表示する方法テキストボックスから取得します。サーブレット、jsps、またはその両方を使用してMysqlテーブルを正しく表示するには

基本的にこれは私の設定です。私はサーブレットを持っています。サーブレットは、上記のテキストボックスに記述されたクエリに従って表示されているテーブルを更新するhtmlボタンを持っています。私はJSPまたはAを使用する必要がある場合、私は知らない

if (Button1.isPressed()){ 
    showDB(out, rs); 
} 

テーブルは、このコード

protected void showDB(PrintWriter out, ResultSet rs) throws SQLException { 


    ResultSetMetaData rsMD = rs.getMetaData(); 
    int counter = 1; 

    while (rs.next()) { 

     //Prints column names 
     if (counter <= 1) { 

      out.println("<table border=5>"); 

      out.println("<thead>"); 

      for (; counter <= rsMD.getColumnCount(); counter++) { 

       out.println("<th>" + rsMD.getColumnName(counter) + "</th>"); 

      } 

      out.println("</thead>"); 
     } 

     counter = 1; 

     out.println("<tr>"); 

     // Prints row data 
     for (; counter <= rsMD.getColumnCount(); counter++) { 

      out.println("<td>" + rs.getString(counter) + "</td>"); 
     } 

     out.println("</tr>"); 
    } 

    out.println("</tbody>"); 
    out.println("</table>"); 

} 

を使用して表示され、私はこのような何か(擬似コード)を持っていると思いますサーブレット(タイトルの示唆どおりに)を達成するために、私はあらゆる種類の応答を考慮に入れます。

答えて

0

A JSPは実際には異なるに書き留めサーブレットです表記JSPコードはサーブレットコードにコンパイルされています。サーブレットコードは、サーブレットを使用する前に通常のサーブレットにコンパイルされています(これはおそらく当時考えられていたと思います)。

この場合、すでにサーブレットを持っているので追加のJSPは必要ありません。あなたが望むことをするには、HTMLファイル(yourForm。htmlの)クエリを入力し、それを提出できるようにすることで、フォーム、のようなもので:あなたは「ドキュメントルート」Webアプリケーションのdirectoyでこれを置くべき

<form action="yourServlet" method="post"> 
    <input type="text" name="sql-query/> 
    <input type="submit"/> 
</form> 

、その後、あなたのサーバーは、あなたに必要があります実行されている場合http://localhost:8080/yourForm.htmlのようなHTMLファイルにアクセスできます。これは、Webアプリケーションのコンテキストルートが「/」でポート8080(Webサーバーで設定されている)を前提としています。あなたのweb.xmlに

は、次のようなものが必要:「your.app.YourDbServlet」はサーブレットの完全修飾クラス名である

<servlet> 
    <servlet-name>yourDbServlet</servlet-name> 
    <servlet-class>your.app.YourDbServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>yourDbServlet</servlet-name> 
    <url-pattern>/yourServlet</url-pattern> 
</servlet-mapping> 

テキストフィールドにsqlクエリを入力して[送信]ボタンをクリックすると、フォームはhttp://localhost:8080/yourServletに送信されます。私は議論のためにここがより適切だと思うので、HTTP-POST(HTTP-GETの代わりに別のレスポンダのように)を選んだ。つまり、doGet()ではなくサーブレットのdoPost()メソッドでリクエストを処理する必要があります。

今すぐに進む前に:警告通知。あなたのクライアントからSQLクエリを取得し、それをデータベースで無防備に発射することは、大きなセキュリティ上の危険であることを認識してください。クエリは、データベースユーザーのアクセス権に応じて、データの削除または破損、テーブルの削除などを行う可能性があります。現実の生活のシステムでは、これは通常、悪い考えです。この問題のアイデアを得るには、「SQL injection」も読んでください。私は(例外処理は重要ですが、それに見て)簡潔にするために例外をキャッチしていないことを

String sqlQuery = getParameter("sql-query"); 
PrintWriter out = response.getWriter(); 
Connection conn = null; 
try { 
    Class.forName("com.mysql.jdbc.Driver"); 
    String url = "jdbc:mysql://localhost/yourdatabase"; 
    conn = DriverManager.getConnection(url, "username", "password"); 
    Statement st = conn.createStatement(); 
    ResultSet rs = st.executeQuery(sqlQuery); 
    showDB(out, rs); 
} 
finally { 
    if (conn != null) { 
     conn.close(); 
    } 
} 

注:データベースに対してクエリを実行するには

はこのような何かを行います。 finallyブロックにconn.close()を挿入して、コード内で例外が発生しても、データベース接続を閉じる試みが必ず行われるようにしました。

0

あなたは何をしようとしているのかわかりませんので、どのものを使用するかは分かりません。原則としてJSP(JSF)でサーブレットを使用してMVCアーキテクチャを実装しています。あなたが疑問として記述する問題を解決するために何をする必要があるか

はあなたが等から必要があるということです。

<form action=" /*the url where you get data */ " method="get"> 
    <input name="tabledata" type="button" value="getData"> 
</form> 

とServeletに、あなたはこのようなものがあります:

public doGet(httpServeletRequest request, httpServletResponse response){ 
     String tableData=getParameter("tableData"); 
     //call the method you have 
     if(tableData!=null)showDB(); 
} 
0
  • をデータベースにデータを格納するには、Jspフォームを使用します。
  • MySqlテーブルのデータを表示するには、Jspを使用します。
  • フローを制御するために使用できるコントローラとしてsevletを使用します。
  • データベースからのデータにアクセスするメソッドでDAOのクラスを使用します。
  • sevletでDAOメソッドを呼び出し、オブジェクトセットでDAOメソッドから返された値を設定します。
  • このオブジェクトをリクエストオブジェクトにjspに設定して渡します。

    MVC architechture

  • モデル - POJOの、DAO

  • ビュー - JSP

  • コントローラ - サーブレット

関連する問題