背景
五月中旬玩了一下 Servlet
,这个技术是 Java Web 的底层的技术,任何高大上的框架,比如 Spring、SpringMVC、SpringBoot
,底层都是它。本文来就来介绍一个只用一个 Servlet 实现的 Java Web 管理系统,带领大家重新感受一下 Servlet
的魅力。
本文的目标用户是 Java Web 的初学者,介绍的是纯手工的 Servelt
应用,页面全是 JSP 命令完成数据渲染的,对初学 Web 的小伙伴可能会有启发。
声明:这个项目是在一位网友提供的源码上,花了某个周末半天的时间进行二次改造的。源码来源不明,而且源码也有缺陷,笔者做了修正,让它成为一个二手物品信息发布的小应用。且成功帮助这位网友完成了毕业答辩,能用自己的技术经验帮助他人,还是蛮有成就感的呢!
功能分析
这个二手物品交易系统,包含了用户管理、信息发布管理、论坛管理三个模块,需求功能表如下:
Servlet 功能说明
看看工程的类图结构:
调用流程:
MainServlet
根据request
传入的一个optCode
操作码,来处理不同的请求,从而达到一个应用只有一个Servlet
的目的。功能列表中所有需要向后台提交表单的action
都是这个Servlet
,只是传递的操作码参数不同。CharacterFilter
字符编码拦截器。- 数据库操作封装了一个
CommonDAO
类,接收操作表名称和参数,底层使用 JDBC 封装 SQL 操作。 PageManager
类完成页面分页查询。- 除了需要提交请求时使用了
Servlet
,JPS 页面的初始化逻辑,是直接在 JSP 指令中调用CommonDAO
和PageManager
操作数据完成的。 - JSP 页面上的提交按钮,它们的
action
直接指向当前 JSP ,然后再通过指令获取上一次提交的数据,完成数据入库。
比如,添加二手物品信息 ershouwupin_add.jsp
的页面逻辑为:
<%
new CommDAO().insert(request,response,"ershouwupin",ext,true,false,"");
%>
<body >
<form action="ershouwupin_add.jsp?id=<%=id%>" method="post" onsubmit="return checkform();">
二手物品信息添加
<br><br>
<table width="100%" border="1" align="center" cellpadding="3" cellspacing="1">
<tr><td width="200">编号:</td><td><input name='bianhao' type='text' id='bianhao' value='' onblur='checkform()' /> *<label id='clabelbianhao' /></td></tr>
<tr><td width="200">物品名称:</td><td><input name='yongpinmingcheng' type='text' id='yongpinmingcheng' value='' onblur='checkform()' /> *<label id='clearId' /></td></tr>
<tr><td width="200">类别:</td><td><input name='leibie' type='text' id='leibie' value='' onblur='' /></td></tr>
<tr><td width="200">价格:</td><td><input name='jiage' type='text' id='jiage' value='' onblur='' /></td></tr>
<tr><td width="200">数量:</td><td><input name='kucun' type='text' id='kucun' value='' onblur='checkform()' /> <label id='clabelkucun' />必需数字型</td></tr>
<tr><td width="200">照片:</td><td><input name='zhaopian' type='text' id='zhaopian' size='50' value='' onblur='' /> <input type='button' value='上传' onClick="up('zhaopian')" /></td></tr>
<tr><td width="200">发布人:</td><td><input name='adduser' type='text' id='adduser' value='<%=request.getSession().getAttribute("username")%>' /></td></tr>
<tr><td width="200">备注:</td><td><textarea name='beizhu' cols='50' rows='5' id='beizhu' onblur='' ></textarea></td></tr>
<tr>
<td> </td>
<td>
<input type="submit" name="Submit" value="提交"/>
<input type="reset" name="Submit2" value="重置"/>
</td>
</tr>
</table>
</form>
页面结构说明
系统采用了类似 Swing 的 BorderLayout
布局,包括上、下、左、右四个区域,除了右侧操作区域由菜单控制,其他区域单独抽取成一个 JSP 文件,被菜单页面引用。
系统展示
运行项目后,访问首页,效果图如下:
编程启示录
首先,Servlet
作为底层,固然是需要掌握的,只封装一个 Servlet
方法,避免定义多个类,这个思路可以学习,毕竟每个功能并不复杂,用一个 Servlet
也够用。
其次,这个项目的页面是直接调用 CommonDAO
的增、删、改、查完成的。将 SQL 语句及所有业务都写在 JSP 指令中,阅读性会很差,不好调试,还存在 SQL 注入风险。
作为一个功能完整且技术单一的小应用,初学者或者需要交课程设计的小伙伴们,可能用得上。
这是项目源码地址 ,需要的小伙伴们可以联系笔者。