西宁做网站君博领先php网站开发打不开

news/2025/9/28 10:12:49/文章来源:
西宁做网站君博领先,php网站开发打不开,网站建设代码编译的问题及解决方案,云服务器搭建文章目录 一、数据库准备二、导入依赖 与 JDBC工具类三、pojo包处理四、daodao包工具类 五、service六、controllerservlet 基类 反射 七、加密工具类 MD5八、页面文件九、业务代码9.1 注册业务处理9.2 登录业务处理 总结 一、数据库准备 创建数据库#xff1a; SET NAMES … 文章目录 一、数据库准备二、导入依赖 与 JDBC工具类三、pojo包处理四、daodao包工具类 五、service六、controllerservlet 基类 反射 七、加密工具类 MD5八、页面文件九、业务代码9.1 注册业务处理9.2 登录业务处理 总结 一、数据库准备 创建数据库 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- 创建日程表 -- ---------------------------- DROP TABLE IF EXISTS sys_schedule; CREATE TABLE sys_schedule (sid int NOT NULL AUTO_INCREMENT,uid int NULL DEFAULT NULL,title varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,completed int(1) NULL DEFAULT NULL,PRIMARY KEY (sid) USING BTREE ) ENGINE InnoDB AUTO_INCREMENT 1 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ROW_FORMAT Dynamic;-- ---------------------------- -- 插入日程数据 -- ------------------------------ ---------------------------- -- 创建用户表 -- ---------------------------- DROP TABLE IF EXISTS sys_user; CREATE TABLE sys_user (uid int NOT NULL AUTO_INCREMENT,username varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,user_pwd varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,PRIMARY KEY (uid) USING BTREE,UNIQUE INDEX username(username) USING BTREE ) ENGINE InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ROW_FORMAT Dynamic;-- ---------------------------- -- 插入用户数据 -- ---------------------------- INSERT INTO sys_user VALUES (1, zhangsan, e10adc3949ba59abbe56e057f20f883e); INSERT INTO sys_user VALUES (2, lisi, e10adc3949ba59abbe56e057f20f883e);SET FOREIGN_KEY_CHECKS 1;二、导入依赖 与 JDBC工具类 使用lombok处理 getter setter equals hashcode 构造器 导入JDBCUtil连接池工具类并准备jdbc.properties配置文件 package com.doug.wake.util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties;/*** Description: JDBCUtil连接池工具类*/ public class JDBCUtil {private static ThreadLocalConnection threadLocal new ThreadLocal();private static DataSource dataSource;// 初始化连接池static{// 可以帮助我们读取.properties配置文件Properties properties new Properties();InputStream resourceAsStream JDBCUtil.class.getClassLoader().getResourceAsStream(jdbc.properties);try {properties.load(resourceAsStream);} catch (IOException e) {throw new RuntimeException(e);}try {dataSource DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {throw new RuntimeException(e);}}/*1 向外提供连接池的方法*/public static DataSource getDataSource(){return dataSource;}/*2 向外提供连接的方法*/public static Connection getConnection(){Connection connection threadLocal.get();if (null connection) {try {connection dataSource.getConnection();} catch (SQLException e) {throw new RuntimeException(e);}threadLocal.set(connection);}return connection;}/*定义一个归还连接的方法 (解除和ThreadLocal之间的关联关系) */public static void releaseConnection(){Connection connection threadLocal.get();if (null ! connection) {threadLocal.remove();// 把连接设置回自动提交的连接try {connection.setAutoCommit(true);// 自动归还到连接池connection.close();} catch (SQLException e) {throw new RuntimeException(e);}}} }driverClassNamecom.mysql.cj.jdbc.Driver urljdbc:mysql://localhost:3306/schedule_system usernameroot passwordroot initialSize5 maxActive10 maxWait1000三、pojo包处理 实体类 使用lombok处理getter setter equals hashcode 构造器 implements Serializable : 习惯上要实现序列化接口与缓存、分布式项目数据传递有关 将对象序列化 防止报错 AllArgsConstructor // 全参构造 NoArgsConstructor // 添加无参构造 Data //getter setter equals hashcode toString public class SysUser implements Serializable {private int uid;private String username;private String userPwd; }AllArgsConstructor NoArgsConstructor Data public class SysSchedule {private int sid;private int uid;private String title;private int completed; }四、dao Data access Object 数据访问对象 该类中用于定义针对数据库表格的CRUD的方法 DAO层一般需要定义接口和实现类 dao包工具类 package com.doug.wake.dao;import com.doug.wake.util.JDBCUtil;import java.lang.reflect.Field; import java.sql.*; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List;/*** Description: Dao工具类*/ public class BaseDao {// 公共的查询方法 返回的是单个对象public T T baseQueryObject(ClassT clazz, String sql, Object ... args) {T t null;Connection connection JDBCUtil.getConnection();PreparedStatement preparedStatement null;ResultSet resultSet null;int rows 0;try {// 准备语句对象preparedStatement connection.prepareStatement(sql);// 设置语句上的参数for (int i 0; i args.length; i) {preparedStatement.setObject(i 1, args[i]);}// 执行 查询resultSet preparedStatement.executeQuery();if (resultSet.next()) {t (T) resultSet.getObject(1);}} catch (Exception e) {e.printStackTrace();} finally {if (null ! resultSet) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if (null ! preparedStatement) {try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}JDBCUtil.releaseConnection();}return t;}// 公共的查询方法 返回的是对象的集合public T ListT baseQuery(Class clazz, String sql, Object ... args){ListT list new ArrayList();Connection connection JDBCUtil.getConnection();PreparedStatement preparedStatementnull;ResultSet resultSet null;int rows 0;try {// 准备语句对象preparedStatement connection.prepareStatement(sql);// 设置语句上的参数for (int i 0; i args.length; i) {preparedStatement.setObject(i1,args[i]);}// 执行 查询resultSet preparedStatement.executeQuery();ResultSetMetaData metaData resultSet.getMetaData();int columnCount metaData.getColumnCount();// 将结果集通过反射封装成实体类对象while (resultSet.next()) {// 使用反射实例化对象Object obj clazz.getDeclaredConstructor().newInstance();for (int i 1; i columnCount; i) {String columnName metaData.getColumnLabel(i);Object value resultSet.getObject(columnName);// 处理datetime类型字段和java.util.Data转换问题if(value.getClass().equals(LocalDateTime.class)){value Timestamp.valueOf((LocalDateTime) value);}Field field clazz.getDeclaredField(columnName);field.setAccessible(true);field.set(obj,value);}list.add((T)obj);}} catch (Exception e) {e.printStackTrace();} finally {if (null !resultSet) {try {resultSet.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (null ! preparedStatement) {try {preparedStatement.close();} catch (SQLException e) {throw new RuntimeException(e);}}JDBCUtil.releaseConnection();}return list;}// 通用的增删改方法public int baseUpdate(String sql,Object ... args) {// 获取连接Connection connection JDBCUtil.getConnection();PreparedStatement preparedStatementnull;int rows 0;try {// 准备语句对象preparedStatement connection.prepareStatement(sql);// 设置语句上的参数for (int i 0; i args.length; i) {preparedStatement.setObject(i1,args[i]);}// 执行 增删改 executeUpdaterows preparedStatement.executeUpdate();// 释放资源(可选)} catch (SQLException e) {e.printStackTrace();} finally {if (null ! preparedStatement) {try {preparedStatement.close();} catch (SQLException e) {throw new RuntimeException(e);}}JDBCUtil.releaseConnection();}// 返回的是影响数据库记录数return rows;} }基本按照这样写 Dao 接口 /*** Description: 日程表CRUD*/ public interface SysScheduleDao {/*** 用于向数据中增加一条日程记录* param schedule 日程数据以SysSchedule实体类对象形式入参* return 返回影响数据库记录的行数行数为0增加失败行数大于0增加成功*/int addSchedule(SysSchedule schedule);/*** 查找所有的日程信息* return 返回全部日程数据*/ListSysSchedule findSchedule(); }public interface SysUserDao {/*** 向数据库表sys_user增加一条用户记录的方法* param sysUser 要增加记录的username和usePwd 以SysUser对象的形式接收* return 增加 成功返回 1 失败0*/int addUser(SysUser sysUser); }Dao实现类 public class SysScheduleDaoImpl extends BaseDao implements SysScheduleDao {Overridepublic int addSchedule(SysSchedule schedule) {String sql insert into sys_schedule values(DEFAULT,?,?,?);int rows baseUpdate(sql, schedule.getUid(),schedule.getTitle(), schedule.getCompleted());return rows;}Overridepublic ListSysSchedule findSchedule() {String sql select sid,uid,title,completed from sys_schedule;ListSysSchedule scheduleList baseQuery(SysSchedule.class, sql);return scheduleList;} }public class SysUserDaoImpl extends BaseDao implements SysUserDao {Overridepublic int addUser(SysUser sysUser) {String sql insert into sys_user values(DEFAULT,?,?);;int rows baseUpdate(sql, sysUser.getUsername(), sysUser.getUserPwd());return rows;} }五、service 这样写 写注释 /*** 该接口定义了以 sys_user 表 为核心的业务处理功能*/ public interface SysUserService {/*** 用户注册方法* param sysUser 要注册的用户名和明文密码 以SysUser对象的形式接收* return 注册 成功返回1 失败返回0*/int regist(SysUser sysUser); } public class SysUserServiceImpl implements SysUserService {private SysUserDao userDao new SysUserDaoImpl();Overridepublic int regist(SysUser sysUser) {//密码加密sysUser.setUserPwd(MD5Util.encrypt(sysUser.getUserPwd()));return userDao.addUser(sysUser);} }六、controller 前端 action 格式 servlet 的名字 方法名 user/add user/remove … 接收前端传来的URI【 /user/add 】截取后面的add 再定义同名方法这样就自动invoke执行相同名字的方法不用自己手动去写ifelse( 加一个方法就得写一个 servlet 基类 反射 /*** Description: Controller servlet基类 使用反射调用方法*/ public class BaseController extends HttpServlet {Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//拿到方法的URI 格式项目上下文Context 加上 后缀名 //举例项目Context设置为空时 /schedule/addString requestURI req.getRequestURI();//拿到最后的 add 方法名String[] split requestURI.split(/);String methodName split[split.length - 1];//使用反射 获取所有的方法Class aClass this.getClass();try {Method declaredMethod aClass.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);//取消访问检查 防止方法为私有导致不能执行declaredMethod.setAccessible(true);//执行方法 传入参数declaredMethod.invoke(this, req, resp);} catch (Exception e) {e.printStackTrace();}} }这样只要 继承基类 定义 方法即可 WebServlet(/schedule/*) public class SysScheduleController extends BaseController{protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(add);} }WebServlet(/user/*) public class SysUserController extends BaseController{private SysUserService userService new SysUserServiceImpl();/*** 接收用户注册的业务请求 处理方法* param req* param resp* throws ServletException* throws IOException*/protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username req.getParameter(username);String userPwd req.getParameter(userPwd);SysUser sysUser new SysUser(null, username, userPwd);int rows userService.regist(sysUser);if (rows 0){resp.sendRedirect(/registSuccess.html);}else{resp.sendRedirect(/registFail.html);}} }七、加密工具类 MD5 public class MD5Util {public static String encrypt(String strSrc) {try {char hexChars[] { 0, 1, 2, 3, 4, 5, 6, 7, 8,9, a, b, c, d, e, f };byte[] bytes strSrc.getBytes();MessageDigest md MessageDigest.getInstance(MD5);md.update(bytes);bytes md.digest();int j bytes.length;char[] chars new char[j * 2];int k 0;for (int i 0; i bytes.length; i) {byte b bytes[i];chars[k] hexChars[b 4 0xf];chars[k] hexChars[b 0xf];}return new String(chars);} catch (NoSuchAlgorithmException e) {e.printStackTrace();throw new RuntimeException(MD5加密出错!!!);}} }八、页面文件 注册页面 登录页面 九、业务代码 9.1 注册业务处理 controller servlet WebServlet(/user/*) public class SysUserController extends BaseController{private SysUserService userService new SysUserServiceImpl();/*** 接收用户注册的业务请求 处理方法* param req* param resp* throws ServletException* throws IOException*/protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username req.getParameter(username);String userPwd req.getParameter(userPwd);SysUser sysUser new SysUser(null, username, userPwd);int rows userService.regist(sysUser);if (rows 0){resp.sendRedirect(/registSuccess.html);}else{resp.sendRedirect(/registFail.html);}} }service 业务代码 /*** 该接口定义了以 sys_user 表 为核心的业务处理功能*/ public interface SysUserService {/*** 用户注册方法* param sysUser 要注册的用户名和明文密码 以SysUser对象的形式接收* return 注册 成功返回1 失败返回0*/int regist(SysUser sysUser); } public class SysUserServiceImpl implements SysUserService {private SysUserDao userDao new SysUserDaoImpl();Overridepublic int regist(SysUser sysUser) {//密码加密sysUser.setUserPwd(MD5Util.encrypt(sysUser.getUserPwd()));return userDao.addUser(sysUser);} }dao 数据库 /*** Description: 用户CRUD*/ public interface SysUserDao {/*** 向数据库表sys_user增加一条用户记录的方法* param sysUser 要增加记录的username和usePwd 以SysUser对象的形式接收* return 增加 成功返回 1 失败0*/int addUser(SysUser sysUser); }public class SysUserDaoImpl extends BaseDao implements SysUserDao {Overridepublic int addUser(SysUser sysUser) {String sql insert into sys_user values(DEFAULT,?,?);;int rows baseUpdate(sql, sysUser.getUsername(), sysUser.getUserPwd());return rows;} }9.2 登录业务处理 controller : /*** 接收用户登录请求完成登录业务接口* param req* param resp* throws ServletException* throws IOException*/protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username req.getParameter(username);String userPwd req.getParameter(userPwd);//通过用户名查找对象SysUser loginUser userService.findUserByUsername(username);//用户为Null不存在if(null loginUser){resp.sendRedirect(/loginUsernameError.html);//密码不匹配} else if (!MD5Util.encrypt(userPwd).equals(loginUser.getUserPwd())) {resp.sendRedirect(/loginUserPwdError.html);}else{resp.sendRedirect(/showSchedule.html);}}service /*** 根据用户名查找完整的user对象* param username 要查找的用户名* return 查到返回SysUser对象找不到返回Null*/SysUser findUserByUsername(String username);Overridepublic SysUser findUserByUsername(String username) {return userDao.findUserByUsername(username);}dao /*** 根据用户名查找完整的user对象* param username 要查找的用户名* return 查到返回SysUser对象找不到返回Null*/SysUser findUserByUsername(String username);Overridepublic SysUser findUserByUsername(String username) {String sql select uid,username,user_pwd as userPwd from sys_user where username?;;ListSysUser sysUserList baseQuery(SysUser.class, sql, username);return sysUserList ! null sysUserList.size() 0 ? sysUserList.get(0) : null;}总结 开启注解处理 测试类 测试日程表的CRUD 调用DAO层方法 public class TestSysScheduleDao {private static SysScheduleDao sysScheduleDao;BeforeClasspublic static void initSysScheduleDaoImpl(){sysScheduleDao new SysScheduleDaoImpl();}Testpublic void testAddSchedule(){int rows sysScheduleDao.addSchedule(new SysSchedule(null, 2, 学习后端, 0));System.out.println(rows);}Testpublic void testFindSchedule(){ListSysSchedule scheduleList sysScheduleDao.findSchedule();scheduleList.forEach(System.out::println);} }测试BaseDao工具类 private static BaseDao baseDao;BeforeClasspublic static void initBaseDao(){baseDao new BaseDao();}Testpublic void testBaseUpdate(){String sql insert into sys_schedule values(DEFAULT,?,?,?);int rows baseDao.baseUpdate(sql, 1, 学习JS, 1);System.out.println(rows);}Testpublic void testBaseQuery(){String sql select sid,uid,title,completed from sys_schedule;ListSysSchedule listSchedules baseDao.baseQuery(SysSchedule.class, sql);listSchedules.forEach(System.out::println);}Testpublic void testBaseSingleQuery(){String sql select count(1) from sys_schedule;Long aLong baseDao.baseQueryObject(Long.class, sql);System.out.println(aLong);}

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

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

