基于javaweb的毕业设计

去年帮学弟看毕设代码,基于打开他那个“基于JavaWeb的毕业在线商城”项目,我一眼就瞅见web.xml里配着2015年风格的设计Struts2过滤器。他挠头说:“网上教程都这么写。基于”这事挺典型——很多JavaWeb毕设不是毕业死在功能上,是设计死在技术栈的“代沟”里。

Servlet 3.0以后,基于注解配置已经能替代大部分web.xml工作。毕业可不少学生还在手写<servlet-mapping>,设计一写就是基于几十行。我见过最夸张的毕业一个图书管理系统,光web.xml就四百多行,设计改个URL映射得翻半天。基于其实用@WebServlet("/book/*")一行搞定。毕业这不是设计炫技,是省下时间调业务逻辑。Tomcat 7以上都支持,学校机房那台老服务器?查查版本号再说。

数据库连接池是另一个重灾区。有人直接在Servlet里DriverManager.getConnection(),每次请求新建连接。本地测试没问题,答辩时五个老师同时点查询,连接数瞬间爆掉。换成HikariCP,配置不超过十行,性能翻几倍。但注意别把密码硬编码在Java文件里——我见过把root/123456写在DAO层的,GitHub一搜全是。

前端这块,JSP+JSTL其实够用。可有些导师非要求“前后端分离”,学生就硬生生把JSP改成HTML+AJAX,后端加个@RestController返回JSON。结果跨域问题卡三天,最后加了个@CrossOrigin了事。要我说,毕设不是生产项目,能用服务端渲染就别折腾。真要做分离,Vue+Axios配Spring Boot更顺,但那是另一个技术栈了,跟JavaWeb毕设的评分标准未必对得上。

安全方面,SQL注入是最容易踩的坑。PreparedStatement能解决大部分问题,可有人偏用Statement拼字符串。我测试过一个登录功能,输入' OR '1'='1直接进后台。修复也简单,把拼SQL改成占位符,十分钟的事。XSS过滤用JSTL的<c:out>标签就能挡掉大半,比手写过滤器省事。

项目结构别搞太花。见过把DAO、Service、Controller分得清清楚楚的,也见过所有代码塞进一个Servlet的。后者虽然丑,但答辩时老师翻代码快,反而容易过。折中方案:按功能模块分包,每个模块里再分层。比如user包下放UserServlet、UserService、UserDao,找起来不费劲。

最后说部署。War包扔进Tomcat的webapps目录是最稳的,别用IDE内置服务器演示。答辩现场电脑没装MySQL?提前导成SQLite,改下JDBC URL就能跑。我学弟那次就是靠这招救的场——他导师的笔记本上压根没装数据库。

写毕设代码跟写论文一样,别追求大而全。一个能跑通的登录注册+增删改查,比十个半成品模块强。答辩老师看的是你懂不懂MVC,不是看你用了多少设计模式。把Servlet生命周期讲清楚,比背二十三种设计模式管用。