我一直试图显示一个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(或者两者都是标题建议的)来完成,所以我会考虑任何类型的响应。
答案 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来传递此对象。
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块中,以确保始终尝试关闭数据库连接,即使代码中发生异常也是如此。