【Java】JDBC+Servlet+JSP实现搜索数据和页面数据呈现

目录

1 .功能介绍

2. 实现流程

3. 项目环境

4. 相关代码

4.1 Maven配置

4.2 SQL语句

4.3 Java代码

4.4 HTML代码

4.5 JSP代码

5. 结果展示


(原创文章,转载请注明出处)

博主是计算机专业大学生,不定期更新原创优质文章,感兴趣的小伙伴可以关注博主主页支持一下,您的每一个点赞、收藏和关注都是对博主最大的支持!


1 .功能介绍

在HTML页面输入学生姓名关键词可以进行关键词匹配并返回匹配到的数据呈现到另一个JSP页面,直接点击搜索可以返回数据表全部数据并在页面以表格的形式呈现数据表

2. 实现流程

在HTML页面表单中提交并发送关键词数据到Servlet,Servlet通过getParameter()方法获取参数,然后进行JDBC操作,查询数据并得到一个结果集(ResultSet),将结果集封装到List<Map<String, Object>>得到一个数据列表(dataList),数据列表存入请求属性并转发到JSP页面,最后在JSP页面通过JSTL的core标签库的循环标签<c:forEach>标签输出结果,完美呈现数据表数据

3. 项目环境

(1)IntelliJ IDEA 2024.1.1
(2)Oracle OpenJDK version 17.0.11
(3)apache-tomcat-8.5.45
(4)apache-maven-3.6.3
(5)mysql-connector-java-8.0.28
(6)javax.servlet-api-3.1.0

Tomcat应用程序上下文:/search

以下jar包添加为库,jar包可在原码获取下载(jar包目录:\web\WEB-INF\lib)

4. 相关代码

4.1 Maven配置

文件名:pom.xml(项目相关依赖)

<!--MySQL驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>
<!--单元测试-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.1</version>
    <scope>compile</scope>
</dependency>
<!-- servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<!--JSP-->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>
<!--JSTL库-->
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

4.2 SQL语句

(1)数据库+数据表

# 数据库
create database mydb;
use mydb;

# 数据表
create table student
(
    SID    int unique primary key,
    name   varchar(100) not null,
    age    tinyint unsigned,
    gender enum ('男','女','其他') default '男',
    major  varchar(10)  not null
) default charset = utf8mb4;

(2)插入数据

# 以下数据是AI随机生成的,纯属虚构,仅练习使用
insert into student
values (10001, '梅戈心', 18, '女', '数据科学与技术'),
       (10002, '唐菲瑛', 19, '女', '数据科学与技术'),
       (10003, '谢鹭尤', 20, '男', '数据科学与技术'),
       (10004, '尚融任', 21, '男', '数据科学与技术'),
       (10005, '严寒孝', 22, '男', '数据科学与技术'),
       (10006, '王霞蓉', 19, '女', '软件工程'),
       (10007, '羿羽忱', 19, '男', '软件工程'),
       (10008, '高允栋', 22, '男', '软件工程'),
       (10009, '包博灿', 25, '女', '软件工程'),
       (10010, '邴学琰', 22, '男', '软件工程');

4.3 Java代码

文件名:SearchServlet.java

package pers.kenneth.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@WebServlet(name = "SearchServlet", urlPatterns = "/SearchServlet")
public class SearchServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 防止中文乱码
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        // 获取关键词
        String keyword = request.getParameter("keyword");
        // 初始化数据结构
        List<Map<String, Object>> dataList = new ArrayList<>();
        // JDBC操作
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/mydb";
            String user = "root";
            String pass = "123456";
            Connection connection = DriverManager.getConnection(url, user, pass);
            Statement statement = connection.createStatement();
            String sql = "select * from student where name like '%" + keyword + "%'";
            // 得到结果集
            ResultSet resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
                Map<String, Object> rowData = new HashMap<>();
                rowData.put("SID", resultSet.getInt("SID"));
                rowData.put("name", resultSet.getString("name"));
                rowData.put("age", resultSet.getInt("age"));
                rowData.put("gender", resultSet.getString("gender"));
                rowData.put("major", resultSet.getString("major"));
                dataList.add(rowData);
                System.out.println(rowData);
            }
            System.out.println(dataList);
            // 释放资源
            resultSet.close();
            statement.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            throw new RuntimeException(e);
        }
        // 存入请求属性
        request.setAttribute("keyword", keyword);
        request.setAttribute("dataList", dataList);
        // 转发
        request.getRequestDispatcher("/show.jsp").forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

4.4 HTML代码

(1)HTML代码

文件名:search.html

<!doctype html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="./css/search.css">
    <title>搜索</title>
</head>
<body>
<div class="container">
    <form class="search-form" action="/search/SearchServlet" method="post">
        <input type="text" class="search-input" placeholder="请输入姓名关键词" name="keyword">
        <button type="submit" class="search-button">搜索</button>
    </form>
