简易图书管理系统
javaweb+jsp+servlet




实体类
package com.ghx.entity;/*** @author :guo* @date :Created in 2024/12/6 10:13* @description:* @modified By:* @version:*/
public class Book {private int id;private String name;private double price;private String publisher;public Book() {}public Book(int id, String name, double price, String publisher) {this.id = id;this.name = name;this.price = price;this.publisher = publisher;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getPublisher() {return publisher;}public void setPublisher(String publisher) {this.publisher = publisher;}
}
package com.ghx.entity;/*** @author :guo* @date :Created in 2024/12/3 16:48* @description:* @modified By:* @version:*/
public class User {private int id;private String username;private String password;private String realname;private int age;public User() {}public User(int id, String username, String password, String realname, int age) {this.id = id;this.username = username;this.password = password;this.realname = realname;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getRealname() {return realname;}public void setRealname(String realname) {this.realname = realname;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
dao
package com.ghx.dao;import java.sql.*;/*** @author :guo* @date :Created in 2024/12/2 14:08* @description:* @modified By:* @version:*/
public class BaseDao {Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;String url = "jdbc:mysql://localhost:3306/day06";String username = "root";String password = "123456";String driverName="com.mysql.cj.jdbc.Driver";public int edit(String sql,Object... obj){try {getConn();ps = conn.prepareStatement(sql);for(int i=0;i<obj.length;i++){ps.setObject(i+1,obj[i]);}int i=ps.executeUpdate();return i;} catch (Exception e) {return 0;} finally {closeAll();}}//连接数据库public void getConn() throws Exception{Class.forName(driverName);conn = DriverManager.getConnection(url, username, password);}//关闭资源public void closeAll(){try {if(rs!=null){rs.close();}if(ps!=null){ps.close();}if(conn!=null){conn.close();}} catch (SQLException e) {throw new RuntimeException(e);}}
}
package com.ghx.dao;import com.ghx.entity.Book;
import com.ghx.entity.User;import java.util.ArrayList;
import java.util.List;
/*** @author :guo* @date :Created in 2024/12/6 10:13* @description:* @modified By:* @version:*/
public class BookDao extends BaseDao{public List<Book> findAll() {List<Book> list=new ArrayList<Book>();try {getConn();String sql="select id,name,price,publisher from tbl_book ";ps=conn.prepareStatement(sql);rs=ps.executeQuery();while (rs.next()){Book book=new Book();book.setId(rs.getInt("id"));book.setName(rs.getString("name"));book.setPrice(rs.getDouble("price"));book.setPublisher(rs.getString("publisher"));list.add(book);}} catch (Exception e) {throw new RuntimeException(e);} finally {closeAll();}return list;}//插入public int insert(String name,double price,String publisher){String sql="insert into tbl_book(name,price,publisher) values (?,?,?)";return edit(sql,name,price,publisher);}//回显数据public Book findById(int id){Book book=null;try {getConn();String sql="select id,name,price,publisher from tbl_book where id=?";ps=conn.prepareStatement(sql);ps.setObject(1,id);rs=ps.executeQuery();while (rs.next()){book=new Book();book.setId(rs.getInt("id"));book.setName(rs.getString("name"));book.setPrice(rs.getDouble("price"));book.setPublisher(rs.getString("publisher"));}} catch (Exception e) {throw new RuntimeException(e);} finally {closeAll();}return book;}//修改public int updateBook(String name,double price,String publisher,int id){String sql= "update tbl_book set name=?,price=?,publisher=? where id=?";return edit(sql,name,price,publisher,id);}//删除public int deleteBook(int id){String sql="delete from tbl_book where id=?";return edit(sql,id);}
}
package com.ghx.dao;import com.ghx.entity.User;import java.util.ArrayList;/*** @author :guo* @date :Created in 2024/12/3 16:48* @description:* @modified By:* @version:*/
public class UserDao extends BaseDao{//登录判断public User find(String username,String password){User user=null;try {getConn();String sql="select id,username,password,realname,age from tbl_user where username=? and password=?";ps=conn.prepareStatement(sql);ps.setObject(1,username);ps.setObject(2,password);rs=ps.executeQuery();while (rs.next()){user=new User();int id = rs.getInt("id");String name = rs.getString("username");String pwd = rs.getString("password");String realname = rs.getString("realname");int age = rs.getInt("age");user.setId(id);user.setUsername(name);user.setPassword(pwd);user.setRealname(realname);user.setAge(age);}return user;} catch (Exception e) {throw new RuntimeException(e);} finally {closeAll();}}//注册public int add(String name,String pwd,String rname,String age){String sql="insert into tbl_user values(null,?,?,?,?)";return edit(sql,name,pwd,rname,age);}
}
servlet
package com.ghx.servlet;import com.ghx.dao.BookDao;
import com.ghx.entity.Book;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;@WebServlet(name = "BookServlet", value = "/BookServlet")
public class BookServlet extends HttpServlet {private BookDao bookDao=new BookDao();@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");String method = request.getParameter("method");if("insert".equals(method)){insertBook(request,response);}else if("getById".equals(method)){getById(request,response);} else if("update".equals(method)){updateById(request,response);}else if("delete".equals(method)){deleteById(request,response);}else {selectAll(request,response);}}private void deleteById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{int id = Integer.parseInt(request.getParameter("id"));int i = bookDao.deleteBook(id);if(i>0){response.sendRedirect("/BookServlet");}}//修改private void updateById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{int id = Integer.parseInt(request.getParameter("id"));String name = request.getParameter("name");double price = Double.parseDouble(request.getParameter("price"));String publisher = request.getParameter("publisher");int i = bookDao.updateBook(name, price, publisher, id);if(i>0){response.sendRedirect("/BookServlet");}}//回显数据private void getById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{int id = Integer.parseInt(request.getParameter("id"));Book byId = bookDao.findById(id);request.setAttribute("bookid",byId);request.getRequestDispatcher("/update.jsp").forward(request,response);}//添加private void insertBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{String name = request.getParameter("name");double price = Double.parseDouble(request.getParameter("price"));String publisher = request.getParameter("publisher");int insert = bookDao.insert(name, price, publisher);if(insert>0){response.sendRedirect("/BookServlet");}}//展示全部private void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{List<Book> all = bookDao.findAll();request.setAttribute("book",all);request.getRequestDispatcher("/index.jsp").forward(request,response);}}
package com.ghx.servlet;import com.ghx.dao.UserDao;
import com.ghx.entity.User;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;@WebServlet(name = "UserServlet", value = "/UserServlet")
public class UserServlet extends HttpServlet {private UserDao userDao=new UserDao();@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");String method = request.getParameter("method");if("login".equals(method)){login(request,response);}else if("register".equals(method)){register(request,response);}else if("logout".equals(method)){logout(request,response);}}//退出系统private void logout(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{HttpSession session = request.getSession();User user = (User) session.getAttribute("userinfo");session.removeAttribute("userinfo");response.sendRedirect("/login.jsp");}//注册private void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{String username = request.getParameter("username");String password = request.getParameter("password");String realname = request.getParameter("realname");String age = request.getParameter("age");int add = userDao.add(username, password, realname, age);if(add>0){response.sendRedirect("/login.jsp?success=1");}else {request.setAttribute("error2","<span style=\"color: red \">注册失败,用户名已存在!</span>");request.getRequestDispatcher("/register.jsp?error2").forward(request,response);}}//登录private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{String username = request.getParameter("username");String password = request.getParameter("password");User user = userDao.find(username, password);if(user!=null){request.getSession().setAttribute("userinfo",user);response.sendRedirect("/BookServlet");}else {request.setAttribute("error","<span style=\"color: red \">用户名或密码错误!</span>");request.getRequestDispatcher("/login.jsp?error").forward(request,response);}}}
页面
login.jsp
<%--Created by IntelliJ IDEA.User: lenovoDate: 2024/12/3Time: 16:40To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录</title><style>/* 整体页面背景设置 */body {font-family: Arial, sans-serif;/* background-image: url('背景图片路径');*/background-size: cover;background-repeat: no-repeat;background-position: center;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}/* 登录框样式 */.login-box {background-color: rgba(255, 255, 255, 0.8);padding: 40px;border-radius: 10px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);}/* 标题样式 */h2 {text-align: center;margin-bottom: 30px;color: #333;}/* 输入框样式 */input[type="text"],input[type="password"] {width: 100%;padding: 15px;margin-bottom: 20px;border: 1px solid #ccc;border-radius: 5px;font-size: 16px;}/* 登录按钮样式 */input[type="submit"] {width: 100%;padding: 15px;background-color: #007BFF;color: white;border: none;border-radius: 5px;font-size: 16px;cursor: pointer;}input[type="submit"]:hover {background-color: #0056b3;}/* 注册链接样式 */.register-link {text-align: center;margin-top: 15px;}a {color: #007BFF;text-decoration: none;}a:hover {text-decoration: underline;}</style>
</head>
<body>
<div class="login-box"><h2>登录</h2><div></div><form action="/UserServlet?method=login" method="post"><input type="text" placeholder="用户名" name="username"><input type="password" placeholder="密码" name="password"><input type="submit" value="登录"></form><div class="register-link"><a href="/register.jsp">还没有账号?注册</a></div><div>${error}</div>
</div>
</body>
</html>
register.jsp
<%--Created by IntelliJ IDEA.User: lenovoDate: 2024/12/3Time: 16:46To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>注册</title><style>/* 整体页面背景设置 */body {font-family: Arial, sans-serif;background-color: #f4f4f4;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}/* 注册框样式 */.register-box {background-color: white;padding: 40px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);width: 400px;}/* 标题样式 */h2 {text-align: center;margin-bottom: 30px;color: #333;}/* 输入框通用样式 */input[type="text"],input[type="password"],input[type="email"],input[type="number"]{width: 100%;padding: 15px;margin-bottom: 20px;border: 1px solid #ccc;border-radius: 5px;font-size: 16px;}/* 注册按钮样式 */input[type="submit"] {width: 100%;padding: 15px;background-color: #007BFF;color: white;border: none;border-radius: 5px;font-size: 16px;cursor: pointer;}input[type="submit"]:hover {background-color: #007BFF;}/* 已有账号登录链接样式 */.login-link {text-align: center;margin-top: 20px;}a {color: #007BFF;text-decoration: none;}a:hover {text-decoration: underline;}</style>
</head>
<body><div class="register-box"><h2>注册新账号</h2><form action="/UserServlet?method=register" method="post"><input type="text" placeholder="用户名" name="username"><input type="password" placeholder="设置密码" name="password"><input type="text" placeholder="真实姓名" name="realname"><input type="number" placeholder="年龄" name="age"><input type="submit" value="注册"></form><div class="login-link"><a href="login.jsp">已有账号?点击登录</a></div>${error2}</div>
</body>
</html>
index.jsp
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.ghx.entity.User" %><%--Created by IntelliJ IDEA.User: lenovoDate: 2024/12/4Time: 9:25To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title</title><style>/* 全局样式重置与基础设置 */* {margin: 0;padding: 0;box-sizing: border-box;font-family: Arial, sans-serif;}body {background-color: #f4f9ff;color: #333;line-height: 1.6;}/* 页面头部样式 */header {background-color: #007bff;color: white;text-align: center;padding: 20px 0;box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);}header h1 {margin: 0;}/* 导航栏样式 */nav {background-color: #0056b3;padding: 10px 0;}nav ul {list-style-type: none;display: flex;justify-content: center;align-items: center;}nav ul li {margin: 0 15px;color: white;}nav a {color: white;text-decoration: none;padding: 8px 15px;border-radius: 4px;transition: background-color 0.3s ease;}nav a:hover {background-color: #003d80;}/* 主要内容区域样式 */main {padding: 20px;max-width: 1000px;margin: 20px auto;background-color: white;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);border-radius: 5px;}main h1 {text-align: center;margin-bottom: 20px;color: #007bff;}/* 表格样式 */table {width: 100%;border-collapse: collapse;margin-bottom: 20px;border: 1px solid #ccc;}table th,table td {border: 1px solid #ccc;padding: 12px;text-align: center;}table th {background-color: #e6f7ff;color: #333;font-weight: bold;}table tr:nth-child(even) {background-color: #f9f9f9;}table tr:hover {background-color: #e9f3ff;cursor: pointer;}/* 操作链接样式 */table td a {color: #007bff;text-decoration: none;margin: 0 5px;padding: 5px 10px;border-radius: 3px;transition: background-color 0.3s ease, color 0.3s ease;}table td a:hover {background-color: #007bff;color: white;}/* 退出按钮样式 */.logout {float: right;margin-right: 20px;color: white;text-decoration: none;padding: 8px 15px;border-radius: 4px;background-color: #dc3545;transition: background-color 0.3s ease;display: flex;align-items: center;}.logout:hover {background-color: #c82333;}.logout i {margin-right: 5px;}/* 修改成功提示样式 */.success-message {text-align: center;color: green;margin-bottom: 20px;font-weight: bold;display: none;}</style>
</head>
<body>
<c:if test="${sessionScope.userinfo==null}"><c:redirect url="login.jsp"></c:redirect>
</c:if><header><h1>书籍信息管理系统</h1>
</header>
<nav><ul><li>欢迎${sessionScope.userinfo.realname}登录</li></ul><ul><li><a href="#">首页</a></li><li><a href="/insert.jsp">添加</a></li><a href="/UserServlet?method=logout" class="logout">退出</a></ul></nav>
<main><table><tr><th>书籍id</th><th>书籍名</th><th>价格</th><th>出版社</th><th>操作</th></tr><c:forEach items="${requestScope.book}" var="b"><tr><td>${b.id}</td><td>${b.name}</td><td>${b.price}</td><td>${b.publisher}</td><td><a href="/BookServlet?method=delete&id=${b.id}" onclick="return confirm('确定要删除该条信息吗?');">删除</a><a href="/BookServlet?method=getById&id=${b.id}">修改</a></td></tr></c:forEach></table>
</main>
</body>
</html>
insert.jsp
<%@ page import="com.ghx.entity.User" %><%--Created by IntelliJ IDEA.User: lenovoDate: 2024/12/4Time: 10:31To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><style>/* 全局样式重置,去除浏览器默认样式差异 */* {margin: 0;padding: 0;box-sizing: border-box;}body {font-family: 'Roboto', sans-serif; /* 使用更现代的字体 */background-color: #eef2f7; /* 淡蓝色系背景,营造清新氛围 */display: flex;justify-content: center;align-items: center;min-height: 100vh;}/* 主要内容容器样式 */.main-container {width: 500px; /* 设定合适的宽度 */background-color: white;border-radius: 8px; /* 较大的圆角,更显柔和 */box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); /* 柔和阴影效果 */overflow: hidden; /* 隐藏超出部分,确保圆角效果正常显示 */}/* 标题样式 */h2 {background-color: cornflowerblue; /* 标题栏蓝色背景 */color: white;text-align: center;padding: 15px 0;margin-bottom: 20px;}table {width: 100%;border-collapse: collapse;margin-bottom: 20px;}th, td {border-bottom: 1px solid #e0e0e0; /* 仅底部显示边框,简洁风格 */padding: 12px 20px;text-align: left;}th {font-weight: normal; /* 表头字体不加粗,更显简洁 */color: #777; /* 表头文字灰色,区分数据 */}input[type="text"] {width: 100%;padding: 8px;border: 1px solid #ccc;border-radius: 4px;background-color: #f9f9f9; /* 输入框浅灰色背景,更清晰 */color: #333; /* 输入框文字颜色 */outline: none; /* 去除输入框聚焦时的默认边框 */transition: background-color 0.2s ease; /* 背景色过渡效果 */}input[type="text"]:focus {background-color: white; /* 输入框聚焦时变白,增强交互感 */}input[type="submit"] {display: block;width: 100%;padding: 10px 0;background-color: #2ecc71; /* 绿色提交按钮,更醒目积极 */color: white;border: none;border-radius: 4px;cursor: pointer;font-size: 16px;transition: background-color 0.3s ease; /* 背景色过渡效果 */}input[type="submit"]:hover {background-color: #27ae60; /* 悬停时加深绿色 */}</style>
</head>
<body>
<c:if test="${sessionScope.userinfo==null}"><c:redirect url="login.jsp"></c:redirect>
</c:if><div class="main-container"><h2>书籍信息</h2><form action="/BookServlet?method=insert" method="post"> <!-- 添加表单标签,假设提交到当前页面,实际需修改action属性指向处理逻辑 --><table><tr><th>书籍名:</th><td><input type="text" name="name"></td></tr><tr><th>书籍价格:</th><td><input type="text" name="price"></td></tr><tr><th>出版社:</th><td><input type="text" name="publisher"></td></tr><tr><td colspan="2"><input type="submit" value="确认添加"></td></tr></table></form>
</div></body>
</html>
update.jsp
<%@ page import="com.ghx.entity.User" %><%--Created by IntelliJ IDEA.User: lenovoDate: 2024/12/4Time: 10:31To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><style>/* 全局样式重置,去除浏览器默认样式差异 */* {margin: 0;padding: 0;box-sizing: border-box;}body {font-family: 'Roboto', sans-serif; /* 使用更现代的字体 */background-color: #eef2f7; /* 淡蓝色系背景,营造清新氛围 */display: flex;justify-content: center;align-items: center;min-height: 100vh;}/* 主要内容容器样式 */.main-container {width: 500px; /* 设定合适的宽度 */background-color: white;border-radius: 8px; /* 较大的圆角,更显柔和 */box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); /* 柔和阴影效果 */overflow: hidden; /* 隐藏超出部分,确保圆角效果正常显示 */}/* 标题样式 */h2 {background-color: cornflowerblue; /* 标题栏蓝色背景 */color: white;text-align: center;padding: 15px 0;margin-bottom: 20px;}table {width: 100%;border-collapse: collapse;margin-bottom: 20px;}th, td {border-bottom: 1px solid #e0e0e0; /* 仅底部显示边框,简洁风格 */padding: 12px 20px;text-align: left;}th {font-weight: normal; /* 表头字体不加粗,更显简洁 */color: #777; /* 表头文字灰色,区分数据 */}input[type="text"] {width: 100%;padding: 8px;border: 1px solid #ccc;border-radius: 4px;background-color: #f9f9f9; /* 输入框浅灰色背景,更清晰 */color: #333; /* 输入框文字颜色 */outline: none; /* 去除输入框聚焦时的默认边框 */transition: background-color 0.2s ease; /* 背景色过渡效果 */}input[type="text"]:focus {background-color: white; /* 输入框聚焦时变白,增强交互感 */}input[type="submit"] {display: block;width: 100%;padding: 10px 0;background-color: #2ecc71; /* 绿色提交按钮,更醒目积极 */color: white;border: none;border-radius: 4px;cursor: pointer;font-size: 16px;transition: background-color 0.3s ease; /* 背景色过渡效果 */}input[type="submit"]:hover {background-color: #27ae60; /* 悬停时加深绿色 */}</style>
</head>
<body>
<c:if test="${sessionScope.userinfo==null}"><c:redirect url="login.jsp"></c:redirect>
</c:if><div class="main-container"><h2>书籍信息</h2><form action="/BookServlet?method=update" method="post"> <!-- 添加表单标签,假设提交到当前页面,实际需修改action属性指向处理逻辑 --><table><tr><th>书籍id:</th><td><input type="text" value="${bookid.id}" name="id" readonly></td></tr><tr><th>书籍名:</th><td><input type="text" value="${bookid.name}" name="name"></td></tr><tr><th>书籍价格:</th><td><input type="text" value="${bookid.price}" name="price"></td></tr><tr><th>出版社:</th><td><input type="text" value="${bookid.publisher}" name="publisher"></td></tr><tr><td colspan="2"><input type="submit" value="确认添加"></td></tr></table></form>
</div></body>
</html>
相关文章:
简易图书管理系统
javawebjspservlet 实体类 package com.ghx.entity;/*** author :guo* date :Created in 2024/12/6 10:13* description:* modified By:* version:*/ public class Book {private int id;private String name;private double pri…...
结构型-组合模式(Composite Pattern)
什么是组合模式 又名部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 结构 抽象根节点(Co…...
【知识堂】大数据
一、大数据的基本概念 什么是大数据? 大数据(Big Data)是指无法通过传统工具和方法在合理时间内处理的海量数据集合。其关键特征是4V,即数据量大(Volume)、数据种类多(Variety)、处…...
力扣C语言刷题记录(三)搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…...
在Node.js局域网调试https的Vue项目
需求: 最近在测试在网页端(HTML5)调用移动设备的定位等权限功能,发现某些功能是必须保证域名在https下的否则会出现不正常现象。 解决: 1.在线生成和证书 访问:CSR文件生成工具-中国数字证书CHINASSL …...
3.5 认识决策树
3.5 认识决策树 3.5.1 认识决策树 如何高效的进行决策? 特征的先后顺序 3.5.2 决策树分类原理详解 已知有四个特征,预测 是否贷款给某个人。 先看房子,再看工作,是否贷款。 年龄,信贷情况,工作&#…...
股市复盘笔记
复盘是股市投资中非常重要的一个环节,它指的是投资者在股市收盘后,对当天的市场走势、个股表现以及自己的交易行为进行回顾和总结,以便更好地指导未来的投资决策。以下是对复盘的详细解释: 一、复盘的目的 总结市场走势ÿ…...
Canal 深入解析:从原理到实践的全面解读
Canal 深入解析:从原理到实践的全面解读 官网:https://github.com/alibaba/canal Canal 是阿里巴巴开源的一款分布式增量数据同步工具,广泛应用于数据同步、实时数据处理和数据库的增量备份等场景。它可以通过监听 MySQL 数据库的 binlog&am…...
SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测
之前和很多群友聊天发现对2016的无域和负载均衡满心期待,毕竟可以简单搭建而且可以不适用第三方负载均衡器,SQL自己可以负载了。windows2016已经可以下载使用了,那么这回终于可以揭开令人憧憬向往的AlwaysOn2016 负载均衡集群的神秘面纱了。 …...
解决 Maven 部署中的 Artifact 覆盖问题:实战经验分享20241204
🛠️ 解决 Maven 部署中的 Artifact 覆盖问题:实战经验分享 📌 引言 在软件开发过程中,持续集成和持续部署(CI/CD)是提高开发效率和代码质量的关键手段。Hudson 和 Maven 是两种广泛使用的工具࿰…...
【开源免费】基于SpringBoot+Vue.JS中小型医院网站(JAVA毕业设计)
博主说明:本文项目编号 T 078 ,文末自助获取源码 \color{red}{T078,文末自助获取源码} T078,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...
Linux CentOS
阿里云开源镜像下载链接 https://mirrors.aliyun.com/centos/7/isos/x86_64/ VMware 安装 CentOS7 自定义 下一步 选择稍后安装操作系统 选择 输入 查看物理机CPU内核数量 CtrlShiftEsc 总数不超过物理机内核数量 推荐内存 自选 推荐 推荐 默认 拆分成多个 默认 自定义硬件…...
Android SurfaceFlinger layer层级
壁纸作为显示的最底层窗口它是怎么显示的 1. SurfaceFlinger layer层级 锁屏状态dump SurfaceFlinger ,adb shell dumpsys SurfaceFlinger Display 0 (active) HWC layers: -----------------------------------------------------------------------------------…...
spark-sql配置教程
1.前期准备 (1)首先要把hadoop集群,hive和spark等配置好 hadoop集群,hive的配置可以看看这个博主写的博客 大数据_蓝净云的博客-CSDN博客 或者看看黑马程序员的视频 黑马程序员大数据入门到实战教程,大数据开发必…...
生成表格pdf格式
1. 添加依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>kernel</artifactId><version>7.2.5</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>layout…...
C++ 游戏开发的前沿趋势:从光线追踪到人工智能的全新挑战
随着游戏行业的快速发展,技术的不断进步为游戏开发带来了前所未有的机遇和挑战。从逼真的光影效果到复杂的物理模拟,再到智能化的非玩家角色(NPC)行为和玩家交互,现代游戏的技术需求已经超越了传统的图形渲染与场景搭建…...
微信小程序3-显标记信息和弹框
感谢阅读,初学小白,有错指正。 一、实现功能: 在地图上添加标记点后,标记点是可以携带以下基础信息的,如标题、id、经纬度等。但是对于开发来说,这些信息还不足够,而且还要做到点击标记点时&a…...
EasyNVR中HTTP-FLV协议无法播放怎么解决?
在科技日新月异的今天,摄像头作为公共安全领域的重要一环,其技术的不断提升正显著地改变着社会的安全格局。从最初的简单监控到如今的高清智能分析,我们可以对特定区域进行实时监控和记录,为社会的安全稳定提供了强有力的保障。 问…...
spring cloud之ribbon复习回顾
其实在项目中直接使用ribbon时不多,大多是使用feign的,其实feign底层也是通过ribbon构建的,主要记忆一下计算规则,ribbon的源码还是很不错的,还是值得学习的。 1、添加pom <dependency><groupId>org.spr…...
RFT 强化微调
OpenAI在今天发布的新技术,RFT结合了SFT和RL的优化算法,与传统的监督微调不同,强化微调旨在通过任务训练让模型掌握复杂推理能力,而不仅仅是“记住答案”。 什么是强化微调 强化微调是通过高质量任务数据和参考答案优化大语言模型…...
SWF逆向工程行业报告:JPEXS Free Flash Decompiler市场份额2025深度分析
SWF逆向工程行业报告:JPEXS Free Flash Decompiler市场份额2025深度分析 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 在Flash技术逐渐退出主流但仍有大量历史资产需要维护…...
实用扩散模型完整指南:100行代码实现高效图像生成
实用扩散模型完整指南:100行代码实现高效图像生成 【免费下载链接】Diffusion-Models-pytorch Pytorch implementation of Diffusion Models (https://arxiv.org/pdf/2006.11239.pdf) 项目地址: https://gitcode.com/gh_mirrors/di/Diffusion-Models-pytorch …...
遇到‘Got minus one from a read call‘别慌!Oracle 12c连接数优化全攻略
深度解析Oracle 12c连接数优化:从"Got minus one from a read call"到高可用架构 当Java应用突然抛出java.sql.SQLRecoverableException: IO Error: Got minus one from a read call异常时,这往往是数据库连接资源耗尽的信号。本文将带您深入O…...
编译原理避坑指南:自顶向下语法分析的5个常见错误及解决方法
编译原理避坑指南:自顶向下语法分析的5个常见错误及解决方法 第一次接触自顶向下语法分析时,我盯着那个无限循环的递归文法整整三天没想明白——为什么明明按照教材步骤操作,程序却始终报错?直到助教指出我忽略了间接左递归的隐蔽…...
终极指南:如何在macOS上打造智能桌面歌词显示体验
终极指南:如何在macOS上打造智能桌面歌词显示体验 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics LyricsX是一款专为macOS用户设计的桌面歌词显示工具&#x…...
ROS2新手必看:用turtlesim小乌龟快速入门机器人仿真(附完整安装指南)
ROS2实战入门:从turtlesim小乌龟探索机器人仿真世界 引言:为什么选择turtlesim作为ROS2的起点? 在机器人操作系统(ROS)的学习道路上,很多开发者都会遇到一个共同的困境:理论概念抽象难懂,而直接上手复杂项…...
MySQL视图实战:用SQL视图搞定学生奖学金评定与补考名单(附完整代码)
MySQL视图实战:用SQL视图搞定学生奖学金评定与补考名单(附完整代码) 教务管理系统中,数据处理效率直接影响决策质量。想象一下每学期末,教务处老师需要从数十万条记录中筛选奖学金候选人和补考名单——传统的手写SQL查…...
HuTool代理请求遇阻:深入解析HTTP/1.1 407 Proxy Authentication Required的成因与实战解决方案
1. 当HuTool遇上407:代理认证失败的典型场景 最近在项目中使用HuTool发送HTTPS请求时,突然遇到一个让人头疼的错误——HTTP/1.1 407 Proxy Authentication Required。这个错误就像高速公路上的收费站,明明已经交了通行费(设置了代…...
双屏天花板用法!YogaBook 9i 多屏操作全演示
YogaBook 9i 作为双屏笔记本里的标志性机型,凭借两块高素质触控屏带来了完全不同于传统电脑的使用体验,但不少用户拿到手只当普通笔记本使用,没能发挥双屏协同的真正效率,多屏联动、分屏操作、跨屏交互这些核心亮点都被白白浪费。…...
Android Gradle - Gradle 自定义插件(Build Script 自定义插件、buildSrc 自定义插件、独立项目自定义插件)
一、Build Script 自定义插件 1、基本介绍插件代码直接写在模块级 build.gradle 文件中逻辑非常简单,且仅在该模块使用2、演示 (1)具体实现 在模块级 build.gradle 文件中定义插件 class SimpleBuildScriptPlugin implements Plugin<Proje…...