相关文章

WordPress建站收费二级域名网址查询

什么是RAG,RAG的意思就是,如果一套生成式AIGC大模型,你昨天训练了以后,那么今天的知识,还没有给他进行训练,那么回答的时候,他就会遗漏今天的知识,那么我们就可以通过检索的手段,把今天的知识,检索出来,然后补充道prompt中,给这个大模型.让他参考,这样就包含了今天的知识相当于…

网站的扁平化设计理念win10做网站

【Linux】服务器安装SSH 【创作不易,求点赞关注收藏】😀 在Ubuntu服务器上安装并配置SSH非常简单。你可以按照以下步骤进行操作: 1、更新软件包列表 sudo apt-get update2、安装OpenSSH服务器: sudo apt-get install openssh-server3、启…

wordpress淘宝客网站运营中国专业做鞋子的网站

目录 1.感知机计算预测值:2.感知机训练:3.损失函数:4.多层感知机:5.单隐藏层的多层感知机代码实现: 1.感知机计算预测值: 训练结果只有1、-1,故正负相同训练正确,正负相反即训练错误…

无锡做网站seo的app软件开发合同范本

一小部分矩阵论的整理复习,这个由于公式输入的太麻烦了,所以就弄了一点。后面直接看着书复习的。 矩阵论复习线性空间基与维数基变换公式、过渡矩阵、坐标变换公式线性子空间齐次方程组的解空间特征子空间生成子空间交空间和空间维数定理直和线性映射线性…