</div>
</body>
</html>

(2)CSS代码

文件名:search.css

body, html {
    height: 100%;
    margin: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #f4f4f4;
    font-family: Arial, sans-serif;
}

.container {
    text-align: center;
}

.search-form {
    display: inline-flex;
    align-items: center;
    border-radius: 5px;
    overflow: hidden;
    background-color: #fff;
    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}

.search-input {
    flex: 1;
    padding: 10px;
    border: none;
    outline: none;
    font-size: 16px;
}

.search-button {
    padding: 10px 20px;
    background-color: #4CAF50;
    color: #fff;
    border: none;
    cursor: pointer;
    transition: background-color 0.3s;
}

.search-button:hover {
    background-color: #45a049;
}

4.5 JSP代码

(1)JSP代码

文件名:show.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="./css/show.css">
    <title>搜索结果</title>
</head>
<body>
<h1>以下是关键词“${keyword}”的搜索结果</h1>
<table class="responsive-table">
    <tr>
        <td>学号</td>
        <td>姓名</td>
        <td>年龄</td>
        <td>性别</td>
        <td>专业</td>
    </tr>
    <c:forEach var="row" items="${dataList}">
        <tr>
            <td><c:out value="${row.SID}"/></td>
            <td><c:out value="${row.name}"/></td>
            <td><c:out value="${row.age}"/></td>
            <td><c:out value="${row.gender}"/></td>
            <td><c:out value="${row.major}"/></td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

(2)CSS代码

文件名:show.css

.responsive-table {
    width: 90%;
    margin: auto;
    border-collapse: collapse;
}

.responsive-table td {
    border: 1px solid #ccc;
    padding: 10px;
    text-align: center;
    background-color: #f2f2f2;
}

@media (min-width: 768px) and (max-width: 1024px) {
    .responsive-table td {
        width: calc(100% / 6);
    }
}

@media (min-width: 1025px) {
    .responsive-table td {
        width: calc(100% / 6);
    }
}

5. 结果展示

(1)直接搜索

(2)关键词搜索

6. 原码获取

GitHub:https://github.com/KennethCreative/search-from-database.git

Gitee:search-from-database: JDBC+Servlet+JSP实现搜索数据和页面数据呈现

# GitHub
git clone https://github.com/KennethCreative/search-from-database.git
# Gitee
git clone https://gitee.com/KennethCreative/search-from-database.git

若有不妥之处,恳请读者批评指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/692665.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java基础教程 - 14 Maven项目

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 14 Maven项目 Java 为什么那么强大&#xff0c;很大一部分原因是在实际的开发中&#xff0c;可以将别人开发的模块引入到我们自己的项目中&#xff0c;这样别人开发好了&#xff0c;我拿来就…

Android Media Framework(三)OpenMAX API阅读与分析

这篇文章我们将聚焦Control API的功能与用法&#xff0c;为实现OMX Core、Component打下坚实的基础。 1、OMX_Core.h OMX Core在OpenMAX IL架构中的位置位于IL Client与实际的OMX组件之间&#xff0c;OMX Core提供了两组API给IL Client使用&#xff0c;一组API用于管理OMX组件…

Mysql使用中的性能优化——批量插入的规模对比

在《Mysql使用中的性能优化——单次插入和批量插入的性能差异》中&#xff0c;我们观察到单次批量插入的数量和耗时呈指数型关系。 这个说明&#xff0c;不是单次批量插入的数量越多越好。本文我们将通过实验测试出本测试案例中最佳的单次批量插入数量。 结论 本案例中约每次…

Vue3中的常见组件通信之$attrs

Vue3中的常见组件通信之$attrs 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $re…

【机器学习基础】Python编程07:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言&#xff0c;它在机器学习领域中的重要性主要体现在以下几个方面&#xff1a; 简洁易学&#xff1a;Python语法简洁清晰&#xff0c;易于学习&#xff0c;使得初学者能够快速上手机器学习项目。 丰富的库支持&#xff1a;Python拥有大量的机…

树莓派4b安装宝塔面板

1、打开命令窗口&#xff0c;执行如下命令 #更新 sudo apt-get update sudo apt-get upgrade #切换root权限 sudo su root #安装宝塔面板 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh安装过程有点久&#xff0c;会持…

如何远程连接Linux服务器?

远程连接Linux服务器是通过网络连接到位于远程位置的Linux服务器&#xff0c;以进行服务器管理和操作。远程连接使得系统管理员可以方便地远程访问服务器&#xff0c;进行配置、维护和故障排除等操作&#xff0c;而不必亲自在服务器前工作。以下是一些常用的远程连接方法&#…

智慧社区整体解决方案

1.智慧社区整体建设方案内容 2.整体功能介绍

