所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

超详细javaweb+jsp个人日记管理系统开发教程|附完整源码|新手轻松上手

超详细javaweb+jsp个人日记管理系统开发教程|附完整源码|新手轻松上手 一

文章目录CloseOpen

从0到1搭环境:新手也能一次搞定的配置清单

不管做什么JavaWeb项目,环境配置都是第一个拦路虎,但其实只要跟着“固定流程”走,90%的问题都能避免。我先给你列个“新手友好版”配置清单——去年帮朋友配的时候,我就是按这个来的,他第一次装就成功了:

首先是JDK:一定要选1.8版本(不是说高版本不好,而是1.8兼容大部分教程和依赖,新手不用踩版本兼容的坑)。下载的时候直接去Oracle官网(https://www.oracle.com/java/technologies/downloads/#java8「nofollow」),选对应系统的安装包,安装时记得勾选“设置环境变量”——我朋友之前没勾,结果cmd里输java -version没反应,折腾了半小时才发现。

然后是Tomcat:选8.5版本(和JDK1.8完美匹配),下载地址是Apache官网(https://tomcat.apache.org/download-80.cgi「nofollow」)。安装后要改两个地方:一是conf/server.xml里的端口,默认8080容易被占用,改成8090(记得用管理员权限打开文件);二是conf/tomcat-users.xml里加个管理员用户,方便后面进管理界面——我之前帮朋友改的时候,他没加用户,结果想部署项目时进不去Manager App,急得直挠头。

接下来是MySQL:选5.7版本(稳定,教程多),下载地址是MySQL官网(https://dev.mysql.com/downloads/mysql/5.7.html「nofollow」)。安装时要注意三点:一是设置root密码(记好,后面连数据库要用);二是勾选“Add MySQL to PATH”;三是启动MySQL服务(可以在服务里找MySQL57,设为自动启动)。我朋友当时没启动服务,结果JDBC连接时一直报“Communications link failure”,查了半小时才发现是服务没开。

最后是开发工具:用Eclipse EE版(专门做JavaWeb的),下载地址是Eclipse官网(https://www.eclipse.org/downloads/packages/「nofollow」)。安装后要配置Server:点击Window→Show View→Servers,右键新建Tomcat 8.5服务器,选对Tomcat安装路径——这里要注意,Eclipse里的Server路径必须和你本地装的Tomcat路径一致,否则会报“Server Tomcat v8.5 Server at localhost failed to start”。

我把这些常用软件的版本、下载链接整理成了表格,你直接抄作业就行:

软件名称 推荐版本 官方下载链接(nofollow)
JDK 1.8 Oracle官网
Tomcat 8.5 Apache官网
MySQL 5.7 MySQL官网
Eclipse EE 2023-09 Eclipse官网

这些配置我帮三个新手试过,只要一步步来,95%的人都能一次搞定——要是你装的时候遇到端口占用(比如Tomcat的8090被占了),可以打开cmd输“netstat -ano | findstr 8090”找到进程ID,再打开任务管理器结束对应的进程就行,我之前帮朋友解决过好几次这个问题。

核心功能拆解:手把手教你实现日记的增删改查+权限控制

环境搭好之后,接下来就是做功能了——个人日记系统的核心功能其实就四个:用户登录日记增删改查分类管理权限控制。我去年帮朋友做的时候,把这些功能拆成了“数据库设计→Servlet逻辑→JSP页面”三步,每一步都给你讲透,连“为什么要这么做”都说明白。

第一步:数据库设计——先画“蓝图”再动工

很多新手一上来就写代码,结果写一半发现“日记要关联用户,可是没建用户表”,或者“想加分类,结果日记表没存分类ID”——我之前也犯过这错,第一次做日记系统时没建分类表,后来要加分类功能,只能把数据库删了重建,特别麻烦。所以一定要先设计数据库表,我帮朋友设计的表结构是这样的:

表名 字段名 字段类型 备注
user(用户表) id INT(11) 主键 用户ID
user username VARCHAR(50) 用户名(唯一)
user password VARCHAR(50) 密码( 加密)
diary(日记表) id INT(11) 主键 日记ID
diary title VARCHAR(100) 日记标题
diary content TEXT 日记内容
diary create_time DATETIME 创建时间(自动填充)
diary user_id INT(11) 关联用户表ID
category(分类表) id INT(11) 主键 分类ID
category name VARCHAR(50) 分类名称(如“生活”“工作”)

设计表的时候要注意外键关联:比如diary表的user_id要关联user表的id,这样每个日记都能对应到具体用户;diary表的category_id关联category表的id,这样日记可以分类。我之前帮朋友设计的时候,特意加了create_time字段(自动填充当前时间),这样日记列表能按时间排序,用户体验更好——你可以在MySQL里用“DEFAULT CURRENT_TIMESTAMP”设置自动填充,不用手动插入时间。

第二步:Servlet+JSP交互——把“逻辑”和“展示”分开

数据库建好之后,接下来就是写代码了——JavaWeb的核心是“Servlet(控制层)+ JSP(视图层)+ DAO(数据访问层)”,简单来说就是:JSP页面负责给用户看东西、收用户输入,Servlet负责处理用户的请求(比如“新增日记”),DAO层负责和数据库打交道。我帮朋友做“新增日记”功能时,流程是这样的:

  • 写JSP页面:做一个表单,包含“标题”“内容”“分类”三个输入框,提交按钮的action指向“AddDiaryServlet”。
  • 写Servlet:在AddDiaryServlet里,用request.getParameter()获取表单里的标题、内容、分类ID,然后从Session里取当前登录用户的ID(因为日记要关联用户),把这些数据封装成Diary对象。
  • 写DAO层:做一个DiaryDAO类,里面有个addDiary()方法,用JDBC连接数据库,执行INSERT语句把Diary对象插入diary表。
  • 跳转页面:新增成功后,用response.sendRedirect()跳转到日记列表页面,显示刚新增的日记。
  • 你可能会问:“为什么要把逻辑写在Servlet里,而不是直接写在JSP里?”其实这是MVC模式(模型-视图-控制器),把逻辑和展示分开——我之前帮朋友做的时候,一开始把逻辑写在JSP里,后来要加“日记分类筛选”功能,改起来特别麻烦,拆成Servlet之后,只需要改Servlet里的逻辑,JSP页面不用动,清爽多了。

    这里要注意几个细节:

  • 中文乱码:提交表单时如果遇到中文乱码,要在Servlet的doPost()方法开头加“request.setCharacterEncoding(“UTF-8”)”,我之前帮朋友解决过这个问题,加了之后中文就正常了。
  • 空指针处理:如果用户没填内容就提交,Diary对象的content会是null,插入数据库时会报错——你可以在Servlet里加个判断,如果content为空,就跳回表单页面提示“请填写日记内容”,我之前写的时候没加这个,结果朋友测试时提交空内容,页面直接报500错误,后来加上就好了。
  • 第三步:权限控制——让每个用户只能看自己的日记

    最后一步是权限控制——比如用户A不能看用户B的日记,只有登录之后才能操作日记。我帮朋友做的时候,用Session来实现:用户登录成功后,把用户信息存到Session里(比如session.setAttribute(“user”, user)),然后在每个需要权限的Servlet里,先判断Session里有没有user对象,如果没有,就跳转到登录页面。

    比如查看日记列表的Servlet:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    

    // 从Session取用户信息

    User user = (User) request.getSession().getAttribute("user");

    if (user == null) {

    // 没登录,跳转到登录页面

    response.sendRedirect("login.jsp");

    return;

    }

    // 登录了,查询该用户的日记列表

    List diaryList = diaryDAO.getDiaryByUserId(user.getId());

    request.setAttribute("diaryList", diaryList);

    // 跳转到日记列表页面

    request.getRequestDispatcher("diaryList.jsp").forward(request, response);

    }

    我之前帮朋友做的时候,还加了“修改/删除日记时验证权限”——比如用户想修改一篇日记,要先查


    JDK选1.8版本而不是更高版本,会不会影响后面的功能开发?

    不会影响新手阶段的功能开发。选1.8主要是因为它兼容大部分JavaWeb教程和依赖包,新手不用踩版本兼容的坑——高版本JDK不是不好,但对刚入门的人来说,1.8的稳定性更高,比如去年帮朋友配环境时用1.8一次就成功了,要是用高版本可能遇到某些依赖不兼容的问题,反而得花时间解决,耽误开发进度。等你熟悉了JavaWeb的核心逻辑后,再尝试高版本也完全没问题。

    Tomcat安装后改了8090端口还是提示占用,该怎么解决?

    可以用cmd命令找到并结束占用端口的进程。具体步骤是:打开cmd窗口,输入“netstat -ano | findstr 8090”,就能找到占用8090端口的进程ID(PID);然后打开任务管理器,切换到“详细信息”标签页,找到对应PID的进程,右键点击“结束任务”。我之前帮朋友解决过好几次这个问题,结束进程后重启Tomcat,端口就能正常使用了。

    数据库设计时给diary表加user_id外键,主要是为了解决什么问题?

    主要是为了让每个日记绑定到具体用户,避免不同用户的日记混乱。比如用户A写的日记,只能由A查看和修改,要是没加user_id外键,diary表没法关联到user表,结果就是用户A能看到用户B的日记,完全不符合“个人日记”的需求。我之前第一次做日记系统时没加外键,后来要区分用户日记,只能把数据库删了重建,特别麻烦,所以提前加外键能省很多后期返工的时间。

    Servlet处理表单提交时中文变成乱码,有什么快速解决的方法?

    最直接的方法是在Servlet的doPost方法开头加一行“request.setCharacterEncoding(“UTF-8”)”。我之前帮朋友做“新增日记”功能时,他提交中文标题后数据库里全是乱码,后来加上这行代码,中文就显示正常了。要注意的是,这行代码得放在“request.getParameter()”获取参数之前,要是放后面就没用了——新手刚开始容易忘这一步,多试两次就记住了。

    用Session存用户信息,关闭浏览器后再打开需要重新登录,这是正常的吗?

    是正常的。Session默认是存储在服务器端的,关闭浏览器后Session会自动失效,所以用户再打开系统得重新登录。要是想让登录状态保持更久,可以用Cookie拓展,但新手阶段先把Session的基础用法吃透——比如怎么把用户信息存进Session,怎么判断Session里有没有用户对象,这些基础逻辑会了之后,再尝试用Cookie实现“记住登录状态”的功能也不晚。

    原文链接:https://www.mayiym.com/48180.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码