javaweb 期末复习

1. JDBC数据库连接的实现逻辑与步骤以及JDBC连接配置(单列模式)


public class JDBCUtil {// 这些换成自己的数据库 private static final String DB_URL = "jdbc:mysql://localhost:3306/你的数据库名称";private static final String USER = "username";private static final String PASS = "password";
​// 创建单例示例 :connectionprivate static Connection connection = null;
​// 私有构造函数防止类被实例化 就是new 一个JDBCUtil 的对象private JDBCUtil() {}
​// 提供一个静态方法 可以通过这个方法获取一个connectionpublic static Connection getConnection() throws SQLException {if (connection == null) {synchronized (JDBCUtil.class) {  //这里的synchronized同步块 就是保证同一时间只有一个线程进去获得一个连接if (connection == null) {try {
​Class.forName("com.mysql.cj.jdbc.Driver");
​
​connection = DriverManager.getConnection(DB_URL, USER, PASS);} catch (ClassNotFoundException e) {e.printStackTrace();throw new SQLException("错啦 加载不了驱动");  //抛出一个错 提示一哈 包严谨的  }}}}return connection;}
​// 关闭connection 的方法public static void closeConnection() {if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();} finally {connection = null;Serializable}}}
}

2.JavaBean规范以及创建

2.1 ------ JavaBean 规范

  • 公共无参构造方法:JavaBean 必须有一个公共的无参数构造方法。

  • 私有属性:所有属性(字段)应该是私有的,以保持封装性。

  • 公有的 getter 和 setter 方法:每个属性都有对应的公共访问器(getter)和设置器(setter)方法,以便外界访问和修改。

  • 可序列化:通常,JavaBean 实现了 java.io.Serializable 接口,允许它们被序列化(这不是强制要求,但在许多情况下是推荐的)。

2.2 ----- 直接上代码

  • Serializable 这个序列化可以不加 期末不用

public class Person   {// 私有属性private String name;private int age;// 公共的无参构造方法public Person() {}// 公共的有参构造方法(非必须,但常见)public Person(String name, int age) {this.name = name;this.age = age;}// Getter 方法public String getName() {return name;}// Setter 方法public void setName(String name) {this.name = name;}// Getter 方法public int getAge() {return age;}// Setter 方法public void setAge(int age) {this.age = age;}// 可以选择性地覆盖 toString 方法@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + "}";}
}

3.根据Model层原理,完成对User表的增删改查方法实现-UserService(userDao)

1718531129654

  • 下面就是 UserDao 的代码

