【问题标题】:JSP search bar functionJSP搜索栏功能
【发布时间】:2015-06-25 19:29:32
【问题描述】:

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

【问题讨论】:

  • 刚刚在PreparedStatement 上添加了一些示例使用代码。不惜一切代价避免使用串联的字符串查询。

标签: java html jsp tomcat


【解决方案1】:

您调用函数的思路不正确。为什么?因为,当您想从数据库中检索数据时,函数会调用在客户端执行的 JavaScript,这应该发生在服务器端,就像您已经使用 &lt;% scriptlets %&gt;*见下文

<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然后只处理结果如何呈现给用户。

【讨论】:

    【解决方案2】:

    您的表单操作有错误。

    <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 中

    • 添加将返回所有学生值的数据库代码。

      如果您想根据搜索输入过滤值,请使用&lt;% String name = (String)request.getParameter("Name")%&gt; 从表单提交中获取输入值 并应用rs = statement.executeQuery("SELECT * FROM students WHERE your condition");中的值

    【讨论】:

      【解决方案3】:

      Rachelle,您可以参考一个将员工详细信息显示为 JSP 输出的示例。此示例在适当的地方使用 servlet、jsp、jdbc、dao 和属性文件。您可以浏览此示例,然后进行修改以显示数据库中的学生详细信息。 示例链接 - http://theopentutorials.com/tutorials/java/design-patterns/post-redirect-get-prg-pattern-in-servlet-jsp/ 通过上述教程,您将能够通过 Eclipse 设置您的代码。

      【讨论】:

      • 为简单起见,使用单独的 servlet 来创建学生,并根据搜索条件搜索学生。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 2020-03-02
      相关资源
      最近更新 更多