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', 'maxsu@xuhuhu.com', '广州');
INSERT INTO `servlet_user` VALUES ('2', 'minsu', '233123', 'minsu@gmail.com', '海口');
INSERT INTO `servlet_user` VALUES ('3', 'avguser', 'fdsa123', 'avguser@qq.com', '广州');
INSERT INTO `servlet_user` VALUES ('4', 'sumuser', 'fdsj124', 'sumuser@qq.com', '北京');

在这个例子中,我们从servlet中查询数据库servlet_user表中的数据并将结果打印。为了简化程序,我们在Servlet中执行所有数据库操作逻辑。但在现实应用中最好将它与servlet文件分开,如把数据库操作部分放到独立的DAO文件中。

按给定关键字搜索的示例

打开Eclipse,创建一个动态Web项目:SearchExample,其完整的目录结构如下所示 -

以下是这个项目中的几个主要的代码文件。

在这个例子中,创建了以下几个文件 -

  • 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.zaixian;

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.zaixian.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/ ,如果没有错误,应该会看到以下结果 -

在上面关键字输入框中输入:su,然后提交搜索,得到以下结果 -


上一篇: Servlet注册表单示例 下一篇: Servlet上传文件