项目知识点记录

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 {}}

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

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

相关文章

【验证码逆向专栏】最新某度旋转验证码 v2 逆向分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

更新spring boot jar包中的BOOT-INF/lib目录下的jar包

更新spring-boot jar包中的BOOT-INF/lib目录下的jar包 场景 需要更新lib目录下某个jar包的配置文件 失败的解决方法 用解压软件依次打开spring-boot jar包&#xff08;设为a.jar&#xff09;、BOOT-INF/lib目录下的jar包&#xff08;设为b.jar&#xff09;&#xff0c;然后修改…

2021年09月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:数字判断 输入一个字符,如何输入的字符是数字,输出yes,否则输出no 输入 一个字符 输出 如何输入的字符是数字,输出yes,否则输出no 样例1输入 样例1输入 5 样例1输出 yes 样例2输入 A 样例2输出 no 下面是一个使用C语言编写的数字判断程序的示例代码,根据输入的字符…

怎么入驻抖音的产业带服务商呢?

作为互联网行业中的明星企业之一&#xff0c;抖音电商近年来一直备受市场瞩目&#xff0c;甚至于某种角度而言&#xff0c;围绕抖音电商的研究和解读已成为一门“显学”。 如果说2021年之前&#xff0c;抖音试水电商业务的方式大多以主播、品牌及商家申请找cmxyci自发摸索为主…

实践|Linux 中查找和删除重复文件

动动发财的小手&#xff0c;点个赞吧&#xff01; 如果您习惯使用下载管理器从互联网上下载各种内容&#xff0c;那么组织您的主目录甚至系统可能会特别困难。 通常&#xff0c;您可能会发现您下载了相同的 mp3、pdf 和 epub&#xff08;以及各种其他文件扩展名&#xff09;并将…

VB+sql小型超市管理系统设计与实现

1、项目计划 1.1系统开发目的 (1)大大提高超市的运作效率; (2)通过全面的信息采集和处理,辅助提高超市的决策水平; (3)使用本系统,可以迅速提升超市的管理水平,为降低经营成本, 提高效益,增强超市扩张力, 提供有效的技术保障。 1.2背景说明 21世纪,超市的…

在Linux中安装MySQL

在Linux中安装MySQL 检测当前系统中是否安装MySQL数据库 命令作用rpm -qa查询当前系统中安装的所有软件rpm -qa|grep mysql查询当前系统中安装的名称带mysql的软件rpm -qa | grep mariadb查询当前系统中安装的名称带mariadb的软件 RPM ( Red-Hat Package Manager )RPM软件包管理…

【LeetCode 算法】Merge k Sorted Lists 合并 K 个升序链表

文章目录 Merge k Sorted Lists 合并 K 个升序链表问题描述&#xff1a;分析代码Heap Tag Merge k Sorted Lists 合并 K 个升序链表 问题描述&#xff1a; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并…

案例14 Spring MVC文件上传案例

基于Spring MVC实现文件上传&#xff1a; 使用commons-fileupload实现上传文件到本地目录。 实现上传文件到阿里云OSS和从阿里云OSS下载文件到本地。 1. 创建项目 选择Maven快速构建web项目&#xff0c;项目名称为case14-springmvc03。 ​ 2. 配置Maven依赖 <?xml ver…

Jenkins集成appium自动化测试(Windows篇)

一&#xff0c;引入问题 自动化测试脚本绝大部分用于回归测试&#xff0c;这就需要制定执行策略&#xff0c;如每天、代码更新后、项目上线前定时执行&#xff0c;才能达到最好的效果&#xff0c;这时就需要进行Jenkins集成。 不像web UI自动化测试可以使用无痕浏览器做到无界…

vue3+ts+vite全局配置Element-Plus主题色

概述 我找了很多博客&#xff0c;想全局配置Elmenet-Plus组件主题色&#xff0c;但都没有效果。所以有了这篇博客&#xff0c;希望能对你有所帮助&#xff01;&#xff01;&#xff01; 文章目录 概述一、先看效果二、创建全局颜色文件2.1 /src/styles 下新建 element-plus.sc…

