【问题标题】:How to properly display Mysql tables using servlets, jsps or both如何使用 servlet、jsps 或两者正确显示 Mysql 表
【发布时间】:2011-06-26 06:56:43
【问题描述】:

一段时间以来,我一直在尝试显示 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(或两者都如标题所示)来完成,所以我会考虑任何类型的响应。

【问题讨论】:

    标签: java mysql jsp servlets


    【解决方案1】:

    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应用程序的'document root'目录中,然后当你的服务器运行时,你应该能够访问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 块中,以确保始终尝试关闭数据库连接,即使代码中发生异常也是如此。

    【讨论】:

      【解决方案2】:

      我不知道你想做什么,所以我不能告诉你使用哪一个。原则上,servlet 与 JSP(JSF) 一起使用来实现 MVC 架构。

      你需要做的是解决你描述为问题的问题是你需要一个类似的:

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

      在 Servlet 中你有这样的东西:

       public doGet(httpServeletRequest request, httpServletResponse response){
             String tableData=getParameter("tableData");
             //call the method you have
             if(tableData!=null)showDB();
       }
      

      【讨论】:

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

          MVC 架构

        • 模型 - POJO's ,DAO

        • 视图 - JSP

        • 控制器 - Servlet

        【讨论】:

          猜你喜欢
          • 2013-09-08
          • 2014-08-18
          • 1970-01-01
          • 2012-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-16
          • 2012-10-30
          相关资源
          最近更新 更多