Servlet查詢搜索數據示例

在這裏,您將學習如何按給定關鍵字搜索對應數據庫表字段的結果。假設有一個表的結構和數據記錄如下:

DROP TABLE IF EXISTS `servlet_user`;
CREATE TABLE `servlet_user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL DEFAULT '',
  `passwd` varchar(32) NOT NULL DEFAULT '',
  `email` varchar(32) DEFAULT NULL,
  `city` varchar(24) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of servlet_user
-- ----------------------------
INSERT INTO `servlet_user` VALUES ('1', 'maxsu', '123456', '[email protected]', '廣州');
INSERT INTO `servlet_user` VALUES ('2', 'minsu', '233123', '[email protected]', '海口');
INSERT INTO `servlet_user` VALUES ('3', 'avguser', 'fdsa123', '[email protected]', '廣州');
INSERT INTO `servlet_user` VALUES ('4', 'sumuser', 'fdsj124', '[email protected]', '北京');

在這個例子中,我們從servlet中查詢數據庫servlet_user表中的數據並將結果打印。爲了簡化程序,我們在Servlet中執行所有數據庫操作邏輯。但在現實應用中最好將它與servlet文件分開,如把數據庫操作部分放到獨立的DAO文件中。

按給定關鍵字搜索的示例

打開Eclipse,創建一個動態Web項目:SearchExample,其完整的目錄結構如下所示 -

Servlet查詢搜索數據示例

以下是這個項目中的幾個主要的代碼文件。

在這個例子中,創建了以下幾個文件 -

  • index.html - 表單顯示
  • Search.java - 執行輸入關鍵字收集,連接數據庫和查詢操作的Servlet類。
  • web.xml - 項目Servlet的配置和描述符文件。

文件:index.html

該頁面顯示從用戶輸入的關鍵字的表單,並將此數據轉發到servlet,servlet負責根據給定的關鍵字查詢表中的數據記錄並顯示結果。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>根據關鍵字搜索示例</title>
</head>
<body>
    <div style="margin: 0px; text-align: center;">
        <form action="search">
            關鍵字:<input type="text" name="keyword" /><input type="submit"
                value="搜索" />
        </form>
    </div>
</body>
</html>

文件:Search.java

這是根據用戶輸入關鍵字,然後查詢數據庫中相關記錄並打印匹配數據的記錄的servlet文件。 在這個頁面中,我們顯示數據庫的列名和數據,所以使用ResultSetMetaData接口。

package com.yiibai;

import java.io.*;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;

public class Search extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();

        String keyword = request.getParameter("keyword");
        //int keyword = Integer.valueOf(keyword);
        if(keyword==null) {
            keyword = "";
        }
        try {
            Connection con = null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                con = DriverManager.getConnection("jdbc:mysql://localhost/testdb?useSSL=false&characterEncoding=utf8",
                        "root", "123456");
            } catch (Exception e) {
                System.out.println(e);
            }

            PreparedStatement ps = con.prepareStatement("SELECT * FROM `servlet_user` where name LIKE ?");
            ps.setString(1, "%"+keyword+"%");

            out.print("<table width=50% border=1>");
            out.print("<caption>Result:</caption>");

            ResultSet rs = ps.executeQuery();

            /* 打印表字段的名稱 */
            ResultSetMetaData rsmd = rs.getMetaData();
            int total = rsmd.getColumnCount();
            out.print("<tr>");
            for (int i = 1; i <= total; i++) {
                out.print("<th>" + rsmd.getColumnName(i) + "</th>");
            }
            out.print("</tr>");

            /* Printing result */

            while (rs.next()) {
                out.print("<tr><td>" + rs.getInt(1) + "</td><td>" + rs.getString(2) + "</td><td>" + rs.getString(3)
                        + "</td><td>" + rs.getString(4) + "</td><td>" + rs.getString(5) + "</td></tr>");

            }
            out.print("</table>");

        } catch (Exception e2) {
            e2.printStackTrace();
        }

        finally {
            out.close();
        }

    }
}

文件:web.xml

這是向容器提供servlet信息的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>SearchExample</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Search</servlet-name>
        <servlet-class>com.yiibai.Search</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Search</servlet-name>
        <url-pattern>/search</url-pattern>
    </servlet-mapping>
</web-app>

在編寫上面代碼後,部署此Web應用程序(在項目名稱上點擊右鍵->」Run On Server…」),打開瀏覽器訪問URL: http://localhost:8080/SearchExample/ ,如果沒有錯誤,應該會看到以下結果 -

Servlet查詢搜索數據示例

在上面關鍵字輸入框中輸入:su,然後提交搜索,得到以下結果 -

Servlet查詢搜索數據示例