之前学了在Eclipse中创建Java Web项目,又陆续接触了JSP、JavaBean、Servlet、JDBC等,虽然都是浅尝辄止,但对概念有了初步的认识。《Java Web设计使用教程》书中在介绍Struts、Hibernate等技术之前给了一个电子会议厅的开发实例,综合使用了JSP、JavaBean、Servlet、JDBC等技术,算是一个阶段性的应用展示。本来想偷个懒,在出版社网站上下源代码,看一下各部分的代码就算了,结果机械工业出版社教育服务网不但要注册,还得证明是教师才能下资源和课件,百度了半天也没有找到资源,只有通过看书上的代码片段,再加个人脑补,实现电子会议厅功能,就当是这段时间学习的总结了。
功能介绍
电子会议厅的功能如下图所示。主要是两类用户,管理员可以分类发布、修改和删除事务。班级成员,也就是一般用户,可以分类浏览及查询班级事务,还可以对班级事务进行评论。
除了上述功能,根据章节后面的实训内容要求,增加了用户登录的功能。
数据库表设计
根据上述需求,程序主要包括四张表:
- User表保存用户姓名、账户和角色。简单起见,用1表示班级成员(普通用户),2表示系统管理员;
- sort表保存班级事务类型;
- affair保存系统管理员发布的班级事务;
- comment表保存事务关联的评论。
CREATE DATABASE `electronicchamber`
CREATE TABLE `electronicchamber`.`User` (
`UserAccount` VARCHAR(50) NOT NULL,
`UserName` VARCHAR(50) NOT NULL,
`Role` INT NOT NULL DEFAULT 1,
`Password` VARCHAR(50) NOT NULL,
PRIMARY KEY (`UserAccount`));
CREATE TABLE `electronicchamber`.`sort` (
`sortId` INT NOT NULL,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`sortId`));
CREATE TABLE `electronicchamber`.`affair` (
`affariId` INT NOT NULL DEFAULT 1,
`title` VARCHAR(100) NOT NULL,
`content` VARCHAR(500) NULL,
`releaseTime` DATETIME NOT NULL,
`sortId` INT NOT NULL,
PRIMARY KEY (`affariId`));
CREATE TABLE `electronicchamber`.`comment` (
`commentId` INT NOT NULL DEFAULT 1,
`content` VARCHAR(500) NULL,
`time` DATETIME NOT NULL,
`userAccount` VARCHAR(50) NOT NULL,
`affairId` INT NOT NULL,
PRIMARY KEY (`commentId`));
程序功能设计
首先定义几个类,与数据库表对应,分别为User、Sort、Affair、Comment类,然后将之前文章中使用的那个比较粗糙的OperateJDBC类直接拿过来凑合着用。
简单起见,使用前面文章中的用户登录窗口,同时在User数据库表中添加test和test1两个账号,分别具有班级成员和系统管理员角色,不再本项目中增加用户注册功能了。
本文主要是搭个架子,同时把用户登录功能及系统主界面弄出来,其它的页面和功能在后续文章中逐(man)步(man)增(mo)加(suo)。
目前创建了6个jsp文件及一个Servlet,其关系及流程如下图所示,其中main.jsp是个框架页面,使用iframe包含了top.jsp、left.jsp和index.jsp三个页面。
main.jsp的效果如下图所示。上面的top.jsp主要就是链接了一个图片,index.jsp是个默认空白页。左侧的left.jsp列出了能够做的一些操作,书上给的例子中内容是写死的,班级成员和系统管理员进去看到的都一样。敲代码的时候稍微改了一点,根据用户的角色,系统管理员进去能看到班级事务发布和班级事务维护,班级成员进去看不到这两项。代码比较简单,列在了图形下面。
left.jsp部分内容如下:
<table width="169" height="300" border="1">
<%
User user=(User)application.getAttribute("currentUser");
if(user.getRole()==2)
{
%>
<tr><td height="30"><div align="center"><a href="#" target="mainFrame">班级事务发布</a></div></td></tr>
<tr><td height="30"><div align="center"><a href="#" target="mainFrame">班级事务维护</a></div></td></tr>
<%
}
%>
<tr>
<td height="100">班级事务浏览
<p align="center"><a href="#" target="mainFrame">学习竞赛</a></p>
<p align="center"><a href="#" target="mainFrame">文体活动</a></p>
<p align="center"><a href="#" target="mainFrame">社会事务</a></p>
<p align="center"><a href="#" target="mainFrame">各类补助</a></p>
</tr>
<tr><td height="30"><div align="center"><a href="#" target ="mainFrame">班级事务查询</a></div>
</table>
架子基本上就搭出来了,后面就是逐步把系统管理员和班级成员的操作功能逐步实现,这些就在后续文章中叙述。项目的代码放在了GitHub上,地址为:https://github.com/guochao2299/electronicchamber,代码写的太烂,仅供参考。
其它说明
框架页面。html5之前实现框架页面主要使用frameset和frame,但是这两个标签在html5中已经不支持了。通过百度,在html5中能使用html5、js、css等多种方式实现框架页面,本文采用了参考文献3中的示例代码,主要通过div+iframe来实现框架页面。
静态资源访问。top.jsp页面中链接的图片一开始放在了WEB-INF文件外面,用起来比较正常,后来把图片放到了WEB-INF中,再查看top.jsp就无法正常显示图片了。百度了一些文章,主要是说在WEB-INF中访问静态资源比较麻烦。这部分内容也是刚接触,不是很了解,具体的说明可以看参考文献4.
参考文献:
[1]Java Web设计使用教程
[2]https://blog.csdn.net/huyishero/article/details/86288025?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
[3]https://blog.csdn.net/qq_42058441/article/details/86564920?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
[4]https://blog.csdn.net/u011202334/article/details/61416764