当前位置: 首页 > news >正文

Java EE servlet与MySQL表单 工程实现增加查询数据

Java EE servlet与MySQL表单 工程实现增加查询数据

前段页面示意

实现“增加数据”
在这里插入图片描述
输入数据如下:
在这里插入图片描述
提示“成功添加留言”
在这里插入图片描述
点击“查看所有留言内容”:显示留言内容,实现“查询数据”
在这里插入图片描述
此时在MySQL中就能查询到新添加的数据信息
在这里插入图片描述

工程建立演示

导入工程-配置tomcat

在这里插入图片描述

工程目录分析

在这里插入图片描述
在这里插入图片描述

创建数据库和表

创建与代码相对的数据库guestbook和表guestbook
在这里插入图片描述
小tips:创建表时,id通常为主键,同时设置自动递增
在这里插入图片描述

运行代码

在工程处右键,点击Run As,再点击Run on Server
在这里插入图片描述
选择tomcat,点击finish。
在这里插入图片描述

在浏览器中输入地址

地址为:http://localhost:8080/项目名称/某网页.htm
在这里插入图片描述

前段页面操作

增加数据,提示成功添加留言
在这里插入图片描述
此时在sql数据库中刷新可查看到表中存储的数据
在这里插入图片描述
继续添加数据,在数据库中则能看到更多的信息
在这里插入图片描述

addMessage代码分析

在这里插入图片描述
在这里插入图片描述

package webbook.guestbook;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;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 webbook.util.StringUtil;/*** 添加留言Servlet* 处理用户提交的留言信息,将其保存到数据库中* 映射URL为"/addMessage",通过@WebServlet注解配置*/
@WebServlet("/addMessage")
public class AddMessageServlet extends HttpServlet {// 序列化版本ID,用于版本控制private static final long serialVersionUID = -8349454122547148005L;/*** 处理HTTP POST请求的方法* 当用户提交留言表单时,此方法会被调用* * @param request  HTTP请求对象,包含客户端提交的数据* @param response HTTP响应对象,用于向客户端返回数据* @throws ServletException 如果发生Servlet相关的异常* @throws IOException      如果发生输入输出异常*/public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 数据库连接信息String url = "jdbc:mysql://localhost:3306/guestbook"; // 数据库URLString username = "root"; // 数据库用户名String password = "root"; // 数据库密码// SQL插入语句,使用占位符(?)防止SQL注入String sql = "insert into guestbook (name,email,phone,title,time) values(?,?,?,?,?)";int result = 0; // 执行SQL语句后影响的行数,初始化为0Connection conn = null; // 数据库连接对象,初始化为null// 设置请求编码为UTF-8,确保正确解析中文参数request.setCharacterEncoding("utf-8");// 从请求中获取表单参数String name = request.getParameter("name"); // 获取姓名参数String title = request.getParameter("title"); // 获取标题参数// 设置响应内容类型和编码response.setContentType("text/html;charset=utf-8");// 获取响应输出流,用于向客户端返回HTML内容PrintWriter out = response.getWriter();out.println("<html>");out.println("<head><title>guestbook input page</title></head>");out.println("<body>");// 验证姓名是否为空if (StringUtil.validateNull(name)) {out.println("对不起,姓名不能为空,请您重新输入!<br>");out.println("<a href=\""+request.getContextPath()+"/addMessage.htm\">添加新的留言</a><br>");} // 验证标题是否为空else if (StringUtil.validateNull(title)) {out.println("对不起,主题不能为空,请您重新输入!<br>");out.println("<a href=\""+request.getContextPath()+"/addMessage.htm\">添加新的留言</a><br>");} // 如果姓名和标题都不为空,则处理留言数据else {try {// 加载MySQL JDBC驱动程序Class.forName("com.mysql.jdbc.Driver");// 建立数据库连接conn = DriverManager.getConnection(url, username, password);// 创建预编译语句对象,防止SQL注入攻击PreparedStatement pstmt = conn.prepareStatement(sql);// 设置参数:姓名(过滤HTML标签防止XSS攻击)pstmt.setString(1, StringUtil.filterHtml(name));// 设置参数:邮箱(过滤HTML标签)pstmt.setString(2, StringUtil.filterHtml(request.getParameter("email")));// 设置参数:电话(过滤HTML标签)pstmt.setString(3, StringUtil.filterHtml(request.getParameter("phone")));// 设置参数:标题(过滤HTML标签)pstmt.setString(4, StringUtil.filterHtml(title));// 创建日期格式化对象,用于格式化当前时间SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");// 设置参数:时间(使用当前时间)pstmt.setString(5, sdf.format(new java.util.Date()));// 执行SQL插入操作,返回影响的行数result = pstmt.executeUpdate();// 关闭预编译语句对象,释放资源pstmt.close();} catch (ClassNotFoundException e) {// 处理数据库驱动类未找到异常e.printStackTrace();} catch (SQLException e) {// 处理数据库操作异常e.printStackTrace();} finally {// 无论是否发生异常,都确保关闭数据库连接try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}// 根据插入操作的结果输出相应信息if (result == 0) {out.println("对不起,添加留言不成功,请您重新输入!<br>");out.println("<a href=\""+request.getContextPath()+"/addMessage.htm\">添加新的留言</a><br>");} else {out.println("祝贺您,成功添加留言。<br>");out.println("<a href=\""+request.getContextPath()+"/getMessages\">查看所有留言内容</a><br>");}// 输出HTML结束标签out.println("</body>");out.println("</html>");// 刷新输出流,确保所有内容都被发送到客户端out.flush();// 关闭输出流out.close();}}
}

