JSP搜索栏功能

时间:2015-04-19 01:17:13

标签: java html jsp tomcat

我正在尝试使用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>

3 个答案:

答案 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设置代码。