“探索计算机世界:进程的基本概念与功能“

文章目录 前言什么是进程如何描述进程进程的属性1. 进程标识符2. 内存指针3. 文件描述符表4. 进程的状态5. 优先级6. 上下文7. 记账信息 内存分配并行和并发 前言 作为程序员&#xff0c;理解计算机的组成以及计算机是怎样运行的是很重要的&#xff0c;因为只有了解计算机我们…

k8s、docker添加daemon.json添加“exec-opts“: [“native.cgroupdriver=systemd“]后无法启动的问题

考虑k8s下docker下载镜像太慢&#xff0c;修改了daemon.json&#xff0c;按照手册抄&#xff0c;添加 {"exec-opts": ["native.cgroupdriversystemd"],"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"] }结果发现k8s起…

9.3.2.1网络原理(UDP)

1.UDP的基本特点:无连接,不可靠传输,面向数据报,全双工. 2.1~1024的端口号有特定的含义,不建议使用.比如21:ftp,22:ssh,80:http,443:https. 3.CRC校验算法:循环冗余校验和,把UDP报中的每个字节都依次进行累加,把累加的结果,放到两个字节的变量中,溢出也无所谓,因为都加了一遍.…

Java多线程(2)---线程控制和线程安全的详细讲解

目录 前言 一.线程控制方法 1.1启动线程--start() 1.2线程睡眠---sleep()方法 1.3中断线程--interrupt() 方法 1.4等待线程---join() 二.线程安全 2.1数据不安全---数据共享 ⭐不安全的演示和原因 ⭐不安全的处理方法 ⭐synchronized的使用 2.2数据不安全---内存可…

性能测试—Jmeter工具

文章目录 性能测试1. 术语介绍2. 方法3. 应用场景4. 工具&#xff08;Jmeter&#xff09;4.1 介绍4.2 元件和组件4.2.2 元件4.2.1 组件 4.3 作用域4.4 参数化4.5 执行脚本 性能测试 1. 术语介绍 响应时间(Response time)&#xff1a;对请求作出响应所需要的时间。 在互联网上对…

QT学习笔记-QT安装oracle oci驱动

QT学习笔记-QT安装oracle oci驱动 0、背景1、环境以及条件说明2、编译驱动2.1 下载oracle instant client2.2 编译qt oci驱动2.2.1 修改oci.pro2.2.2 MinGW64构建套件编译2.2.3 MSVC2019_64构建套件编译 3、访问数据库运行成功 0、背景 在使用QT开发应用的过程中&#xff0c;往…

5G用户逼近7亿,5G发展迈入下半场!

尽管普遍认为5G投资高峰期正在过去&#xff0c;但是从2023年上半年的情况来看&#xff0c;我国5G建设仍在衔枚疾走。 近日举行2023年上半年工业和信息化发展情况新闻发布会上&#xff0c;工信部人士透露&#xff0c;截至今年6月底&#xff0c;我国5G基站累计达到293.7万个&…

LVS负载均衡部署-NAT

文章目录 LVS-NAT模式配置原理实验环境DR添加网卡准备两台Real Server134&#xff1a;145&#xff1a;测试&#xff1a; 修改RS网关配置DR&#xff1a;开启路由转发下载软件配置查看配置 测试 LVS-NAT模式配置 原理 当客户端访问DR时即访问的外网接口然后由DR将流量在本地转发…

C++:模拟堆

模拟堆 维护一个集合&#xff0c;初始集合为空&#xff0c;支持如下几种操作&#xff1a; 1.“I x”&#xff0c;插入一个数x 2.“PM” &#xff0c;输出当前集合中的最小值 3.“DM”&#xff0c;删除当前集合中的最小值&#xff08;当最小值不唯一时&#xff0c;删除最早插入…