NASA数据集——SARAL 近实时增值业务地球物理数据记录海面高度异常

SARAL Near-Real-Time Value-added Operational Geophysical Data Record Sea Surface Height Anomaly SARAL 近实时增值业务地球物理数据记录海面高度异常 简介 2020 年 3 月 18 日至今 ALTIKA_SARAL_L2_OST_XOGDR 这些数据是近实时&#xff08;NRT&#xff09;&#xff…

现代信号处理13_贝叶斯统计Bayesian Statistic(CSDN_20240609)

贝叶斯理论 在传统的统计中&#xff0c;我们对数据是由一定认识的&#xff0c;这种认识一般是指数据的统计模型&#xff08;Statistical Model&#xff09;f(x|θ) &#xff0c;其中θ 通常指未知参数&#xff08;Unknown Parameter&#xff09;&#xff0c;x 是已经获得的数据…

LabVIEW电机槽楔松动声测系统

LabVIEW电机槽楔松动声测系统 开发了一种利用LabVIEW软件和硬件平台&#xff0c;为大型电机设计的槽楔松动声测系统。该系统通过声波检测技术&#xff0c;实现了对电机槽楔是否松动的快速准确判断&#xff0c;极大地提高了检测效率和安全性。 项目背景 大型电机在运行过程中…

[图解]企业应用架构模式2024新译本讲解11-领域模型4

1 00:00:00,160 --> 00:00:01,870 好&#xff0c;到这里的话 2 00:00:02,620 --> 00:00:05,060 文字处理器的产品对象就生成了 3 00:00:06,880 --> 00:00:09,180 同样下面就是电子表格 4 00:00:10,490 --> 00:00:11,480 电子表格也同样的 5 00:00:11,490 -->…

html+CSS+js部分基础运用18

1. 按键修饰符的应用。①姓名&#xff1a;按下回车键时调用方法输出“姓名-密码”&#xff1b;②密码&#xff1a;按下shift回车时调用方法输出“姓名密码” 图1 初始效果图 图2 按键修饰符效果图 2. 仿淘宝Tab栏切换&#xff0c;熟悉…

MySQL使用

登录目标数据库 mysql -u root -p123456或指定编码格式登录 mysql -uroot -p密码 --default-character-setutf8 --socketmysql.sock -Amysql > select version();//查看版本号 show databases;//查看数据库有哪些 use xxx; show tables; show create database practice; …

对待谷歌百度等搜索引擎的正确方式

对待百度、谷歌等搜索引擎的方式是&#xff0c;你要站在搜索引擎之上&#xff0c;保持自己的独立思想和意见。 当谷歌宣布他们将会根据一个名为“Alphabet”的新控股公司来进行业务调整时&#xff0c;在科技界引起了一片恐慌之声。 永远不要说这是一个公司一直在做的事情。不…

攻防世界---misc---What-is-this

1、下载附件&#xff0c;是一个.gz的文件夹&#xff0c;是linux系统的压缩包后缀 2、在kali中解压&#xff0c;解压之后得到两张图片 3、想把图片拖在物理机中分析&#xff0c;但是拖不了&#xff0c;所以将.gz文件在物理机中改为.zip&#xff0c;解压之后看到了一个没有后缀的…

TensorFlow2.x基础与mnist手写数字识别示例

文章目录 Github官网文档Playground安装声明张量常量变量 张量计算张量数据类型转换张量数据维度转换ReLU 函数Softmax 函数卷积神经网络训练模型测试模型数据集保存目录显示每层网络的结果 TensorFlow 是一个开源的深度学习框架&#xff0c;由 Google Brain 团队开发和维护。它…

负反馈放大电路

开环放大倍数&#xff1a;放大电路没有加反馈时的放大倍数A 闭环放大倍数&#xff1a;电路加了反馈信号的放大倍数Af。反馈信号和输出信号的比值称为反馈系数F。 三极管各极电压变化关系 1&#xff0c;三极管的基极和发射极之间是同相关系&#xff0c;当基极电压上升&#x…

CTFHUB-SQL注入-字符型注入

目录 查询数据库名 查询数据库中的表名 查询表中数据 总结 此题目和上一题相似&#xff0c;一个是整数型注入&#xff0c;一个是字符型注入。字符型注入就是注入字符串参数&#xff0c;判断回显是否存在注入漏洞。因为上一题使用手工注入查看题目 flag &#xff0c;这里就不…

rk3568 norflash+pcei nvme 配置

文章目录 rk3568 norflashpcei nvme 配置1&#xff0c;添加parameter_nor.txt文件2 修改编译规则3 修改uboot4 修改BoardConfig.mk5 修改kernel pcei配置6 编译7 烧录 rk3568 norflashpcei nvme 配置 1&#xff0c;添加parameter_nor.txt文件 device/rockchip/rk356x/rk3568_…