网站开发开发需求wordpress媒体库文件夹

本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下项目名称模拟ATM机项目描述简单实现ATM机功能代码实现测试类public class Test {//模拟多功能ATM机public static void main(String[] args) {ATM atm new ATM();atm.opearte(…

专业做数据的网站有哪些crm系统分为哪三类

Java中读写资源文件最重要的类是Properties1) 资源文件要求如下:1、properties文件是一个文本文件2、properties文件的语法有两种,一种是注释,一种属性配置。注 释:前面加上#号属性配置:以“键值”的方式书写一个属性的配置信息…

购物网站首页分成几个模块宁波人流医院

一.预备知识 1.基本全局命令 set key value 将key的值设置成value get key 得到key的值 keys [pattern] 查看匹配pattern的所有key 比如h?llo匹配hallo,hbllo,hcllo……只要用一个符号将?代替即可 比如h*llo匹配hllo,heeeello…

网站开发费用多少自己做网站能宣传自己的产品吗

MT8781安卓核心板以其强大的性能和高效的能耐备受瞩目。其八核CPU架构包括(2x Cortex-A76 2.2GHz 6x Cortex-A55 2.0GHz),以及高性能的Arm Mali G57级GPU。同时,配备高达2,133MHz的LPDDR4X内存和快速的UFS 2.2级存储,大大加速了数据访问速…

