首页 > 编程语言 >【Java】JDBC+Servlet+JSP实现搜索数据和页面数据呈现

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

时间:2024-06-09 12:57:49浏览次数:24  
标签:search JDBC Java java request JSP import servlet javax

目录

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

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

标签:search,JDBC,Java,java,request,JSP,import,servlet,javax
From: https://blog.csdn.net/m0_60631827/article/details/139551667

相关文章

  • Java数据结构与算法(最大子数组和动态规划)
    前言动态规划主要用于解决具有重叠子问题和最优子结构性质的问题。它通过将问题分解为子问题来解决复杂问题,每个子问题仅解决一次,并将其结果存储,以供后续使用,从而避免了重复计算。对应leetcode.-力扣(LeetCode)实现原理两次循环遍历,采用固定其实位置为i,不断滑动j的思想,来计......
  • Java数据结构与算法(爬楼梯动态规划)
    前言爬楼梯就是一个斐波那契数列问题,采用动态规划是最合适不过的。实现原理初始化:dp[0]=1;dp[1]=2;转移方程:dp[i]=dp[i-1]+d[i-2];边界条件:无具体代码实现classSolution{publicintclimbStairs(intn){if(n==1){return1;}......
  • JAVAEE之网络编程(1)_套接字、UDP数据报套接字编程及从代码实例
    前言什么是网络编程呢? 网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程一、网路编程中的基本概念1.1发送端和接收端发送端:数据的发送方进程,称为发送端。发......
  • java springboot 网页时装购物系统在线网上平台网站程序源代码+论文
    !!!有需要的小伙伴可以通过文章末尾名片咨询我哦!!! ......
  • 跨语言系统中的功能通信:Rust、Java、Go和C++的最佳实践
    在现代软件开发中,使用多种编程语言构建复杂系统已成为一种常见的做法。每种编程语言都有其独特的优势和适用场景,这使得在同一个系统中使用多种语言变得合理且高效。然而,这也带来了一个重要的挑战:如何在这些不同语言之间实现高效、可靠的功能通信。本文将探讨Rust、Java、Go和C+......
  • Java项目源码文案PPT讲解基于springboot框架的酒店管理
    !!!有需要的小伙伴可以通过文章末尾名片咨询我哦!!! ......
  • 如何通过javascript自动增加markdown h1的文本内容?
    背景希望美化博客园博客,至少不希望文本那么密集地显示,而且想自动在headline插入表情符号,自动进行目录和文本缩进等等。问题如何通过javascript自动增加markdownh1的文本内容?方案在html中增加如下js脚本即可。document.addEventListener("DOMContentLoaded",function(){......
  • [Java] Mybatis向Mysql插入主副表JSON数据
    ......
  • Apache POI(使用Java读写Excel表格数据)
    1.ApachePOI简介ApachePOI是一个开源的Java库,用于操作MicrosoftOffice格式的文件。它支持各种Office文档的读写功能,包括Word文档、Excel电子表格、PowerPoint演示文稿、Outlook电子邮件等。ApachePOI提供了一组API,使得Java开发者能够轻松地在Java应用程序中处理Office文件......
  • 【java】JVM前端编译器的局限性
    目录1.不涉及编译优化2.功能限制3.静态编译特性4.与AOT编译器的对比1.不涉及编译优化1.前端编译器的主要任务是将符合Java语法规范的Java代码转换为符合JVM规范的字节码文件2.并不会直接涉及编译优化等方面的技术。3.具体的优化细节通常是由HotSpot的JIT(Jus......