public class UserDao {//根据用户名和密码查询数据public boolean queryByUsernameAndPassword(String username,String password){//1、获取数据库连接Connection conn = null;//2、查询数据库String sql = "select * from bookdb.usertb where username=? and password=?";PreparedStatement ps = null;ResultSet rs = null;try {conn = JDBCConnector.getInstance().getOneCon();ps = conn.prepareStatement(sql);ps.setString(1,username);ps.setString(2,password);rs = ps.executeQuery();if (rs.next()){return true;}} catch (SQLException e) {e.printStackTrace();}finally {DBHandle.closeDB(conn,ps,rs);}return false;}/*** 根据 username 进行更新操作* @param newUserName 新用户名* @param newPassword 新密码* @param oldUserName 待修改的用户* @return*/public boolean queryById(String newUserName,String newPassword ,String oldUserName){//1、获取数据库连接Connection conn = null;PreparedStatement  ps = null;ResultSet rs = null;try {//2、获取单例conn = JDBCConnector.getInstance().getOneCon();//3、sql语句String sql = "update bookdb.usertb set username=? ,password=? where username=?";  //写之前最好去数据库试一试不容易错ps = conn.prepareStatement(sql);ps.setString(1,newUserName);ps.setString(2,newPassword);ps.setString(3,oldUserName);int res = ps.executeUpdate();if (res > 0){return true;  //有记录则表明被更新了}} catch (SQLException e) {e.printStackTrace();}finally {//4、老样子 关闭练级DBHandle.closeDB(conn,ps,rs);}return false;}/*** 新增 user* @param user 待插的对象* @return  true 新增成功 否则反之*/public boolean insertUser(User user){//1、获取数据库连接Connection conn = null;PreparedStatement  ps = null;ResultSet rs = null;try {//2、获取单例conn = JDBCConnector.getInstance().getOneCon();//3、sql语句String sql = "insert into bookdb.usertb (username, password) values (?,?)";  //写之前最好去数据库试一试不容易错ps = conn.prepareStatement(sql);ps.setString(1,user.getUsername());  //这里获取传过来的用户名和密码ps.setString(2,user.getPassword());int res = ps.executeUpdate();if (res > 0){return true;}//是不是修改几乎一模一样} catch (SQLException e) {e.printStackTrace();}finally {//4、老样子 关闭练级DBHandle.closeDB(conn,ps,rs);}return false;  //最后别忘了返回错误的情况哦}/*** 删除操作* @param username 待删除的用户名* @return*/public boolean deleteUser(String username){//1、获取数据库连接Connection conn = null;PreparedStatement  ps = null;ResultSet rs = null;try {//2、获取单例conn = JDBCConnector.getInstance().getOneCon();//3、sql语句String sql = "delete from usertb where username=?;";  //写之前最好去数据库试一试不容易错ps = conn.prepareStatement(sql);ps.setString(1,username);  //这里获取传过来的用户名和密码int res = ps.executeUpdate();if (res > 0){return true;}//是不是和上面几乎一模一样} catch (SQLException e) {e.printStackTrace();}finally {//4、老样子 关闭练级DBHandle.closeDB(conn,ps,rs);}return false;  //最后别忘了返回错误的情况哦}}
  • 差不多就是上面的增删改查 可以根据需要自行修改

4.Json数据格式

{"username":"wdc","password":"123"
}

5 . JSP知识应用以及文件上传功能实现

1718539323154

  • 然后在contorller 层创建一个UploadController

package com.controller;import com.util.UploadUtil;import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/uploadServlet")
@MultipartConfig(maxFileSize = 10 * 1024 * 1024)
public class UploadController extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置响应的内容类型resp.setContentType("text/html;charset=utf-8");//取得输出对象PrintWriter out = resp.getWriter();req.setCharacterEncoding("utf-8");//获得part 对象Part part = req.getPart("resPath");//指定上传的文件保存到服务器的 uploadFiles 目录中File uploadFileDir = new File(getServletContext().getRealPath("/uploadFiles"));if (!uploadFileDir.exists()) {uploadFileDir.mkdirs();}//获取原始文件名String oldName = UploadUtil.getFileName(part);out.println("上传的原始文件名:" + oldName + "<br>");out.println("上传文件的大小 :" + part.getSize() + "<br>");if (oldName != null) {//上传到服务器的 uploadFiles 目录中part.write(uploadFileDir + File.separator + oldName);}out.println("上传文件到:"+uploadFileDir + File.separator + oldName + "<br>");}
}
  • 然后运行项目 注意jsp 的访问路径

- 选择你要上传的文件 点击提交后 就上传到了

image-20240616200454726

这里

- 欧克 完美 下一个

- 多文件上传也要掌握,书上208  一样的实现。**干**就完了

# 6.前后端分离技术,根据前端代码StuClient的接口请求,补充完成服务器接口:查看前端网络请求接口,配置正确的映射地址;实现用户注册接口编写,实现真正的数据入库操作-servlet编写。

- 这部分只需要根据前端的在controller 层写接口   

- 就直接给代码了  

- BookByPageController 接口

package com.controller;import com.dao.BookDao;
import com.entity.Book;
import org.json.JSONStringer;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.util.List;@WebServlet("/books/showBooksByPage")
public class BookByPageController extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {BookDao bookDao = new BookDao();int currentPage = Integer.parseInt(req.getParameter("currentPage"));int pageSize = Integer.parseInt(req.getParameter("pageSize"));List<Book> books = bookDao.queryBookByPage(currentPage, pageSize);resp.getWriter().println(JSONStringer.valueToString(books));}
}
  • UserLoginController 接口

