这学期javaweb课设,程设我做的计总结是一个校园二手交易平台。说是程设平台,其实简陋得可怜——一个tomcat跑起来的计总结servlet项目,前端用jsp拼页面,程设数据库就三张表。计总结但就是程设从这么个“玩具”里,我踩遍了javaweb开发几乎所有的计总结坑。
第一个坑是程设环境。我本机装的计总结是tomcat 10,用的程设javax.servlet包,结果老师检查时用的计总结是tomcat 9。代码在本地跑得好好的程设,一换环境就报ClassNotFoundException。计总结后来才明白,程设tomcat 10把javax换成了jakarta,这俩根本不兼容。折腾了一下午,最后把所有import全改了。这件事给我的教训比任何教程都深刻:javaweb开发,环境问题永远比业务逻辑更先搞死你。
第二个坑是数据库连接。我一开始用最原始的JDBC,每个请求都新建连接,关闭连接。用户一多,数据库就报too many connections。后来改成连接池,用的dbcp,代码量少了一半,性能反而上去了。说实话,以前看课本讲连接池,总觉得是小题大做,真到自己写高并发场景才明白,那玩意儿是救命的。
写登录注册模块的时候,我犯了个特别蠢的错误——把用户密码直接明文存数据库。室友路过看到,随口说了句“你这也太原始了吧”,我才意识到该加个MD5。虽然现在MD5也不安全了,但至少比明文强。这让我想起老师上课说过的话:安全不是功能,是习惯。当时没当回事,自己写代码时才体会到,很多基础的东西,不是不会,是压根没想到。
最让我抓狂的是分页功能。一个简单的商品列表,我写了个PageBean,然后各种getter、setter,servlet里传参,jsp里遍历。逻辑不复杂,但数据一多就出问题——要么重复数据,要么漏数据。调了一整天,最后发现是sql语句里limit的偏移量算错了。就这么个小学算术题,活活耗了我一个晚上。
不过最有成就感的反而是个小功能——商品图片上传。用commons-fileupload组件解析multipart请求,把文件存到服务器指定目录,再把路径存进数据库。当第一次在浏览器里看到自己上传的图片能正常显示时,那种“哦原来整个链路是这样通的”的感觉,比期末考高分还爽。整个请求从浏览器出发,经过servlet容器,再到我的代码,最后落盘,每一步都看得见摸得着。
课设答辩时,老师问了个问题:你项目里session和cookie有什么区别?我支支吾吾半天,最后说了句“一个在服务器一个在浏览器”。老师笑了笑没追问。其实我知道他想要的是更深的东西——session依赖cookie存sessionId,cookie被禁了session就失效。但当时就是没答上来。回来翻书,五分钟就懂了。有些东西,做项目时天天用,但真到要讲清楚原理,才发现自己只是“会用”,远远谈不上“理解”。
这学期javaweb课设做下来,最大的感受是:写代码这件事,光看书和视频真的不够。你看着教程里三分钟搞定一个登录功能,轮到自己写,各种小坑能埋你一整天。但正是这些坑,逼着你去查文档、看源码、问别人,最后把知识真正变成自己的。虽然我的项目还很粗糙,但至少,下次再遇到404、500、ClassNotFoundException,我不会再慌慌张张地重启tomcat了。