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 stub
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.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");
		}
		// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
		FileItemFactory 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 block
			e.printStackTrace();
		}
		//取得items的迭代器  
		Iterator<FileItem> itr=items==null?null:items.iterator();
		
		HttpSession session=request.getSession();
		
		User user=(User)session.getAttribute("currentUser");
		boolean imageChange=false;
		//迭代items
		while(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 block
			e.printStackTrace();
		}finally{
			try {
				dbUtil.closeCon(con);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.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 stub
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.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,4
		PageBean 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 block
			e.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 stub
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.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 block
			e.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、项目辅导视频

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql - 缓存

缓存 InnoDB存储引擎在处理客户端的请求时&#xff0c;当需要访问某个页的数据时&#xff0c;就会把完整的页的数据全部加载到内存中&#xff0c;也就是说即使我们只需要访问一个页的一条记录&#xff0c;那也需要先把整个页的数据加载到内存中。将整个页加载到内存中后就可以…

命令模式(请求与具体实现解耦)

目录 前言 UML plantuml 类图 实战代码 模板 Command Invoker Receiver Client 前言 命令模式解耦了命令请求者&#xff08;Invoker&#xff09;和命令执行者&#xff08;receiver&#xff09;&#xff0c;使得 Invoker 不再直接引用 receiver&#xff0c;而是依赖于…

Java基础--128陷阱

问题引入 Integer a 123; Integer b 123; System.out.println(ab); 结果为true。 但是如果代码如下 Integer a 1230;Integer b 1230;System.out.println(ab); 这个的结果就是false。 问题解决 当Integer a 123时&#xff0c;其实他底层自动转换成了Integer a Inte…

Learn OpenGL 29 延迟着色法

延迟着色法 我们现在一直使用的光照方式叫做正向渲染(Forward Rendering)或者正向着色法(Forward Shading)&#xff0c;它是我们渲染物体的一种非常直接的方式&#xff0c;在场景中我们根据所有光源照亮一个物体&#xff0c;之后再渲染下一个物体&#xff0c;以此类推。它非常…

网络安全-文件包含

一、php://input 我们先来看一个简单的代码 <meta charset"utf8"> <?php error_reporting(0); $file $_GET["file"]; if(stristr($file,"php://filter") || stristr($file,"zip://") || stristr($file,"phar://&quo…

Windows如何搭建 ElasticSearch 集群

单机 & 集群 单台 Elasticsearch 服务器提供服务&#xff0c;往往都有最大的负载能力&#xff0c;超过这个阈值&#xff0c;服务器 性能就会大大降低甚至不可用&#xff0c;所以生产环境中&#xff0c;一般都是运行在指定服务器集群中。 除了负载能力&#xff0c;单点服务器…

Redis到底是多线程还是单线程?

Redis6.0之前&#xff1a;是单线程模式。 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。 Redis6.0之前&#xff1a;单线程 Redis6.0之后&#xff1a;Redis的IO线程是多线程&#xff0c;worker线程是单线程。

iOS开发进阶(九):OC混合开发嵌套H5应用并互相通信

文章目录 一、前言二、嵌套H5应用并实现双方通信2.1 WKWebView 与JS 原生交互2.1.1 H5页面嵌套2.1.2 常用代理方法2.1.3 OC调用JS方法2.1.4 JS调用OC方法 2.2 JSCore 实现原生与H5交互2.2.1 OC调用H5方法并传参2.2.2 H5给OC传参 2.3 UIWebView的基本用法2.3.1 H5页面嵌套2.3.2 …

面试算法-101-重排链表

题目 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交…

使用mid360从0开始搭建实物机器人入门级导航系统,基于Fast_Lio,Move_Base

Introduction 本文原本只是自己在拿到mid360后&#xff0c;开始进行开发过程的一些问题和学习的记录。毕竟实物和仿真还是有很多不同&#xff0c;且由于碰到的问题也比较多&#xff0c;READEME也越来越详细&#xff0c;所以就干脆整合起来&#xff0c;做成了一篇使用mid360的搭…

python、execl数据分析(数据描述)

一 python 1.各函数 1.1python库的安装与导入 #pip install os#pip install matplotlib#pip install seaborn#pip install scikit-learn#pip install scipy#修 改 工 作 目 录import osos.getcwd () # 查看当前工作环境os.chdir( F :\my course\database ) # 修改工作环境o…

Spark基于DPU Snappy压缩算法的异构加速方案

一、总体介绍 1.1 背景介绍 Apache Spark是专为大规模数据计算而设计的快速通用的计算引擎&#xff0c;是一种与 Hadoop 相似的开源集群计算环境&#xff0c;但是两者之间还存在一些不同之处&#xff0c;这些不同之处使 Spark 在某些工作负载方面表现得更加优越。换句话说&am…

高效物联网连接技术创新:ECWAN边缘协同自组网的未来——基于ChirpLAN窄带扩频技术的无线混合组网

物联网是指将各种物理设备通过互联网进行连接和通信的技术。它是一个庞大的网络&#xff0c;由传感器、设备、网络和云服务组成&#xff0c;旨在实现对物体的远程监测、控制和数据采集。 基于ChirpLAN窄带扩频技术的无线混合组网协议ChirpLAN&#xff0c;ChirpLAN是基于其自有的…

将 SOC 集成到应用程序安全中以增强网络弹性

从历史上看&#xff0c;安全运营中心 (SOC) 和应用程序安全 (AppSec) 计划在组织的更广泛的网络安全框架内作为不同的实体运行。SOC 一直是实时威胁检测、分析和响应、监控网络恶意活动迹象以及管理事件响应以减轻潜在损害的据点。 相反&#xff0c;AppSec 专注于网络安全的预…

JavaWeb——过滤器

Filter也称之为过滤器&#xff0c;它是Servlet技术中最实用的技术&#xff0c;Web开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截&#xff0c;从而实现一些特殊的功能。例如实现URL级别…

学会Sass的高级用法,减少样式冗余

在当今的前端开发领域&#xff0c;样式表语言的进步已经显著提升了代码组织性和可维护性。Sass&#xff08;Syntactically Awesome Style Sheets&#xff09;作为CSS预处理器的翘楚&#xff0c;以其强大的变量、嵌套规则、混合宏&#xff08;mixin&#xff09;、循环和函数等高…

【Canvas与艺术】淡蓝辉光汽车速度仪表盘

【关键点】 内圈处渐变色的采用。 【效果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>淡蓝辉光汽车速度仪表盘</t…

Windows11 安装VitrulBox Ubuntu20 虚拟机启动后卡在“Freeing initrd memory: 131304K”

步骤&#xff1a;点击启动Ubuntu后&#xff0c;一直起不来&#xff1f;没办法正常关机&#xff0c;选择重启又一直卡在这里&#xff0c;原来是同样的错误 Freeing initrd memory: 131304K 原因&#xff1a;本机联想小新14Pro&#xff0c;AMD 7840HS&#xff0c;锐龙版。而Ryze…

基于TensorFlow的花卉识别(算能杯)%%%

Anaconda Prompt 激活 TensorFlow CPU版本 conda activate tensorflow_cpu //配合PyCharm环境 直接使用TensorFlow1.数据分析 此次设计的主题为花卉识别&#xff0c;数据为TensorFlow的官方数据集flower_photos&#xff0c;包括5种花卉&#xff08;雏菊、蒲公英、玫瑰、向日葵…

设计模式之单例模式精讲

UML图&#xff1a; 静态私有变量&#xff08;即常量&#xff09;保存单例对象&#xff0c;防止使用过程中重新赋值&#xff0c;破坏单例。私有化构造方法&#xff0c;防止外部创建新的对象&#xff0c;破坏单例。静态公共getInstance方法&#xff0c;作为唯一获取单例对象的入口…