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

项目知识点记录

1.使用druid连接池 

 

使用properties配置文件:

driverClassName= com.mysql.cj.jdbc.Driver
url= jdbc:mysql://localhost:3306/book?useSSL=true&setUnicode=true&charsetEncoding=UTF-8&serverTimezone=GMT%2B8
username= root
password= 123456
#初始化链接数量
initialSize=5
#最大链接数
maxActive=10
#最大等待时间
maxWait=3000

工具类:

package com.util;import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;public class JDBCUtils {//定义成员变量private static DataSource ds = null;//定义静态代码块static {try {//加载配置文件Properties pro = new Properties();pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));//获取DataSourceds = DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}//获取链接public static Connection getConnection() throws SQLException{return ds.getConnection();}//释放资源public static void close(Statement stmt,Connection conn){if (stmt != null){try {stmt.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}public static void close(ResultSet rs,Statement stmt,Connection conn){if (rs != null){try {rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}}close(stmt,conn);}//获取链接池方法public static  DataSource getDataSource(){return ds;}
}

Dao接口: 

 

 dao实现类:

查询:

 //定义sqlString sql = "select * from user where username = ? and password = ?";
//执行sqlUser user1 = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), user.getUsername(), user.getPassword());

 增加:

 //定义sql
String sql ="insert into user values(null,?,?)";
//执行sql
int update = template.update(sql, user.getUsername(), user.getPassword());

删除:

 //定义sqlString sql = "delete from shopping where id = ?";//执行sqlint update = template.update(sql, id);

修改:

//定义sqlString sql ="update books set img = ? , name = ? , price = ? , classly = ? , detail = ? where id = ?";//执行sqlint update = template.update(sql, books.getImg(), books.getName(), books.getPrice(), books.getClassly(), books.getDetail(), books.getId());

 