package com.controller;import com.dao.BookDao;
import com.dao.UserDao;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;@WebServlet("/user/login")
public class UserLoginController extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");UserDao dao = new UserDao();if (dao.queryByUsernameAndPassword(username, password)) {resp.getWriter().println(true);} else resp.getWriter().println(false);}
}

  • ok 了家人们,可莫 干就完了

    img

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10分钟部署一个个人博客

关于vuepress这里没必要过多介绍&#xff0c;感兴趣的可以直接去官网了解&#xff0c;下面是官网首页地址截图 &#xff1a;https://v2.vuepress.vuejs.org/zh/ 透过这张图&#xff0c;我们也可以大致的对这个框架的特点有一定的认识&#xff0c;这就够了。其他的东西我们在使用…

vue3+ Element-Plus 点击勾选框往input中动态添加多个tag

实现效果&#xff1a; template&#xff1a; <!--产品白名单--><div class"con-item" v-if"current 0"><el-form-item label"平台名称"><div class"contaion" click"onclick"><!-- 生成的标签 …

WPF界面设计

1、使用C#-WPF实现抽屉效果-炫酷漂亮的侧边栏导航菜单-SplitViewMD主题重绘原生控件的美观效果-提供源码Demo下载 码源地址&#xff1a;https://download.csdn.net/download/Prince999999/89424685 2、使用C#-WPF实现抽屉效果-菜单导航功能实现&#xff0c;常规的管理系统应该…

使用itextPDF实现PDF电子公章工具类

一、制作公章 在线网站&#xff1a;印章生成器 - Kalvin在线工具 (kalvinbg.cn) 然后对公章进行下载保存 盖章图片&#xff1a; 二、生成数字签名 2.1&#xff1a; java工具keytool生成p12数字证书文件 Keytool是用于管理和证书的工具&#xff0c;位于%JAVA_HOME%/bin目录。…

【Python】Python 2 测试网络连通性脚本

文章目录 前言1. 命令行传参2. 代码 前言 最近在只有python2的服务器上部署服务&#xff0c;不能用三方类库&#xff0c;这里出于好奇心学习下python。这里简单做个脚本&#xff0c;实现了检验网络连通性的功能&#xff08;类似于curl&#xff09;。 1. 命令行传参 使用命令…

和鲸科技执行总裁殷自强:面向空间数据协同分析场景的模型生命周期管理方法

导读&#xff1a; 由 ACM SIGSPATIAL 中国分会主办的第五届空间数据智能学术会议&#xff08;SpatialDI 2024&#xff09;于 2024 年 4 月 25 日- 27 日在南京圆满召开&#xff0c;主题为“ AGI 时代下的空间数据智能”&#xff0c;旨在深入推动空间数据智能研究的理论进步与应…

TIM—通用定时器高级定时器

通用/高级定时器的功能 在基本定时器功能的基础上新增功能&#xff1a; 通用定时器有4个独立通道&#xff0c;且每个通道都可以用于下面功能。 &#xff08;1&#xff09;输入捕获&#xff1a;测量输入信号的周期和占空比等。 &#xff08;2&#xff09;输出比较&#xff1a;产…

115.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-调试优化结构体类型数据的创建

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

macOS Sequoia 将 Mac 生产力与智能化提升至全新高度 (macOS 15 ISO、IPSW、PKG 下载)

macOS Sequoia 将 Mac 生产力与智能化提升至全新高度 (macOS 15 ISO、IPSW、PKG 下载) iPhone 镜像、Safari 浏览器重大更新、备受瞩目的游戏和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接&#xff1a;https://sysin.org/blog/macOS-Sequoia/&a…

【动态规划】| 路径问题之最小路径和 力扣64

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️专栏&#xff1a;动态规划 &#x1f397;️如何活着&#xff0c;是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/minimum-path-sum/description/ 这道题目和之前一道…

基于C#开发web网页管理系统模板流程-参数传递

点击返回目录-> 基于C#开发web网页管理系统模板流程-总集篇-CSDN博客 前言 当用户长时间未在管理系统界面进行操作&#xff0c;或者用户密码进行了更改&#xff0c;显然用户必须重新登录以验证身份&#xff0c;如何实现这个功能呢&#xff1f; HTTP Cookie&#xff08;也叫 …

