javaWeb个人日记(博客)管理系统

一、简介

在快节奏的生活中,记录生活点滴、感悟和思考是一种重要的方式。基于此,我设计了一个基于JavaWeb的个人日记本系统,旨在帮助用户轻松记录并管理自己的日记。该系统包括登录、首页、日记列表、写日记、日记分类管理和个人中心等功能,能够满足用户对个人日记记录的基本需求。

二、功能介绍

登录

用户可以通过用户名和密码登录系统,以便访问个人的日记信息。

首页

首页展示了用户的日记列表,可以按照日记的分类和日期进行筛选,方便用户快速查找所需的日记。

日记列表

用户可以在日记列表页面查看自己的所有日记,每篇日记包括标题、日期、内容等信息,用户可以点击查看详细内容。

写日记

用户可以在系统中撰写新的日记,包括选择日记的分类、填写标题和内容等信息。

日记分类管理

用户可以管理自己的日记分类,包括添加新的分类、编辑分类信息、删除分类等操作,以便更好地组织和管理日记。

个人中心

个人中心提供了用户的个人信息管理功能,包括修改密码、查看登录记录等。

三、SQL分析

t_diary表分析:
  1. diaryId:日记ID,主键,自增长,int类型。
  2. title:日记标题,varchar(60)类型,存储日记的标题信息。
  3. content:日记内容,text类型,存储日记的详细内容。
  4. typeId:日记类型ID,int类型,外键关联t_diarytype表的diaryTypeId字段。
  5. releaseDate:发布日期,datetime类型,记录日记发布的日期时间信息。
t_diarytype表分析:
  1. diaryTypeId:日记类型ID,主键,自增长,int类型。
  2. typeName:日记类型名称,varchar(30)类型,记录日记的类型信息,如工作类、生活类等。
t_user表分析:
  1. userId:用户ID,主键,自增长,int类型。
  2. userName:用户名,varchar(20)类型,存储用户的登录名。
  3. password:密码,varchar(50)类型,存储用户的登录密码,经过加密处理。
  4. nickName:昵称,varchar(20)类型,存储用户的昵称信息。
  5. imageName:头像文件名,varchar(40)类型,存储用户上传的头像文件名。
  6. mood:心情签名,varchar(200)类型,存储用户的心情签名信息。

四、程序截图

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

五、关键代码

UserServlet.java

package com.wishwzp.web;import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.util.Iterator;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.FileItemFactory;
import org.apache.tomcat.util.http.fileupload.FileUploadException;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import org.apache.tomcat.util.http.fileupload.servlet.ServletRequestContext;import com.wishwzp.dao.UserDao;
import com.wishwzp.model.User;
import com.wishwzp.util.DateUtil;
import com.wishwzp.util.DbUtil;
import com.wishwzp.util.PropertiesUtil;/*** Servlet implementation class UserServlet*/
public class UserServlet extends HttpServlet {private static final long serialVersionUID = 1L;DbUtil dbUtil=new DbUtil();UserDao userDao=new UserDao();/*** @see HttpServlet#HttpServlet()*/public UserServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubthis.doPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubrequest.setCharacterEncoding("utf-8");String action=request.getParameter("action");if("preSave".equals(action)){userPreSave(request,response);}else if("save".equals(action)){userSave(request,response);}}private void userPreSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setAttribute("mainPage", "user/userSave.jsp");request.getRequestDispatcher("mainTemp.jsp").forward(request, response);		}private void userSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/** * 首先判断form的enctype是不是multipart/form-data * 同时也判断了form的提交方式是不是post * 方法:isMultipartContent(request) */  if(ServletFileUpload.isMultipartContent(request)){  System.out.println("yes");}// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUploadFileItemFactory factory=new DiskFileItemFactory();//创建ServletFileUpload对象ServletFileUpload upload=new ServletFileUpload(factory);List<FileItem> items=null;try {items=upload.parseRequest(new ServletRequestContext(request));} catch (FileUploadException e) {// TODO Auto-generated catch blocke.printStackTrace();}//取得items的迭代器  Iterator<FileItem> itr=items==null?null:items.iterator();HttpSession session=request.getSession();User user=(User)session.getAttribute("currentUser");boolean imageChange=false;//迭代itemswhile(itr.hasNext()){FileItem item=(FileItem)itr.next();//如果传过来的是普通的表单域  if(item.isFormField()){String fieldName=item.getFieldName();if("nickName".equals(fieldName)){user.setNickName(item.getString("utf-8"));}if("mood".equals(fieldName)){user.setMood(item.getString("utf-8"));}}else if(!"".equals(item.getName())){try{imageChange=true;String imageName=DateUtil.getCurrentDateStr();user.setImageName(imageName+"."+item.getName().split("\\.")[1]);String filePath=PropertiesUtil.getValue("imagePath")+imageName+"."+item.getName().split("\\.")[1];item.write(new File(filePath));}catch(Exception e){e.printStackTrace();}}}if(!imageChange){user.setImageName(user.getImageName().replaceFirst(PropertiesUtil.getValue("imageFile"), ""));}Connection con=null;try {con=dbUtil.getCon();int saveNums=userDao.userUpdate(con, user);if(saveNums>0){user.setImageName(PropertiesUtil.getValue("imageFile")+user.getImageName());session.setAttribute("currentUser", user);request.getRequestDispatcher("main?all=true").forward(request, response);}else{request.setAttribute("currentUser", user);request.setAttribute("error", "保存失败!");request.setAttribute("mainPage", "user/userSave.jsp");request.getRequestDispatcher("mainTemp.jsp").forward(request, response);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {dbUtil.closeCon(con);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