楼盘网站建设滨州住房和城乡建设部网站

为方便查询,特整理MySQL常用命令。 约定:$后为Shell环境命令,>后为MySQL命令。 1 常用命令 第一步,连接数据库。 $ mysql -u root -p # 进入MySQL bin目录后执行,回车后输入密码连接。# 常用参数&…

全网有哪些网站可以做淘客域名及对应网站

我正在制作一个Java程序来计算Simpson的积分规则.这是我的代码.注意count 4,9,10,11的输出值中的第二列数字.它们不是我需要的数字,它们不遵循这种模式.我需要这些数字是准确的.发生了什么,我该如何解决?public static void main(String[] args){double totalS 0.…

网站互动推广苏州网站建设费用

特征工程:是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。从本质上来讲,特征工程是一个表示和展现数据的过程。在实际工作中,特征工程旨在去除原始数据中的杂质和冗余,设计更高…

学做网站要会哪些搜索引擎推广预算

如果完整string匹配, matches()将只返回true。 find()会尝试find匹配正则expression式的子string中的下一个匹配项。 注意强调“下一个”。 这意味着,多次调用find()的结果可能不一样。 另外,通过使用find()你可以调用start()来返回子string匹…

MCU的闪存(FLASH)按机制结构划分区域

MCU的闪存(FLASH)按机制结构划分区域pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

T2

我个蒟蒻赛时连 T1 都没切,但是这个 T2 真的很水啊。 $$\texttt{Solution}$$ 难度不高,爆想了 10 分钟有了一个贪心的思路,来看这张图理解一下:这就是一个比较简单的例子,我们考虑从它推演到一般情况。 因为需要从…

负载均衡式在线OJ工程复盘

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

题解:CF1930I Counting Is Fun

跟标题一样有趣的计数题。 题意:很简单了,不再赘述。 做法: 首先看到这个至少一半,还要是 01 串,很容易想到先将 \(0\) 赋值为 \(-1\),\(1\) 赋值为 \(1\),那么 \(0, 1\) 至少一半就等于要求区间和 \(\le 0,\ge…

AI百炼大模型接入钉钉,实现在群中免@交互式新闻推送

AI百炼大模型接入钉钉自动化推送新闻进入百炼大模型创建智能体,或者工作流(我这里采用的智能体更为便捷)创建百炼大模型设置大模型选项,打开联网搜索----点击插件---插入对应的插件,如新闻插件设置大模型提示词创…

网站换公司吗wordpress 主题无法更换

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 上面一篇文章,我们完成了直线的拟合操作。在实际场景中,拟合之后更多地是需要进行长度的测量。既然是测量,那么…

网站开发排名如何用自己的电脑建网站

来源:网络大数据三位研究者分别是 MIT 大脑与行为科学系主任 James DiCarlo、MIT 博士后 Pouya Bashivan 和 Kohitij Kar。相关论文发表在 5 月 2 日 Science 的网络版上。论文链接: http s://www.biorxiv.org/content/10.1101/461525v1研究人员表示&…

K8S-Service 学习

什么是 Kubernetes Service? Service 是 Kubernetes 中用于为一组 Pod(通常是 Deployment/ReplicaSet 管理的)提供稳定访问入口的抽象对象。Pod 的 IP 是不固定的,Pod 重建后 IP 会变。 Service 提供一个“虚拟 IP…