package com.dao;import com.domain.Admin;
import com.domain.Books;
import com.domain.Shopping;
import com.domain.User;
import com.util.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.concurrent.TimeoutException;public class DaoImpl implements Dao {//使用JdbcTemplateprivate JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());//用户登录@Overridepublic User login(User user) {try {//定义sqlString sql = "select * from user where username = ? and password = ?";//执行sqlUser user1 = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), user.getUsername(), user.getPassword());//返回结果return user1;} catch (DataAccessException e) {e.printStackTrace();return null;}}//用户注册@Overridepublic int addUser(User user) {try {//定义sqlString sql ="insert into user values(null,?,?)";//执行sqlint update = template.update(sql, user.getUsername(), user.getPassword());return update;} catch (DataAccessException e) {e.printStackTrace();return 0;}}//遍历图书@Overridepublic List<Books> selectBooks(String classly) {//定义sqlString sql = "select * from books where classly = ?";//执行sqlList<Books> query = template.query(sql, new RowMapper<Books>() {@Overridepublic Books mapRow(ResultSet resultSet, int i) throws SQLException {Books b = new Books();b.setImg(resultSet.getString("img"));b.setName(resultSet.getString("name"));b.setPrice(resultSet.getInt("price"));b.setDetail(resultSet.getString("detail"));return b;}}, classly);return query;}//添加图书@Overridepublic int addBook(Books books) {try {//定义sqlString sql = "insert into books values(null,?,?,?,?,?)";//执行sqlint update = template.update(sql, books.getImg(),books.getName(), books.getPrice(),books.getClassly(), books.getDetail());//返回值return update;} catch (DataAccessException e) {e.printStackTrace();return 0;}}//查询图书详情@Overridepublic Books selectDetail(String name) {//定义sqlString sql ="select * from books where name = ?";//执行sqlBooks query = template.queryForObject(sql, new BeanPropertyRowMapper<Books>(Books.class), name);//返回return query;}//加入购物车@Overridepublic int addShopping(Shopping shopping) {try {//定义sqlString sql = "insert into shopping values(null,?,?,?,?,?)";int update = template.update(sql,shopping.getImg(), shopping.getUsername(), shopping.getName(), shopping.getNumber(), shopping.getPrice());//返回值return update;} catch (DataAccessException e) {e.printStackTrace();return 0;}}//遍历购物车@Overridepublic List<Shopping> selectShopping(String username) {//定义sqlString sql = "select * from shopping where username = ?";List<Shopping> query = template.query(sql, new RowMapper<Shopping>() {@Overridepublic Shopping mapRow(ResultSet resultSet, int i) throws SQLException {Shopping shopping = new Shopping();shopping.setId(resultSet.getInt("id"));shopping.setImg(resultSet.getString("img"));shopping.setName(resultSet.getString("name"));shopping.setNumber(resultSet.getInt("number"));shopping.setPrice(resultSet.getInt("price"));return shopping;}}, username);return query;}//删除购物车@Overridepublic int deleteShopping(int id) {//定义sqlString sql = "delete from shopping where id = ?";//执行sqlint update = template.update(sql, id);//返回执行结果return update;}//清空购物车@Overridepublic int deleteS(String username) {//定义sqlString sql = "delete from shopping where username = ?";//执行sqlint update = template.update(sql, username);//返回执行结果return update;}//管理员登录@Overridepublic Admin admin(Admin admin) {try {//定义sqlString sql = "select * from admin where username = ? and password = ?";//执行sqlAdmin admin1 = template.queryForObject(sql, new BeanPropertyRowMapper<Admin>(Admin.class), admin.getUsername(), admin.getPassword());return admin1;} catch (DataAccessException e) {e.printStackTrace();return null;}}//遍历图书@Overridepublic List<Books> BOOKS_LIST() {//定义sqlString sql ="select * from books";//执行sqlList<Books> query = template.query(sql, new RowMapper<Books>() {@Overridepublic Books mapRow(ResultSet resultSet, int i) throws SQLException {Books b = new Books();b.setId(resultSet.getInt("id"));b.setImg(resultSet.getString("img"));b.setName(resultSet.getString("name"));b.setPrice(resultSet.getInt("price"));b.setClassly(resultSet.getString("classly"));b.setDetail(resultSet.getString("detail"));return b;}});return query;}//删除图书@Overridepublic int deleteBooks(String name) {//定义sqlString sql = "delete from books where name = ?";//执行sqlint update = template.update(sql, name);//返回return update;}//修改图书@Overridepublic int modifyBook(Books books) {//定义sqlString sql ="update books set img = ? , name = ? , price = ? , classly = ? , detail = ? where id = ?";//执行sqlint update = template.update(sql, books.getImg(), books.getName(), books.getPrice(), books.getClassly(), books.getDetail(), books.getId());//返回return update;}//遍历用户@Overridepublic List<User> selectUser() {//定义sqlString sql ="select * from user";//执行sqlList<User> query = template.query(sql, new RowMapper<User>() {@Overridepublic User mapRow(ResultSet resultSet, int i) throws SQLException {User u = new User();u.setId(resultSet.getInt("id"));u.setUsername(resultSet.getString("username"));u.setPassword(resultSet.getString("password"));return u;}});return query;}//修改用户@Overridepublic int modifyUser(User user) {//定义sqlString sql = "update user set username = ? , password = ? where id = ?";//执行sqlint update = template.update(sql, user.getUsername(), user.getPassword(), user.getId());//返回return update;}@Overridepublic int deleteUser(int id) {//定义sqlString sql ="delete from user where id =?";//执行sqlint update = template.update(sql, id);return update;}
}

登录Servlet控制器:

package com.demo;import com.dao.Dao;
import com.dao.DaoImpl;
import com.domain.User;
import org.apache.commons.beanutils.BeanUtils;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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置编码格式request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//获取数据Map<String, String[]> map = request.getParameterMap();//封装数据User user = new User();try {BeanUtils.populate(user,map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//调用daoDao dao = new DaoImpl();User login = dao.login(user);if (login != null){HttpSession session = request.getSession();session.setAttribute("username",user.getUsername());response.sendRedirect(request.getContextPath()+"/indexServlet?classly=1");}else {request.setAttribute("user","账号或密码错误");request.getRequestDispatcher("login.jsp").forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

简单的过滤器实现:判断用户是否登录,登录就放行