GetMessage代码分析

package webbook.guestbook;import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import webbook.util.StringUtil;/*** 获取留言列表Servlet* 处理获取所有留言信息的请求,从数据库中读取留言数据并以HTML格式展示* 映射URL为"/getMessages",通过@WebServlet注解配置*/
@WebServlet("/getMessages")
public class GetMessagesServlet extends HttpServlet {// 序列化版本ID,用于版本控制private static final long serialVersionUID = 5964428201228635704L;/*** 处理HTTP GET请求的方法* 当用户访问留言列表页面时,此方法会被调用* * @param request  HTTP请求对象* @param response HTTP响应对象,用于向客户端返回HTML内容* @throws ServletException 如果发生Servlet相关的异常* @throws IOException      如果发生输入输出异常*/public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 数据库连接信息String url = "jdbc:mysql://localhost:3306/guestbook"; // 数据库URL和数据库名String username = "root"; // 数据库用户名String password = "root"; // 数据库密码// SQL查询语句:查询所有留言并按id降序排列(最新的在前)String sql = "select * from guestbook order by id desc";Connection conn = null; // 数据库连接对象// 设置响应内容类型和编码,确保正确显示中文response.setContentType("text/html;charset=utf-8");// 获取响应输出流,用于向客户端返回HTML内容PrintWriter out = response.getWriter();// 输出HTML页面开始部分out.println("<html>");out.println("<head><title>display messages</title></head>");out.println("<body>");// 添加返回留言页面的链接out.println("<a href=\"" + request.getContextPath() + "/addMessage.htm\">添加新的留言内容</a><br>");out.println("留言内容<br><br>"); // 页面标题try {// 1. 加载MySQL JDBC驱动程序Class.forName("com.mysql.jdbc.Driver");// 2. 建立数据库连接conn = DriverManager.getConnection(url, username, password);// 3. 创建预编译语句对象PreparedStatement pstmt = conn.prepareStatement(sql);// 4. 执行查询操作,获取结果集ResultSet rs = pstmt.executeQuery();// 5. 遍历结果集,逐条显示留言信息while (rs.next()) {// 调用printRow方法格式化输出单条留言this.printRow(out, rs);}// 6. 释放资源:关闭结果集和预编译语句rs.close();pstmt.close();} catch (ClassNotFoundException e) {// 处理数据库驱动类未找到异常e.printStackTrace();} catch (SQLException e) {// 处理数据库操作异常e.printStackTrace();} finally {// 无论是否发生异常,都确保关闭数据库连接try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}// 输出HTML页面结束部分out.println(" </body>");out.println("</html>");// 刷新输出流,确保所有内容都被发送到客户端out.flush();// 关闭输出流out.close();}/*** 格式化输出单条留言信息的方法* 将数据库中的一条记录以HTML表格形式输出* * @param out 输出流对象,用于向客户端输出HTML内容* @param rs  数据库结果集对象,包含当前记录的字段数据* @throws SQLException 如果访问数据库字段时发生异常*/private void printRow(PrintWriter out, ResultSet rs) throws SQLException {// 创建表格,设置固定布局和自动换行属性out.println("<table width=\"600\" border=\"1\" style=\"table-layout:fixed;word-break:break-all\">");// 输出编号字段out.println("<tr><td width=\"50\">编号</td>");out.println("<td width=\"550\">" + rs.getInt("id") + "</td></tr>");// 输出姓名字段out.println("<tr><td>姓名</td><td>" + rs.getString("name") + "</td></tr>");// 输出电话字段,如果为空则显示"没填"out.println("<tr><td>电话</td><td>" + StringUtil.chanageNull(rs.getString("phone"), "没填") + "</td></tr>");// 输出邮箱字段,如果为空则显示"没填"out.println("<tr><td>email</td><td>" + StringUtil.chanageNull(rs.getString("email"), "没填") + "</td></tr>");// 输出主题字段,valign="top"确保顶部对齐out.println("<tr><td valign=\"top\">主题</td><td>" + rs.getString("title") + " </td></tr>");// 输出时间字段out.println("<tr><td>时间</td><td>" + rs.getString("time") + " </td></tr>");// 结束表格并添加换行out.println("</table><br>");}
}

