我正在尝试使用JSP和tomcat创建一个Web界面。我有一张学生及其信息表,我希望用户能够搜索学生,然后我想显示该学生的所有信息(在表格中)。到目前为止,我已经显示了整个学生表并创建了一个搜索框,但现在我不知道当用户点击“搜索”时该怎么做。我正在考虑创建一个搜索数据库的函数,但我不知道如何做到这一点,因为我是JSP的新手。我该如何调用该功能?这是我到目前为止的代码:
<%@ page import="java.sql.*" %>
<%
String connectionURL =
"jdbc:postgresql://cop4715-postgresql.ucf.edu:8472/******?user=*******&password=******";
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
%>
<html><body>
<h1>Student Table</h1>
<table border = "2">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Birthday</th>
<th>Address</th>
<th>Email</th>
<th>Level</th>
</tr>
</thead>
<%
Class.forName("org.postgresql.Driver").newInstance();
connection = DriverManager.getConnection(connectionURL);
statement = connection.createStatement();
rs = statement.executeQuery("SELECT * FROM students");
ResultSetMetaData metadata = rs.getMetaData();
while (rs.next()) { %>
<tr>
<%
for(int i = 1; i <= metadata.getColumnCount(); i++){ %>
<td>
<%=rs.getString(i)%>
</td>
<%
}
%>
</tr>
<%
}
%>
</table>
<%
rs.close();
%>
<br>
<form action = test()>
Search By Name: <input type="text" name="Name">
<input type ="submit" value="Search">
</form>
</body></html>
答案 0 :(得分:2)
你对调用函数的想法是不正确的。为什么?因为,一个函数会调用在客户端执行的JavaScript,而你想要从服务器端检索数据库中的数据,就像你已经使用<% scriptlets %>
*那样做了以下
<form action = test()>
实现这一点的最简单方法是自行提交JSP,即HTML表单会将数据发布到已定义的相同JSP中。只需完全删除action
属性即可。
现在,要区分JSP是否应该检索有关所有学生或特定学生的数据,您可以更改代码以检查Name
请求属性,如下所示。
String name = request.getParameter("Name");
if (name != null && name.length() > 0) {
rs = statement.executeQuery("SELECT * FROM students WHERE Name = '" + name + "'");
} else {
rs = statement.executeQuery("SELECT * FROM students");
}
由于上面的查询现在已经参数化,现在强烈建议使用PreparedStatement
。
if (name != null && name.length() > 0) {
PreparedStatement ps = connection.prepareStatement(
"SELECT * FROM students WHERE Name = ?"); // ? = placeholder
ps.setString(1, name); // Bind the value to the placeholder
rs = ps.executeQuery(); // Execute the prepared statement and fetch results
}
PreparedStatement
有助于避免SQL注入攻击,并消除了笨重且容易出错的字符串连接。
* Scrptlets 很久以前就已被弃用。一个更好的方法是在处理所有JDBC代码之间放置一个 Servlet ,用结果填充request
对象,然后转发到然后,JSP只处理结果呈现给用户的方式。
答案 1 :(得分:0)
表单操作中存在错误。
<form action = test()>
Search By Name: <input type="text" name="Name">
<input type ="submit" value="Search">
</form>
您的表单操作必须指向另一个JSP或Servlet
<html>
<body>
<form action="student.jsp" method="GET">
Search By Name: <input type="text" name="Name">
<input type ="submit" value="Search"></form>
</body>
</html>
在student.jsp
中添加数据库代码,它将返回所有学生值。
如果您想根据搜索输入过滤值,请使用<% String name = (String)request.getParameter("Name")%>
从表单提交中获取输入值
并应用rs = statement.executeQuery("SELECT * FROM students WHERE your condition");
答案 2 :(得分:0)
Rachelle,您可以参考一个示例,该示例将员工详细信息显示为JSP的输出。此示例在适当的地方使用servlet,jsp,jdbc,dao和属性文件。您可以通过此示例进行修改,以便稍后修改以显示数据库中的学生详细信息。 示例链接 - http://theopentutorials.com/tutorials/java/design-patterns/post-redirect-get-prg-pattern-in-servlet-jsp/ 通过上面的教程,您将能够通过eclipse设置代码。