【云原生】docker swarm 使用详解

目录 一、前言 二、容器集群管理问题 2.1 docker集群管理问题概述 2.1.1 docker为什么需要容器部署 2.2 docker容器集群管理面临的挑战 三、docker集群部署与管理解决方案 四、Docker Swarm概述 4.1 Docker Swarm是什么 4.1.1 Docker Swarm架构图 4.1.2 Docker Swarm几…

【最新鸿蒙应用开发】——鸿蒙中的“Slot插槽”?@BuilderParam

构建函数-BuilderParam 传递 UI 1. 引言 BuilderParam 该装饰器用于声明任意UI描述的一个元素&#xff0c;类似slot占位符。 简而言之&#xff1a;就是自定义组件允许外部传递 UI Entry Component struct Index {build() {Column({ space: 15 }) {SonCom() {// 直接传递进来…

机器学习笔记 - 用于3D点云数据分割的Point Net的训练

一、数据集简述 ​在本教程中,我们将学习如何在斯坦福 3D 室内场景数据集 ( S3DIS )上训练 Point Net 进行语义分割。S3DIS 是一个 3D 数据集,包含来自多栋建筑的室内空间点云,占地面积超过 6000 平方米。Point Net使用整个点云,能够执行分类和分割任务。如果你一直在关注 …

LVS负载均衡集群企业级应用实战-LVS-DR(四)

目录 LVS-DR 一. 环境准备 二. 对虚拟主机操作 三. 对真实服务器操作 四. 打开网页测试 LVS-DR 一. 环境准备 三台虚拟机&#xff0c;都要在同一网段内&#xff0c;统一关闭防火墙和selinux&#xff0c;时间同步&#xff0c;配置好YUM源。系统用centos和roucky都行。 主…

matlab-2-simulink-小白教程-如何绘制电路图进行电路仿真

以上述电路图为例&#xff1a;包含D触发器&#xff0c;时钟CLK,与非门 一、启动simulink的三种方式 方式1 在MATLAB的命令行窗口输入“Simulink”命令。 方式2 在MATLAB主窗口的“主页”选项卡中&#xff0c;单击“SIMULINK”命令组中的Simulink命令按钮。 方式3 从MATLAB…

[Linux] TCP协议介绍(3): TCP协议的“四次挥手“过程、状态分析...

TCP协议是面向连接的 上一篇文章简单分析了TCP通信非常重要的建立连接的"三次握手"的过程 本篇文章来分析TCP通信中同样非常重要的断开连接的"四次挥手"的过程 TCP的"四次挥手" TCP协议建立连接 需要"三次握手". "三次挥手&q…

光明网发稿投稿流程与要求,光明日报如何投稿?附光明网多少钱(价格表)

对于想要在光明网发稿的作者来说&#xff0c;媒介多多网发稿平台是一个绝佳的投稿选择。光明网作为国内一流的新闻媒体平台&#xff0c;其严谨的文章审核标准和广泛的读者基础吸引着无数作者。然而&#xff0c;由于其严格的发稿标准&#xff0c;一些作者可能会遇到一些困难&…

基于Python+OpenCV高速公路行驶车辆的速度检测系统

简介&#xff1a; 基于Python和OpenCV的高速公路行驶车辆的速度检测系统旨在实时监测高速公路上的车辆&#xff0c;并测量它们的速度。该系统可以用于交通监控、道路安全管理等领域&#xff0c;为相关部门提供重要的数据支持。 系统实现&#xff1a; 视频流输入&#xff1a;系…

快速理解 Node.js 版本差异:3 分钟指南

Node.js 是一个广泛使用的 JavaScript 运行时环境&#xff0c;允许开发者在服务器端运行 JavaScript 代码。随着技术的发展&#xff0c;Node.js 不断推出新版本&#xff0c;引入新特性和改进。了解不同版本之间的差异对于开发者来说至关重要。以下是一个快速指南&#xff0c;帮…