文章转载自:

http://ojRz3DVK.ydzLy.cn
http://vKEj93Pa.ydzLy.cn
http://6p1nyN9M.ydzLy.cn
http://lzTSclxv.ydzLy.cn
http://tdlswP0i.ydzLy.cn
http://TLB22awV.ydzLy.cn
http://DFxYiWZV.ydzLy.cn
http://SOLdrjkT.ydzLy.cn
http://VDaQ3KK7.ydzLy.cn
http://pqoATDqe.ydzLy.cn
http://caOG2JsH.ydzLy.cn
http://ERAQPRXS.ydzLy.cn
http://Qyo38Eqf.ydzLy.cn
http://wnv0yGeA.ydzLy.cn
http://1vTs38MY.ydzLy.cn
http://9CxpYagk.ydzLy.cn
http://Yn1k8NyJ.ydzLy.cn
http://oHER7aPa.ydzLy.cn
http://hzyMPPvv.ydzLy.cn
http://WAqHWY17.ydzLy.cn
http://WL5rUEmZ.ydzLy.cn
http://qT2GLC6I.ydzLy.cn
http://mfguIVxS.ydzLy.cn
http://5Jjbp5cT.ydzLy.cn
http://TXqv0uCU.ydzLy.cn
http://Ly2t5i9q.ydzLy.cn
http://v3u724KK.ydzLy.cn
http://8TSb5v5v.ydzLy.cn
http://hJJXI0gQ.ydzLy.cn
http://KIXTBlo9.ydzLy.cn
http://www.dtcms.com/a/377644.html

相关文章:

  • 上网管理行为-路由模式部署
  • Omni-UI:58同城鸿蒙ArkUI精心打造的UI组件库使用
  • 六自由度Stewart并联机器人simulink建模与模拟仿真
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘sympy’问题
  • 测试之道:从新手到专家实战(四)
  • 基于elementUI实现一个可编辑的表格(简洁版)
  • 智能美妆功能开发指南:直播美颜sdk的架构与算法解析
  • MySQL 浮点数、定点数与位类型:搞懂 3 类特殊数值的核心用法
  • 运动生理实验室解决方案 人体生理实验整体解决方案
  • Ping命令为何选择ICMP而非TCP/UDP?
  • 工业锅炉的“健康卫士”—状态监测与故障诊断
  • 大模型微调技术宝典:Transformer架构,从小白到专家
  • 同步框架与底层消费机制解决方案梳理
  • 计算机毕设 java 高校教材管理系统 基于 Java+SSM 的高校教材管控平台 Java+MySQL 的教材全流程管理系统
  • 用分层架构打造单体应用
  • TCP 拥塞控制设计空间课程要点总结
  • 工业网络融合:DEVICENET转PROFINET网关在汽车总装车间的应用
  • AI当调色总监用,合成图一秒融入,甲方看了都说绝
  • 深入浅出CRC校验:从数学原理到单周期硬件实现 (1) 初始CRC校验
  • 基于esp32c3 rust embassy 的墨水屏程序
  • 实战:用 Python 搭建 MCP 服务 —— 模型上下文协议(Model Context Protocol)应用指南
  • 亚马逊关键词引流:从手动操作到智能优化的全流程攻略
  • Windows 本地组策略重置标准操作程序 (SOP)
  • tp5.0如何配置session保存到文件里,方便删除
  • Linux D-Bus 详解
  • 嵌入式学习笔记.嵌入式系统
  • Redis 与分布式事务:最终一致性的实践艺术
  • Mac M 系列芯片 YOLOv8 部署教程(CPU/Metal 后端一键安装)
  • Java 中String类的常用方法
  • TENGJUN防水TYPE-C连接器:立贴结构与IPX7防护的精密融合