package com.listener;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;/*** 登录验证的过滤器*/
@WebFilter("/*")
public class LoginFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {//强制转换HttpServletRequest request = (HttpServletRequest) req;//1.获取资源请求路径String uri = request.getRequestURI();//2.判断是否包含登录相关资源路径,要注意排除掉css/图片/js等资源if (uri.contains("/login.jsp") || uri.contains("/loginServlet")||uri.contains("/login2.jsp")||uri.contains("/login2Servlet") ||uri.contains("/css/") || uri.contains("/img/") ||uri.contains("adlogin.jsp") || uri.contains("/adLoginServlet")){//包含,用户就是想登录,放行chain.doFilter(req, resp);}else {//不包含,需要验证用户是否登录//3.从获取session中获取usernameObject username = request.getSession().getAttribute("username");if (username != null){//登录了,放行chain.doFilter(req,resp);}else {//没有登录,跳转登录页面request.setAttribute("user","您尚未登录,请登录");request.getRequestDispatcher("/login.jsp").forward(request,resp);}}//chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {}}

相关文章:

项目知识点记录

1.使用druid连接池 使用properties配置文件&#xff1a; driverClassName com.mysql.cj.jdbc.Driver url jdbc:mysql://localhost:3306/book?useSSLtrue&setUnicodetrue&charsetEncodingUTF-8&serverTimezoneGMT%2B8 username root password 123456 #初始化链接数…...

【HDFS】ListenableFuture在HDFS中的应用

本文主要介绍以下内容: ListenableFuture提供的功能和基本使用方法;AsyncLogger、IPCLoggerChannel(它是AsyncLogger的子类)QuorumCall类一、ListenableFuture的基本使用 ListenableFuture 是 Guava 库中提供的一个接口,它扩展了 JDK 中的 Future 接口,并添加了异步任务…...

Databend 开源周报第 105 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 Databend 轻量级…...

ArcGISPro随机森林自动化调参分类预测模型展示

更改ArcGISPro的python环境变量请参考文章 ArcGISPro中如何使用机器学习脚本_Z_W_H_的博客-CSDN博客 脚本文件如下 点击运行 结果展示 负类预测概率 正类预测概率 二值化概率 文件夹&#xff08;模型验证结果&#xff09; 数据集数据库 ROC曲线 由于个人数据量太少所以…...

科技资讯|苹果手机版Vision Pro头显专利曝光,内嵌苹果手机使用

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果公司近日获得了一项头显相关的技术专利&#xff0c;展示了一款亲民款 Vision Pro 头显&#xff0c;可以将 iPhone 放置在头显内部充当屏幕。 根据patentlyapple 媒体报道&#xff0c;这是苹果公司…...

Linux服务器映射到本地磁盘

内容来自网友博客。 把linux服务器上的文件夹映射到本地作为一个磁盘来访问&#xff0c;步骤如下 一. samba的安装: sudo apt-get install samba // (sudo get temp root auth) sudo apt-get install smbfs //旧版本 sudo apt-get install cifs-utils //新版本 上…...

条条大路通罗马系列—— 使用 Hiredis-cluster 连接 Amazon ElastiCache for Redis 集群

前言 Amazon ElastiCache for Redis 是速度超快的内存数据存储&#xff0c;能够提供亚毫秒级延迟来支持 实时应用程序。适用于 Redis 的 ElastiCache 基于开源 Redis 构建&#xff0c;可与 Redis API 兼容&#xff0c;能够与 Redis 客户端配合工作&#xff0c;并使用开放的 Re…...

元宇宙核能发电VR模拟仿真实训教学为建设新型电力系统提供重要支撑

随着“碳达峰、碳中和”目标与建设新型能源体系的提出&#xff0c;在元宇宙环境下建设电力系统是未来发展的趋势。以物联网、区块链、数字孪生、混合现实等技术为主要代表的元宇宙技术体系及其在电力和能源系统中的应用&#xff0c;将会促进智能电网的发展&#xff0c;为建设新…...

我的Python教程:使用Pyecharts画柱状图

Pyecharts是一个用于生成 Echarts 图表的 Python 库。Echarts 是一个基于 JavaScript 的数据可视化库&#xff0c;提供了丰富的图表类型和交互功能。通过 Pyecharts&#xff0c;你可以使用 Python 代码生成各种类型的 Echarts 图表&#xff0c;例如折线图、柱状图、饼图、散点图…...

应用冷启bindservice耗时

背景&#xff1a;sdk初始化的时候耗时过长&#xff0c;而sdk,init方法中只有一个bindservice及一些变量的初始化&#xff0c;却好事100ms 查看trace发现binderservice耗时只占init耗时的一小部分&#xff0c;但是init逻辑并没有其他代码。 这里servicebind返回快的另一原因是se…...

资金情况:每周一次投资和消费总结

以下是每周一次投资和消费总结的最佳方法&#xff1a; 撰写一份清单&#xff1a;在整个星期中记录你的投资和消费行为&#xff0c;包括花费、支出和收入。 分类整理&#xff1a;将你的花费和支出分成不同的类别&#xff0c;例如餐饮、购物、交通等等。这将帮助你更好地了解你的…...

(杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(7)

1002 Random Nim Game 只有3种情况,要么必赢,要么必输,要么从宏观角度考虑,随机的话,赢的概率就是1/2(就像抛硬币一样,随着抛的次数越来越多,正反面的概率将越来越接近1) 当只要有一堆石头数量不是1,那么就是必赢或必输,赢的概率就是1/2 当每堆石头数量都为1时,当堆数为奇数…...

力扣:61. 旋转链表(Python3)

题目&#xff1a; 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 示例&…...

笙默考试管理系统-MyExamTest----codemirror(1)

笙默考试管理系统-MyExamTest----codemirror&#xff08;1&#xff09; 目录 笙默考试管理系统-MyExamTest----codemirror&#xff08;1&#xff09; 一、 笙默考试管理系统-MyExamTest----codemirror 二、 笙默考试管理系统-MyExamTest----codemirror 三、 笙默考试管…...

【资料分享】全志科技T507工业核心板硬件说明书(二)

目 录 2引脚说明 2.1引脚排列 2.2引脚定义 2.3内部引脚使用说明 2.4引脚上下拉、串联说明 2.5功能引脚信号走线长度与阻抗说明 本文档为创龙科技SOM-TLT507工业...

PyTorch翻译官网教程-FAST TRANSFORMER INFERENCE WITH BETTER TRANSFORMER

官网链接 Fast Transformer Inference with Better Transformer — PyTorch Tutorials 2.0.1cu117 documentation 使用 BETTER TRANSFORMER 快速的推理TRANSFORMER 本教程介绍了作为PyTorch 1.12版本的一部分的Better Transformer (BT)。在本教程中&#xff0c;我们将展示如…...

SpringCloud实用篇6——elasticsearch搜索功能

目录 1 DSL查询文档1.1 DSL查询分类1.2 全文检索查询1.2.1 使用场景1.2.2 基本语法1.2.3 示例1.2.4 总结 1.3 精准查询1.3.1 term查询1.3.2 range查询1.3.3 总结 1.4.地理坐标查询1.4.1 矩形范围查询1.4.2 附近查询 1.5 复合查询1.5.1 相关性算分1.5.2 算分函数查询1&#xff0…...

质量小议29 -- 循证

1. 循证 Evidence-Based遵循证据基于证据慎重、准确和明智地应用当前所能获得的最好研究依据利用证据追求实践科学化和专业化的价值观&#xff0c;重视证据指导实践的理念&#xff0c;运用证据解决实践中问题的思维&#xff0c;基于证据开展专业实践活动的指导原则&#xff0c…...

微服务与Nacos概述-3

流量治理 在微服务架构中将业务拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff0c;但是由于网络原因或者自身的原因&#xff0c;服务并不能保证服务的100%可用&#xff0c;如果单个服务出现问题&#xff0c;调用这个服务就会出现网络延迟&#xff0c;此时…...

Java 面试八股文

参考&#xff1a; 2023年 Java 面试八股文&#xff08;20w字&#xff09;_json解析失败_leader_song的博客-CSDN博客...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...