
从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层负责和数据库打交道。我帮朋友做“新增日记”功能时,流程是这样的:
你可能会问:“为什么要把逻辑写在Servlet里,而不是直接写在JSP里?”其实这是MVC模式(模型-视图-控制器),把逻辑和展示分开——我之前帮朋友做的时候,一开始把逻辑写在JSP里,后来要加“日记分类筛选”功能,改起来特别麻烦,拆成Servlet之后,只需要改Servlet里的逻辑,JSP页面不用动,清爽多了。
这里要注意几个细节:
第三步:权限控制——让每个用户只能看自己的日记
最后一步是权限控制——比如用户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实现“记住登录状态”的功能也不晚。