如何使用servlet,jsps或两者正确显示Mysql表

时间:2011-06-26 06:56:43

标签: java mysql jsp servlets

我一直试图显示一个MySQL表格,但我确实成功了,但是我很难弄清楚如何使用从文本框中获取的查询来显示表格。

所以基本上这是我的设置,我有一个servlet,servlet有一个html按钮,它应该根据在提到的文本框中写的查询来更新正在显示的表。

使用此代码显示表格

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>");

}

我想要这样的东西(伪代码):

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

我不知道我是否应该使用jsp或servlet(或者两者都是标题建议的)来完成,所以我会考虑任何类型的响应。

3 个答案:

答案 0 :(得分:0)

我不知道你要做什么,所以我不能告诉你使用哪一个。原则上,servlet与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();
 }

答案 1 :(得分:0)

  • 使用具有表单的Jsp将数据存储在数据库中。
  • 使用Jsp。
  • 显示MySql表数据
  • 使用sevlet作为控制器,可用于控制流量。
  • 将DAO的类与可从数据库访问数据的方法一起使用。
  • 在sevlet中调用DAO方法并在对象中设置从DAO方法返回的值。
  • 通过在请求对象中将其设置为jsp来传递此对象。

    MVC architechture

  • 模型 - POJO,DAO

  • 查看 - JSP

  • 控制器 - Servlet

答案 2 :(得分:0)

JSP实际上是以不同的表示法写下的Servlet。 JSP代码被编译成Servlet代码,在使用它之前编译成一个常规的Servlet(曾经提出过这个可能认为当时是个好主意)。

在这种情况下,我认为您不需要额外的JSP,因为您已经有了Servlet。要做你想做的事,你可以创建一个HTML文件(yourForm.html),其中包含一个表单,允许输入查询并提交它,如:

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

您应该将它放在Web应用程序的“文档根目录”中,然后当您的服务器运行时,您应该能够以http://localhost:8080/yourForm.html之类的方式访问HTML文件。这假设您的Web应用程序上下文根是“/”和端口8080,它是在您的Web服务器中配置的。

在您的web.xml中,您需要以下内容:

<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>

其中'your.app.YourDbServlet'是servlet的完全限定类名。

在文本字段中输入sql查询并单击提交按钮后,表单将提交给http://localhost:8080/yourServlet。我选择HTTP-POST(而不是像另一个响应者那样使用HTTP-GET),因为我觉得这里更合适 - 讨论。这意味着您必须在servlet的doPost()方法而不是doGet()中处理请求。

现在继续:警告通知。请注意,从客户端获取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();
    }
}

请注意,为简洁起见,我没有发现任何异常(请注意,异常处理非常重要)。我确实将conn.close()放在finally块中,以确保始终尝试关闭数据库连接,即使代码中发生异常也是如此。