MainServlet.java

package com.wishwzp.web;import java.io.IOException;
import java.sql.Connection;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.wishwzp.dao.DiaryDao;
import com.wishwzp.dao.DiaryTypeDao;
import com.wishwzp.model.Diary;
import com.wishwzp.model.DiaryType;
import com.wishwzp.model.PageBean;
import com.wishwzp.util.DbUtil;
import com.wishwzp.util.PaginationUtils;
import com.wishwzp.util.PropertiesUtil;
import com.wishwzp.util.StringUtil;/*** Servlet implementation class MainServlet*/
public class MainServlet extends HttpServlet {private static final long serialVersionUID = 1L;DbUtil dbUtil=new DbUtil();DiaryDao diaryDao=new DiaryDao();DiaryTypeDao diaryTypeDao = new DiaryTypeDao();/*** @see HttpServlet#HttpServlet()*/public MainServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubthis.doPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubrequest.setCharacterEncoding("utf-8");HttpSession session = request.getSession();String s_typeId=request.getParameter("s_typeId");String s_releaseDateStr=request.getParameter("s_releaseDateStr");String s_title=request.getParameter("s_title");String all=request.getParameter("all");String page=request.getParameter("page");Diary diary=new Diary();if("true".equals(all)){if(StringUtil.isNotEmpty(s_title)){diary.setTitle(s_title);}session.removeAttribute("s_releaseDateStr");session.removeAttribute("s_typeId");session.setAttribute("s_title", s_title);}else{if(StringUtil.isNotEmpty(s_typeId)){diary.setTypeId(Integer.parseInt(s_typeId));session.setAttribute("s_typeId", s_typeId);session.removeAttribute("s_releaseDateStr");session.removeAttribute("s_title");}if(StringUtil.isNotEmpty(s_releaseDateStr)){//s_releaseDateStr=new String(s_releaseDateStr.getBytes("ISO-8859-1"),"UTF-8");diary.setReleaseDateStr(s_releaseDateStr);session.setAttribute("s_releaseDateStr", s_releaseDateStr);session.removeAttribute("s_typeId");session.removeAttribute("s_title");}if(StringUtil.isEmpty(s_typeId)){Object o=session.getAttribute("s_typeId");if(o!=null){diary.setTypeId(Integer.parseInt((String)o));}}if(StringUtil.isEmpty(s_releaseDateStr)){Object o=session.getAttribute("s_releaseDateStr");if(o!=null){diary.setReleaseDateStr((String)o);}}if(StringUtil.isEmpty(s_title)){Object o=session.getAttribute("s_title");if(o!=null){diary.setTitle((String)o);}}}if(StringUtil.isEmpty(page)){page="1";}Connection con=null;//初始化为1,4PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(PropertiesUtil.getValue("pageSize")));try {con=dbUtil.getCon();List<Diary> diaryList=diaryDao.diaryList(con,pageBean,diary);int total=diaryDao.diaryCount(con,diary);String pageCode=PaginationUtils.getPagation(total, Integer.parseInt(page), Integer.parseInt(PropertiesUtil.getValue("pageSize")));request.setAttribute("pageCode", pageCode);request.setAttribute("diaryList", diaryList);//按日志类别显示List<DiaryType> diaryTypeCountList = diaryTypeDao.diaryTypeCountList(con);//按日志日期显示List<Diary> diaryCountList = diaryDao.diaryCountList(con);session.setAttribute("diaryTypeCountList", diaryTypeCountList);session.setAttribute("diaryCountList", diaryCountList);			request.setAttribute("mainPage", "diary/diaryList.jsp");request.getRequestDispatcher("mainTemp.jsp").forward(request, response);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

LoginServlet.java

package com.wishwzp.web;import java.io.IOException;
import java.sql.Connection;import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.wishwzp.dao.UserDao;
import com.wishwzp.model.User;
import com.wishwzp.util.DbUtil;/*** Servlet implementation class LoginServlet*/
public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;DbUtil dbutil = new DbUtil();UserDao userDao = new UserDao();/*** @see HttpServlet#HttpServlet()*/public LoginServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubthis.doPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubrequest.setCharacterEncoding("utf-8");String username = request.getParameter("userName");String password = request.getParameter("password");String remember = request.getParameter("remember");HttpSession session = request.getSession();Connection con =null;try {con=dbutil.getCon();User user=new User(username,password);User currentUser=userDao.login(con, user);if (currentUser == null) {request.setAttribute("user", user);request.setAttribute("error", "用户名或密码错误!");request.getRequestDispatcher("login.jsp").forward(request, response);}else {if("remember-me".equals(remember)){rememberMe(username,password,response);}session.setAttribute("currentUser", currentUser);request.getRequestDispatcher("main").forward(request, response);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 记住密码* @param userName* @param password* @param response*/private void rememberMe(String username,String password,HttpServletResponse response){Cookie user=new Cookie("user",username+"-"+password);user.setMaxAge(1*60*60*24*7);response.addCookie(user);}
}

六、联系与交流

q:969060742 完整程序、sql、项目辅导视频

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

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

相关文章

动态多态的注意事项

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 多态的基本概念 多态是C面向对象三大特性之一&#xff08;多态、继承、封装&#xff09; 多态分为两类&#xff1a; 静态多态&#xff1a;函数重载和运算符重载属于静态多态&#x…

深入了解 Linux 中的 MTD 设备:/dev/mtd* 与 /dev/mtdblock*

目录 前言一、什么是MTD子系统&#xff1f;二、 /dev/mtd* 设备文件用途注意事项 三、/dev/mtdblock* 设备文件用途注意事项 三、这两种设备文件的关系四、关norflash的一些小知识 前言 在嵌入式Linux系统的世界里&#xff0c;非易失性存储技术扮演着至关重要的角色。MTD&#…

Spring Aop 源码解析(下)

ProxyFactory选择cglib或jdk动态代理原理 ProxyFactory在生成代理对象之前需要决定到底是使用JDK动态代理还是CGLIB技术: config就是ProxyFactory对象,把自己传进来了,因为ProxyFactory继承了很多类,其中一个父类就是ProxyConfig // config就是ProxyFactory对象// 是不是…

第十二届蓝桥杯物联网试题(省赛)

思路&#xff1a; 这个考了一个RTC的配置&#xff0c;RTC我只配过一次&#xff0c;所以有些生疏&#xff0c;还是不能大意&#xff0c;一些偏僻的考点还是要多练&#xff0c;在获取RTC时间的时候也遇到一些bug,这个后续会用一篇博客将最近遇到的BUG都总结一下 主要的难点还是…

基于GA优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 5…

Android15功能和 API 概览

Android 15 面向开发者引入了一些出色的新功能和 API。以下部分总结了这些功能&#xff0c;以帮助您开始使用相关 API。 如需查看新增、修改和移除的 API 的详细列表&#xff0c;请参阅 API 差异报告。如需详细了解新的 API&#xff0c;请访问 Android API 参考文档&#xff0…

C++零基础入门学习视频课程

教程介绍 本专题主要讲解C基础入门学习&#xff0c;所以不会涉及很深入的语法和机制。但会让你整体多面的了解和学习C的核心内容&#xff0c;快速学习使用C&#xff0c;我们的目标是先宏观整体把握&#xff0c;在深入各个击破&#xff01; 学习地址 链接&#xff1a;https:/…

多线程合并练习题,线程安全(售票任务引入)--学习JavaEE的day30

day30 练习&#xff08;day29&#xff09; 注意代码注释&#xff0c;里面涉及代码实现遇到问题及解决方案&#xff0c;由于理解方便没有单独出来 1.计算任务 1.计算任务&#xff0c;一个包含了2万个整数的数组&#xff0c;分拆了多个线程来进行并行计算&#xff0c;最后汇总出…

MySQL三种开窗函数详细用法,图文详解

开窗函数的详细用法 第一章、开窗函数的语法1.1&#xff09;从聚合开窗函数讲起1.2&#xff09;开窗函数之取值1.3&#xff09;排名开窗函数 第一章、开窗函数的语法 开窗函数的语法为&#xff1a;over(partition by 列名1 order by 列名2 )&#xff0c;括号中的两个关键词par…

加速新能源汽车产品迭代:融合前沿科技的重要性

新能源汽车新质生产力提升咨询方案 一、新能源汽车企业行业目前发展现状及特点&#xff1a; 1、快速增长 2、技术迭代快 3、竞争加剧 二、新能源汽车企业发展新质生产力面临的痛点&#xff1a; 1、技术创新压力巨大 2、市场竞争激烈 3、供应链稳定性欠缺 4、成本控制压…

微信小程序实战:无痛集成腾讯地图服务

在移动互联网时代,地图服务无疑是应用程序中最常见也最实用的功能之一。无论是导航定位、附近搜索还是路线规划,地图服务都能为用户提供极大的便利。在微信小程序开发中,我们可以轻松集成腾讯地图服务,为小程序赋能增值体验。本文将详细介绍如何在微信小程序中集成使用腾讯地图…

jmeter中参数加密

加密接口常用的方式有&#xff1a; MD5&#xff0c;SHA&#xff0c;HmacSHA RSA AES&#xff0c;DES&#xff0c;Base64 压测中有些参数需要进行加密&#xff0c;加密方式已接口文档为主。 MD5加密 比如MD5加密的接口文档&#xff1a; 请求URL&#xff1a;http://101.34.221…

面试算法-105-相交链表

题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回…

各大pdf转word软件都用的哪家的ocr引擎?

国内一般的PDF软件一般都调用某国际PDF原厂的OCR接口&#xff0c;但这家公司是主要做PDF&#xff0c;在OCR方面并不专注&#xff0c;一些不是很复杂的场景还能应付得过来&#xff0c;复杂一点的效果就强差人意了&#xff0c;推荐用金鸣表格文字识别系统&#xff0c;它主要有以下…

抖音视频关键词无水印下载软件|手机网页视频批量提取工具

全新视频关键词无水印下载软件&#xff0c;助您快速获取所需视频&#xff01; 随着时代的发展&#xff0c;视频内容已成为人们获取信息和娱乐的重要途径。为了方便用户获取所需视频&#xff0c;推出了一款功能强大的视频关键词无水印下载软件。该软件主要功能包括关键词批量提取…

yolov8直接调用zed相机实现三维测距(python)

yolov8直接调用zed相机实现三维测距&#xff08;python&#xff09; 1. 相关配置2. 相关代码3. 实验结果 相关链接 此项目直接调用zed相机实现三维测距&#xff0c;无需标定&#xff0c;相关内容如下&#xff1a; 1.yolov5直接调用zed相机实现三维测距&#xff08;python&#…

ISAC代码仿真学习笔记

文章目录 A. MIMO Communication ModelB. MIMO Radar Model III. Joint Waveform and Phase Shift Matrix Design for Given Radar BeampatternA. Problem FormulationB. Proposed Algorithm V. S IMULATION RESULTS A. MIMO Communication Model 用户处的接收信号矩阵由 Y …

Spring Boot 实现定时任务动态管理

前言 本文主要介绍了SpringBoot架构下动态定时任务的使用&#xff0c;定时任务表达式配置在数据库中&#xff0c;通过反射执行到目标方法。 Quartz Quartz 是一个开源的作业调度框架,支持分布式定时任务&#xff0c;Quartz定时任务据我了解可分为Trigger&#xff08;触发器&…

小迪安全47WEB 攻防-通用漏洞Java 反序列化EXP 生成数据提取组件安全

#知识点&#xff1a; 1、Java 反序列化演示-原生 API 接口 2、Java 反序列化漏洞利用-Ysoserial 使用 3、Java 反序列化漏洞发现利用点-函数&数据 4、Java 反序列化考点-真实&CTF 赛题-审计分析 #内容点&#xff1a; 1、明白-Java 反序列化原理 2、判断-J…

javaWeb在线考试系统

一、简介 在线考试系统是现代教育中一项重要的辅助教学工具&#xff0c;它为学生提供了便捷的考试方式&#xff0c;同时也为教师提供了高效的考试管理方式。我设计了一个基于JavaWeb的在线考试系统&#xff0c;该系统包括三个角色&#xff1a;管理员、老师和学生。管理员拥有菜…