Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用servlet、JSP或两者正确显示Mysql表_Java_Mysql_Jsp_Servlets - Fatal编程技术网

Java 如何使用servlet、JSP或两者正确显示Mysql表

Java 如何使用servlet、JSP或两者正确显示Mysql表,java,mysql,jsp,servlets,Java,Mysql,Jsp,Servlets,我尝试显示MySQL表已经有一段时间了,我确实成功了,但是我很难弄清楚如何使用从文本框中获取的查询来显示表 基本上这是我的设置,我有一个servlet,servlet有一个html按钮,它应该根据在提到的文本框中编写的查询来更新显示的表 表格将使用此代码显示 protected void showDB(PrintWriter out, ResultSet rs) throws SQLException { ResultSetMetaData rsMD = rs.getMetaData

我尝试显示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>");

}

我不知道应该使用jsp还是servlet(或如标题所示,两者兼而有之)来完成,因此我将考虑任何类型的响应。

我不知道您想做什么,所以我无法告诉您使用哪一种。原则上,servlet与JSP(JSF)一起用于实现MVC体系结构

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

<form action=" /*the url where you get data */ " method="get">
  <input name="tabledata" type="button" value="getData">
</form>
  • 使用具有表单的Jsp在数据库中存储数据
  • 使用Jsp显示MySql表数据
  • 使用sevlet作为控制器,可用于控制流量
  • 将DAO的类与从数据库访问数据的方法一起使用
  • 在sevlet中调用DAO方法,在对象中设置从DAO方法返回的值
  • 通过在请求对象中将该对象设置为jsp来传递该对象

    MVC架构

  • 模型-POJO's,DAO

  • 视图-JSP

  • 控制器-Servlet


    • 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>
      
      <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>
      
      请注意,为了简洁起见,我没有捕获任何异常(请注意,异常处理非常重要)。我确实将conn.close()放在finally块中,以确保始终尝试关闭数据库连接,即使代码中出现异常

      <form action="yourServlet" method="post">
          <input type="text" name="sql-query/>
          <input type="submit"/>
      </form>
      
      <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>
      
      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();
          }
      }