jsp图书管理系统
去年帮学校图书馆做系统升级,图统翻出2008年那套JSP写的书管图书管理程序,代码里还留着当年老师傅的理系注释:“借书超期罚款,一天两毛,图统别问我为什么,书管校长定的理系。”这套系统跑了十几年,图统服务器是书管台戴尔塔式机,机箱盖都没合上,理系风扇嗡嗡响,图统但借还书从来没出过大岔子。书管 JSP做图书管理,理系核心就三件事:连数据库、图统查数据、书管显示页面。理系听着简单,坑全在细节里。比如借书这个动作,表面上是点个按钮,底下得同时干四件事:在借阅表插一条记录、把图书表里的可借数量减一、检查读者有没有超期未还的书、更新读者的借阅上限。少一步,数据就乱。我见过最离谱的bug是还书时只删了借阅记录,忘了把图书状态改回“在馆”,结果那本书在系统里永远显示“已借出”,实际在书架上躺了三年没人发现。 数据库连接池是JSP项目的命门。早年用JDBC直连,每次请求都新建连接,二十个学生同时查书,数据库就卡死。后来换成Tomcat自带的DBCP,配置写在context.xml里, 分页查询是另一个高频翻车点。MySQL的LIMIT语句简单, 前端页面反而没那么讲究。老系统用的还是table布局,按钮是,样式靠一个叫style.css的文件,里面全是手写的像素值。新来的实习生想换成Bootstrap,结果发现表单提交的action路径全是硬编码的 权限控制用Session实现。登录成功后往session里塞一个User对象,每个JSP页面开头检查 这套系统现在还在跑,虽然代码老旧,但胜在稳定。新项目用Spring Boot重写了一遍,部署在Docker里,但老JSP系统没下线,因为有些老教师习惯了那个界面,按钮大、字体粗、颜色对比强烈。技术选型这事,有时候不是新的就好,得看谁在用。maxActive设成50,maxIdle设成10,情况好转。但有个隐藏问题:如果代码里忘了在finally块里关连接,连接池很快被占满。我接手时看到一段代码,Connection对象在try里创建,catch里只打印了异常堆栈,没关连接。这种写法在测试环境跑一天没事,上线三天必崩。LIMIT 0,20取第一页,LIMIT 20,20取第二页。但JSP页面传参时,有人把页码直接从URL取出来拼进SQL,这就是SQL注入的入口。我见过一个学生用?page=1;DROP TABLE books把测试库干掉了。正确的做法是用PreparedStatement,页码参数化,再在Java层校验页码范围。/library/borrow.jsp,改一个地方要动二十个文件。后来作罢,只在原有基础上加了点hover效果。图书封面上传功能更麻烦,JSP的<input type=“file”>要配合Servlet 3.0的@MultipartConfig注解,Tomcat 7以下还不支持,最后用SmartUpload组件凑合,上传大文件经常超时。session.getAttribute(“user”)是否为空。管理员和普通读者的区别靠User对象里的role字段判断。这套逻辑简单,但有个漏洞:如果用户直接访问/admin/deleteBook.jsp,而那个页面忘了加权限检查,普通读者也能删书。我接手后写了个Filter,统一拦截/admin/*路径,检查role是否为admin。Filter配置在web.xml里,<url-pattern>/admin/*</url-pattern>,省得每个页面都写一遍。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-