前言:进行Android项目的同时,JAVAEE课程也有相关的个人项目,做之前没有感受到VUE的“香”(看同行的同学用的很快乐,这个寒假来体验一波),所以还是用最基本的JSP以及Servlet来实现前后端的交互。
项目环境:
1、Eclipse IDE 4.14.0

2、Tomcat 9.0.39(鉴于当时用zip安装,进行配置时出现一大堆问题,建议使用exe安装)
3、MySQL 8.0配合navicat(相关的安装以及使用在我的另一篇博文里)

相关的环境准备,自己配置的时候没有及时记录下来,后来看到一篇不错的博文(内含编码格式问题的解决)分享给大家~

PS:一定要记得调试过程中完善编码格式,不然很可能不会出现自身想要的结果!

一、需求分析

用户分为三类:管理员、教师、学生

管理员
1、实现用户的增删改查
2、实现实验的增删改查
3、实现题库的增删改查

教师
1、查看教师信息
2、查看子实验信息
3、查看学生成绩信息

学生
1、查看学生信息
2、查看子实验信息
3、回答试题,提交得到成绩

二、数据库设计

采用MySQL8.0配合navicat设计(具体实现方法参考)

  • admin表(其实就是用户表)
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (`id` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`password` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`style` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`id`),KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- ----------------------------
-- Records of admin
-- ----------------------------
INSERT INTO `admin` VALUES ('1', '202f', '123', '学生');
INSERT INTO `admin` VALUES ('2', 'admin', 'admin', '管理员');
INSERT INTO `admin` VALUES ('3', '2020s', '123456', '学生');
INSERT INTO `admin` VALUES ('4', '2020t', '123456', '教师');
INSERT INTO `admin` VALUES ('6', '203t', '163', '教师');
INSERT INTO `admin` VALUES ('7', '232s', '124', '学生');
INSERT INTO `admin` VALUES ('8', '202s', '123', '学生');
INSERT INTO `admin` VALUES ('9', '210s', '234', '学生');
  • experiment表(实验表)
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `experiment`;
CREATE TABLE `experiment` (`id` varchar(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`hour` varchar(4) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`device` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`rule` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`goal` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`tips` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`step` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- ----------------------------
-- Records of experiment
-- ----------------------------
INSERT INTO `experiment` VALUES ('1', '化学实验基本操作技能', '4', '电子天平,称量瓶子,表面皿,坩埚,药勺,药品', '用电子天平称量物品时,可采用直接称量法、递减称量法和固定质量称量法。', '1. 熟悉和了解天平的原理、构造、各部件的位置与作用。\r\n\r\n2. 学会差减法和固定质量法的称样方法及操作技术,准确称出实验给出试样或器具的质量。\r\n\r\n3. 学会正确记录测量数据和处理数据。', '1、电子天平应放置在一平稳、固定的工作台上,应避免阳光直射和远离发热器。\r\n\r\n2、电子天平应避免与大型机器或者带干扰的设备连接,已避免其他设备的干扰。\r\n\r\n3、电子天平应使天平远离带有磁性或能产生磁场的物体及设备。\r\n\r\n4、不得在具有爆炸性危险的区域内使用天平。\r\n\r\n5、不得长时间在高湿度或高粉尘的环境中使用天平。\r\n\r\n6、电子天平使用前应通电预热半小时以上。\r\n\r\n7、玻璃器皿使用前必须按规定认真清洗干净,洗净的器皿应是内壁能被水均匀润湿而不粘附水珠。\r\n\r\n8、吸量管和移液管等玻璃量器应先经润洗后方可移取溶液。', '(1)准备两只洁净、干燥的称量瓶,做好记号,在台秤上粗略称其质量。\r\n\r\n(2)将一块表面皿置于分析天平的托盘上,准确称取其质量。\r\n\r\n(3)用药匙将试样加到表面皿中央,开始时加入少量试样,一直到接近所需的药品量时,用右手拇指和中指及手心拿稳药勺,伸向表面皿中心部分上方,食指慢慢轻敲药勺柄,让试样慢慢落入表面皿中,直至达到要求称取质量(0.5884g)时,正确记录测量数据。\r\n\r\n(4)同步骤(2)、(3),称取第2份试样于第2个表面皿中。');
INSERT INTO `experiment` VALUES ('2', '乙酸乙酯的制备', '4', '无水乙醇、冰醋酸、浓H2SO4、饱和Na2CO3、饱和NaCl、饱和CaCl2电热套、球形冷凝管、圆底烧瓶、分液漏斗', '化学公式', '1.了解从有机酸合成酯的一般原理及方法。\r\n\r\n2. 掌握蒸馏、分液漏斗的使用等操作。', '注意操作的先后顺序', '1.在50ml圆底烧瓶中加入9.5ml(0.2mol)无水乙醇和6ml(0.1mol)冰醋酸,再小心加入2.5ml浓H2SO4,混匀后,加入沸石,装上冷凝管。2.小心加热反应瓶,缓慢回流1/2h,冷却反应物,将回流改成蒸馏装置,接受瓶用冷水冷却,蒸出生成的乙酸乙酯,直到镏出液约为反应物总体积的1/2为止。\r\n\r\n3.在镏出液中慢慢加入饱和Na2CO3,振荡,至不再有CO2气体产生为止。4.得粗产品,计算产率。');
INSERT INTO `experiment` VALUES ('3', '    \r\n原电池电动势和电极电势的测定', '4', '电位差计,铜片电极,锌片电极,导线,接线板,盐桥,移液管(5mL,4支),烧杯,玻璃棒,天平,洗耳球,洗瓶,药品', '氧化还原反应的本质是氧化剂和还原剂之间发生电子的转移。原电池中得到电子的物质是氧化剂,失去电子的物质是还原剂。物质得失电子能力的大小(或氧化还原能力的强弱)可以用该物质的氧化态-还原态所组成的电对的电极电势的相对高低来衡量。', '1.掌握原电池的组成和电池电动势的测定方法。\r\n\r\n2.了解氧化态(或还原态)浓度变化、配合物形成和沉淀生成对电极电势的影响。', '比较实验步骤1,2,3,所测得的电动势数据差异', '分别配制1.0 mol的CuSO4和 ZnSO4 溶液50ml,用细砂纸除去金属铜、锌片表面的氧化层,洗净、擦干。在30mL的烧杯中加入1.0 molCuSO4溶液15mL,并插入铜电极,组成一个半电池;在另一个30mL的烧杯中加入1.0 molZnSO4溶液15mL,并插入锌电极,组成另一个半电池。用导线将铜、锌片分别与酸度计的正负极相连,两烧杯中间以盐桥连接。用电位计测出原电池');
INSERT INTO `experiment` VALUES ('5', '\r\n样品的研磨及分级筛分', '4', '振筛机 ', '逆时针旋转手柄,提起上盖,将其固定在立杆上,取下筛具,依次将各标准筛内的物料取出', '本实验主要是对制备的LiFePO4/C材料进行研磨和筛分处理,了解样品的常用研磨方法,了解确定样品粒度组成的方法,掌握标准筛和颗粒粒径的相关知识,了解振筛机的结构和工作原理、操作方法及使用注意事项,将LiFePO4/C进行研磨和标准筛筛分,探讨样品粒度对LiFePO4/C正极材料性能的影响。', '1. 为了稳固振筛机,应用四个地脚将振筛机固定牢固,以免移动。\r\n\r\n2. 定期检查、加注、更换电动机内的机油。\r\n\r\n3. 每次筛分结束后,应擦干净振筛机上筛盘内的灰尘,严禁用水冲洗。\r\n\r\n4. 振筛机工作时,严禁将身体任意部位伸入、靠近振筛机的运动部件,以免受伤。', '1. 在摆放分样筛时,应按照筛孔大小的顺序进行叠放,孔径大的在上面,孔径小的在下面,最下面放置一个筛子底盘。\r\n\r\n2. 将需要进行筛分的试样倒入最上层的筛内,盖好筛盖,然后安放在振筛机机座内。\r\n\r\n3. 逆时针旋转夹筛盘上的提手柄,将整个夹筛盘向下滑,压紧套筛;然后,顺时针旋转夹筛盘的提手柄,其内的顶杆轴夹紧支撑套,将整套分样筛固定结实。\r\n\r\n4. 将振筛机的电源开关打开,振筛机开始工作,同时用秒表计时。\r\n\r\n5. 当振动时间达到要求的时间时,关闭电源开关,振筛机停止工作。');
INSERT INTO `experiment` VALUES ('6', '正溴丁烷的制备', '5', '正丁醇 3毫升 0.033摩尔\r\n\r\n  溴化钠(无水) 5.1克 0.05摩尔\r\n\r\n  浓硫酸 5毫升 0.094摩尔\r\n\r\n  水 4.1毫升\r\n\r\n  碳酸钠、无水氯化钙。', '本实验中正溴丁烷是由正丁醇与溴化钠、浓硫酸共热而制得', '1、 学习以溴化钠、浓硫酸和正丁醇制备正溴丁烷的原理与方法。\r\n\r\n2、 练习带有吸收有害气体装置的回流加热操作。', '1、 投料时应严格按教材上的顺序;投料后,一定要混合均匀。\r\n\r\n2、 反应时,保持回流平稳进行,防止导气管发生倒吸。', ' 1、投料;2、安装回流装置\r\n\r\n以石棉网覆盖电炉为热源,按图示安装回流装置(含气体吸收部分),注意圆底烧瓶底部与石棉网间的距离和防止碱液被倒吸。\r\n\r\n3、 加热回流\r\n\r\n在石棉网上加热至沸,调整圆底烧瓶底部与石棉网的距离,以保持沸腾而又平稳回流,并时加摇动烧瓶促使反应完成。反应约30-40min。(注意调整距离和摇动烧瓶的操作)。\r\n\r\n4、 分离粗产物\r\n\r\n待反应液冷却后,改回流装置为蒸馏装置(用直形冷凝管冷凝),蒸出粗产物。(注意判断粗产物是否蒸完)。\r\n\r\n5、收集产物');
  • student表(学生信息表)
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (`id` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`age` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`sex` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`position` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`classname` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`address` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`phone` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`namestr` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,PRIMARY KEY (`id`),KEY `nam` (`namestr`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '黄辉', '21', '男', '班长', '材料1班', '湖南省长沙市湖南大学天马1区', '18916472831', '202f');
INSERT INTO `student` VALUES ('2', '哈根', '22', '男', '纪律委员', '材料2班', '湖南省长沙市湖南大学天马2区', '13457523523', '2020s');
INSERT INTO `student` VALUES ('3', '周修', '21', '女', '副班长', '材料1班', '湖南省长沙市湖南大学天马3区', '17445546231', '232s');
INSERT INTO `student` VALUES ('4', '朱怀', '20', '男', '纪律委员', '材料1班', '湖南省长沙市湖南大学天马3区', '15342321312', '202s');
INSERT INTO `student` VALUES ('5', '曾萨', '22', '男', '权益委员', '材料1班', '湖南省长沙市湖南大学天马1区', '19834521312', '210s');
  • teacher表(教师信息表)
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (`id` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`age` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`sex` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`position` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`phone` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`namestr` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`id`),KEY `namestring` (`namestr`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('1', '陈骄', '46', '男', '教授', '湖南省长沙市岳麓区天马公寓10栋', '15372892042', '2020t');
INSERT INTO `teacher` VALUES ('2', '莫伐', '53', '女', '讲师', '湖南省长沙市岳麓区望麓公寓3栋', '17634323231', '203t');
  • test表(试题表)
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (`id` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`acho` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`bcho` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`ccho` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`answer` varchar(4) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('1', '吸湿性强、遇水释放较多热量的化学品沾染皮肤后应立刻( )。', '用清水清洗', '用冷水清洗', '用软纸、软布抹去', 'C');
INSERT INTO `test` VALUES ('10', '应如何简单辨认有味的化学药品?', '用鼻子对着瓶口去辨认气味', '用舌头品尝试剂', '将瓶口远离鼻子,用手在瓶口上方扇动,稍闻其味即可', 'C');
INSERT INTO `test` VALUES ('12', '2020s', 'sdaf', 'asdf', 'rwetwer', 'B');
INSERT INTO `test` VALUES ('2', '化学品的安全标签警示词不包括( )。', '小心', '危险', '警告', 'A');
INSERT INTO `test` VALUES ('3', '对危险废物的容器和包装物以及收集、贮存、运输、处置危险废物的设施、场所,必须( )。', '设置危险废物识别标志', '设置生活垃圾识别标志', '不用设置识别标志', 'A');
INSERT INTO `test` VALUES ('4', '普通塑料、有机玻璃制品的加热温度不能超过( )。', '40℃', '60℃', '80℃', 'B');
INSERT INTO `test` VALUES ('5', '取用试剂时,错的说法是( )。', '不能用手接触试剂,以免危害健康和沾污试剂', '瓶塞应倒置桌面上,以免弄脏,取用试剂后,立即盖严,将试剂瓶放回原处,标签朝外', '多取的试剂可倒回原瓶,避免浪费', 'C');
INSERT INTO `test` VALUES ('6', '下列不可以放入105℃干燥箱干燥的是( )。', '烧杯', '量筒', '锥形瓶', 'B');
INSERT INTO `test` VALUES ('7', '实验室内使用乙炔气时,说法正确的是( )。', '室内不可有明火,不可有产生电火花的电器', '房间应密闭', '室内应有高湿度', 'A');
INSERT INTO `test` VALUES ('8', '进行腐蚀品的装卸作业应该戴( )手套。', '帆布', '橡胶', '棉布', 'B');
INSERT INTO `test` VALUES ('9', '干粉灭火器适用于( )。', '电器起火', '可燃气体起火', '以上都是', 'C');
  • score(成绩表)
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (`id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`experiment` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`result` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES ('122', '哈根', '乙酸乙酯的制备', '90');

三、数据库封装

  • 1、导入相关jar包

    2、连接MySQL数据库类(一般放在dao层)
package dao;import java.sql.*;public class DbHelper {static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";private static String url = "jdbc:mysql://localhost:3306/myproject?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT";private static String userName = "root"; private static String passWord = "huangzhihui@11"; private static Connection conn = null;private DbHelper() {}public static Connection getConnection() {if (null == conn) {try {Class.forName(JDBC_DRIVER);conn = DriverManager.getConnection(url, userName, passWord);} catch (Exception e) {e.printStackTrace();}}return conn;}public static void main(String[] args) { System.err.println(getConnection());}}

四、实现效果

登录首页

注册页面

管理员用户管理界面

管理员用户添加界面

管理员用户信息修改界面

管理员用户信息删除界面

管理员实验管理界面

管理员实验添加界面

管理员实验信息修改界面

管理员题库管理界面

管理员题目增加界面

管理员题目修改界面

教师个人信息页面

教师个人信息修改页面

教师子实验信息页面

教师所属学生信息页面

教师查看学生成绩页面

学生个人信息页面

学生个人信息修改页面

学生子实验信息页面

学生子实验测试页面

学生测试结果页面

五、基础代码

  1. 整体的结构还是很简单的,每一个功能实现几乎是共通的!

NO.1 dao层的管理类

即实现我们对数据库操作的sql语句
例如:我书写的Admindao

package dao;import java.sql.*;
import java.util.ArrayList;
import java.util.List;import entity.Admin;public class AdminDao {public List<Admin> getAllAdmin() { List<Admin> list = new ArrayList<Admin>(); Connection conn = DbHelper.getConnection();String sql = "select *from admin order by cast(id as decimal)"; try {PreparedStatement pst = conn.prepareStatement(sql);ResultSet rst = pst.executeQuery();while (rst.next()) {Admin admin = new Admin();admin.setId(rst.getString("id")); admin.setName(rst.getString("name"));admin.setPassword(rst.getString("password"));admin.setStyle(rst.getString("style"));list.add(admin);}rst.close(); pst.close(); } catch (SQLException e) {e.printStackTrace(); }return list; }public boolean addAdmin(Admin admin) { String sql = "INSERT INTO `admin`(`id`,`name`,`password`,`style`) VALUES (?,?,?,?)"; Connection conn = DbHelper.getConnection();try {PreparedStatement pst = conn.prepareStatement(sql);pst.setString(1, admin.getId());pst.setString(2, admin.getName());pst.setString(3, admin.getPassword());pst.setString(4, admin.getStyle());int count = pst.executeUpdate();pst.close();return count > 0 ? true : false; } catch (SQLException e) {e.printStackTrace();}return false;}public boolean updateAdmin(Admin admin) { String sql = "UPDATE `admin` SET `name`=?,`password`=?,`style`=? WHERE `id` = ?"; Connection conn = DbHelper.getConnection();try {PreparedStatement pst = conn.prepareStatement(sql);pst.setString(1, admin.getName());pst.setString(2, admin.getPassword());pst.setString(4, admin.getId()); pst.setString(3, admin.getStyle());int count = pst.executeUpdate();pst.close(); return count > 0 ? true : false; } catch (SQLException e) {e.printStackTrace();}return false;}public boolean deleteAdmin(int id) { String sql = "delete from admin where id = ?"; Connection conn = DbHelper.getConnection();try {PreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1, id);int count = pst.executeUpdate();pst.close();return count > 0 ? true : false; } catch (SQLException e) {e.printStackTrace();}return false;}public Admin selectAdminById(int id) { Connection conn = DbHelper.getConnection();String sql = "select *from admin where id = " + id;Admin admin = null;try {PreparedStatement pst = conn.prepareStatement(sql);ResultSet rst = pst.executeQuery();while (rst.next()) {admin = new Admin();admin.setId(rst.getString("id"));admin.setName(rst.getString("name"));admin.setPassword(rst.getString("password"));admin.setStyle(rst.getString("style"));}rst.close();pst.close();} catch (SQLException e) {e.printStackTrace();}return admin; }
}

NO.2 entity层的实体类

即实现对数据库字段的set和get方法
例如:我书写的Admin

package entity;import java.io.Serializable;public class Admin implements Serializable { private static final long serialVersionUID = 1L;private String id;private String name;private String password;private String style;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public static long getSerialversionuid() {return serialVersionUID;}public String getStyle() {return style;}public void setStyle(String style) {this.style = style;}}

NO.3 servlet层的实现类

即实现对数据库记录的增删改查方法
例如:我书写的AddServlet、DeleteServlet、UpdateServlet、ShowServlet

增  AddServlet.java
package servlet;
import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import dao.AdminDao;
import entity.Admin;public class AddServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");String id=req.getParameter("id");String name = req.getParameter("name");String password = req.getParameter("password");String style=req.getParameter("style");Admin admin = new Admin();admin.setId(id);admin.setName(name); admin.setPassword(password);admin.setStyle(style);AdminDao dao = new AdminDao();dao.addAdmin(admin);req.getRequestDispatcher("ShowServlet").forward(req, resp);}
}
删 DeleteServlet.java
package servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import dao.AdminDao;public class DeleteServlet extends HttpServlet { private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String idStr = req.getParameter("id"); if (idStr != null && !idStr.equals("")) {int id = Integer.valueOf(idStr);AdminDao dao = new AdminDao();dao.deleteAdmin(id);}req.getRequestDispatcher("ShowServlet").forward(req, resp);}}
改 UpdateServlet.java
package servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import dao.AdminDao;
import entity.Admin;public class UpdateServlet extends HttpServlet{  private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String idStr = req.getParameter("id");if (idStr != null && !idStr.equals("")) {int id = Integer.valueOf(idStr);AdminDao dao = new AdminDao();Admin admin = dao.selectAdminById(id);req.setAttribute("admin", admin);}req.getRequestDispatcher("admin/admin_user_update.jsp").forward(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {  req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");String username = req.getParameter("name");String userpwd = req.getParameter("password");String id = req.getParameter("id");String style=req.getParameter("style");Admin admin = new Admin();admin.setId(id);admin.setName(username);admin.setPassword(userpwd);admin.setStyle(style);AdminDao dao = new AdminDao();dao.updateAdmin(admin);req.getRequestDispatcher("ShowServlet").forward(req, resp);}}
查 ShowServlet.java
package servlet;import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import dao.AdminDao;
import entity.Admin;public class ShowServlet extends HttpServlet { private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");this.doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");AdminDao dao = new AdminDao();List<Admin> list = dao.getAllAdmin();req.setAttribute("list", list);req.getRequestDispatcher("admin/admin_user_index.jsp").forward(req, resp);}
}

NO.4 jsp层的页面类

即实现搭配servlet的显示页面
例如:我书写的admin_user_index、admin_user_add、admin_user_update

admin_user_index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><%@page import="entity.Admin"%><%@page import="dao.*" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" >
<title>显示</title><style type="text/css">form h1 {display: inline-block;width: 820px;}.check {padding: 30px 30px;}form {display: inline;}.contain {width: 1298px;border-radius: 10px;border: 1px #bbb solid;background-color: #eee;padding-top: 20px;}button {margin-left: 10px;}.add {float: right;margin-right: 50px;}</style>
</head>
<body>
<div class="contain pull-left"><h2>用户账号管理</h2><a href="../admin/admin_user_add.jsp" target="_self"><button class="btn btn-primary add">添加用户</button></a><div class="pull-left"><table class="table table-hover"><thead><tr><td align="center">编号</td><td align="center">帐号</td><td align="center">密码</td><td align="center">类别</td><td align="center">操作</td></tr><% java.util.List<Admin> adminList = new java.util.ArrayList<Admin>();AdminDao admindao=new AdminDao();adminList = admindao.getAllAdmin(); for(Admin admin : adminList){%><tr><td align="center"><%=admin.getId()%></td><td align="center"><%=admin.getName()%></td><td align="center"><%=admin.getPassword() %></td><td align="center"><%=admin.getStyle() %></td><td align="center"><a href="..//UpdateServlet?id=<%=admin.getId() %>"onclick='return window.confirm("This user will be changed. Are you sure?")'><button class='btn btn-primary'>修改</button></a>|<a href="..//DeleteServlet?id=<%=admin.getId() %>" onclick='return window.confirm("This user will be deleted. Are you sure?")'><button class='btn btn-danger'>删除</button></a></td><%} %></tr> </thead></table></div></div>
</body>
</html>
admin_user_add.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" ><title>添加</title><style type="text/css">form h1 {display: inline-block;width: 820px;}.check {padding: 30px 30px;}form {display: inline;}.contain {width: 1298px;border-radius: 10px;border: 1px #bbb solid;background-color: #eee;padding-top: 20px;}button {margin-left: 10px;}.add {float: right;margin-right: 50px;}</style></head><body><div class="contain pull-left"><h2>用户账号添加</h2><div class="pull-left"><form action="../AddServlet" method="post"><table class="table table-hover"><thead><tr><td>用户id:</td><td><input type="text" style="width: 40%" name="id" required/></td></tr><tr><td>用户帐号:</td><td><input  type="text" style="width: 40%" name="name" required/></td></tr><tr><td>用户密码:</td><td><input  type="password" style="width: 40%" name="password" required/></td></tr><tr><td>用户类别:</td><td><select name="style" style="width: 40%"><option>管理员</option><option>学生</option><option>教师</option></select></td></tr><tr><td colspan="2"><input  type="submit" class='btn btn-primary' value="提交"/><input  type="reset"  class='btn btn-warning' value="清空"/><input  type="button"  class='btn btn-success'  value="返回" onclick="history.go(-1)"/></td></tr></thead></table></form></div></div></body>
</html>
admin_user_update.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" ><title>修改</title><style type="text/css">form h1 {display: inline-block;width: 820px;}.check {padding: 30px 30px;}form {display: inline;}.contain {width: 1298px;border-radius: 10px;border: 1px #bbb solid;background-color: #eee;padding-top: 20px;}button {margin-left: 10px;}.add {float: right;margin-right: 50px;}</style></head><body><div class="contain pull-left"><h2>账号信息修改</h2><div class="pull-left"><form action="UpdateServlet" method="post"><table class="table table-hover"><thead><tr><td>用户编号:</td><td><input  type="text"  style="width: 40%" name="id" value="${admin.id}" required/></td></tr><tr><td>用户帐号:</td><td><input  type="text"  style="width: 40%" name="name" value="${admin.name}" required/></td></tr><tr><td>用户密码:</td><td><input  type="text"  style="width: 40%" name="password" value="${admin.password}" required/></td></tr><tr><td>用户类别:</td><td><input  type="text"  style="width: 40%" name="style" value="${admin.style}"/></td></tr><tr><td colspan="2"><input  type="submit"  class='btn btn-primary'  value="提交"/><input  type="button"  class='btn btn-success'  value="返回" onclick="history.go(-1)"/></td></tr></thead></table></form></div></div></body>
</html>

六、框架集显示

  1. 由于当时没有用VUE的框架,所以用的HTML框架来实现点击后的右侧刷新效果!
frame.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>管理员页面</title>
</head>
<frameset rows="11%,*"  framespacing="10"><frame src="admin/Top.jsp" noresize="noresize" scrolling="yes" /><frameset cols="15%,*"><frame src="admin/Left_nav.jsp" noresize="noresize" /><frame src="admin/admin_user_index.jsp" name="contain" /></frameset></frameset>
</html>
Top.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>管理员</title>
<style type="text/css">.block{width: 1300px;height: 50px;background-color: #ccc;border-radius: 10px;margin: 0 auto;}h3{text-align: center;padding-top: 12px;font-family: "微软雅黑";}
</style>
</head>
<body><div class="block"><h3>您好!管理员,欢迎使用材料学院实验管理系统!</h3></div>
</body>
</html>
Left_nav.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><link rel="stylesheet" href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css"><style type="text/css">ul{width: 200px;height:400px;float: right;margin-top: 30px;font-family: "微软雅黑";}</style></head><body><ul class="nav nav-pills nav-stacked"><li style="display: inline-block;background-color:black;font-size: 2em"><a href="admin_user_index.jsp" target="contain">用户管理</a></li><li style="display: inline-block;background-color:black;font-size: 2em"><a href="admin_experiment_index.jsp" target="contain">实验管理</a></li><li style="display: inline-block;background-color:black;font-size: 2em"><a href="admin_test_index.jsp" target="contain">题库管理</a></li><li style="display: inline-block;background-color:black;font-size: 2em"><a href="../index.jsp" target="_parent">退出系统</a></li></ul></body>
</html>

七、Filter过滤器

Filter代码

package util;
import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;public class MyFilter implements Filter {private static final String[] dir ={    "/admin","/student","/teacher"    };public  MyFilter() {// TODO 自动生成的构造函数存根}/*** @see Filter#destroy()*/public void destroy() {// TODO Auto-generated method stub}/*** @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)*/public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {try {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}HttpServletRequest req = (HttpServletRequest) request;HttpSession session = (req).getSession();String user = (String) session.getAttribute("user");String priv = (String) session.getAttribute("priv");String url = req.getRequestURI().substring(req.getContextPath().length());for (int i = 0; i < dir.length; i++) {if (url.startsWith(dir[i])) {if (user == null) {request.getRequestDispatcher("/index.jsp").forward(request, response);} else if (Integer.parseInt(priv) != i) {request.getRequestDispatcher("/error.jsp").forward(request, response);}}}chain.doFilter(request, response);}/*** @see Filter#init(FilterConfig)*/public void init(FilterConfig fConfig) throws ServletException {// TODO Auto-generated method stub}
}

登录类

package servlet;import entity.LoginMgr;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import java.io.IOException;@SuppressWarnings("serial")
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {processRequest(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {processRequest(request, response);}protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");HttpSession session = request.getSession();String name = request.getParameter("name");String password = request.getParameter("password");String style=request.getParameter("type");LoginMgr user = new LoginMgr();int userType  = user.verifyUser(name, password,style);switch (userType) {case -1:request.getRequestDispatcher("error.jsp").forward(request, response);break;case 0:session.setAttribute("priv", "0");session.setAttribute("user", name);request.getRequestDispatcher("/admin/frame.jsp").forward(request,response);break;case 1:session.setAttribute("priv", "1");session.setAttribute("user", name);request.getRequestDispatcher("/student/frame.jsp").forward(request,response);break;case 2:session.setAttribute("priv", "2");session.setAttribute("user", name);request.getRequestDispatcher("/teacher/frame.jsp").forward(request,response);}}}

登录管理类

package entity;import java.util.ArrayList;import dao.AdminDao;public class LoginMgr {private static ArrayList<Admin> adminlist;public LoginMgr() {AdminDao dao= new AdminDao();adminlist=(ArrayList<Admin>) dao.getAllAdmin();}public int verifyUser(String name, String password,String type){int userType = -1;if("管理员".equals(type))for(int i = 0; i<adminlist.size(); i++){if(adminlist.get(i).getName().equals(name)&&adminlist.get(i).getPassword().equals(password)&&adminlist.get(i).getStyle().equals("管理员")){userType = 0;return userType;}}else if(type.equals("学生"))for(int i = 0; i<adminlist.size(); i++){if(adminlist.get(i).getName().equals(name)&&adminlist.get(i).getPassword().equals(password)&&adminlist.get(i).getStyle().equals("学生")){userType = 1;return userType;}}else if(type.equals("教师"))for(int i=0;i<adminlist.size();i++) {if(adminlist.get(i).getName().equals(name)&&adminlist.get(i).getPassword().equals(password)&&adminlist.get(i).getStyle().equals("教师")) {userType=2;return userType;}}return userType;}}

第一次进行WEB项目,写的略显潦草,后期有待优化!需要源码的朋友留下邮箱,我会直接打包发给你们。之后有时间我会上传到GitHub上!期待大家的指教!

  • 2021/6/29 新增注册功能,有需要的朋友注明新版本还是旧版本!
  • 2022/5/19 上传到github仓库,需要的朋友自取,谢谢三连!

基于JSP+Servlet+MySQL实现实验管理系统相关推荐

  1. 基于jsp+servlet+mysql的酒店管理系统(附源码)

    本系统是基于jsp+servlet+mysql的前后端分离的酒店管理系统,前后端分离是指前端和后端分别是两个独立存在的项目,能独立运行.没有前端项目,后端也能运行且进行数据管理,没有后端项目,前端也能 ...

  2. jsp mysql超市管理系统_jsp超市管理系统 基于jsp+servlet+MySQL的超市管理系统(带数据库) - 下载 - 搜珍网...

    jsp超市管理系统/supermarket/.classpath jsp超市管理系统/supermarket/.mymetadata jsp超市管理系统/supermarket/.project js ...

  3. Java Web——基于Jsp+Servlet的大学生社团管理系统

    JavaWeb课程设计+JavaWeb实训作业:(Jsp+Servlet+Mysql+Tomcat+Idea) 项目类型:JAVA WEB项目 用户类型:3个角色(管理员+社长+学生) 主要技术:Js ...

  4. 基于jsp+servlet实现的银行管理系统

    jsp+Servlet图书管理系统第一版的第一次更新:免费源码下载,停更,自行下载即可,谢谢:http://download.csdn.net/detail/biexiansheng/9877270 ...

  5. javaweb基于JSP+Servlet房地产客户关系管理系统(CRM) 大作业 课程设计 毕业设计

    基于JSP+Servlet房地产客户关系管理系统(CRM)(毕业设计/大作业): 开发环境: Windows操作系统 开发工具: MyEclipse+Jdk+Tomcat6+Mysql数据库 运行效果 ...

  6. 基于JSP + Servlet + Mysql 的校园二手交易平台(源码 + 文档)

    基于JSP + Servlet + Mysql 的校园二手交易平台 1.系统开发背景 2.系统设计 3.系统实现 3.1开发所用技术 3.2数据字典 3.2系统开发 3.2.1配置环境 3.2.2创建 ...

  7. 基于jsp+servlet+mysql网上蛋糕店

    基于jsp+servlet+mysql网上蛋糕店 一.系统介绍 二.功能展示 1.主页(客户) 2.登陆(客户) 3.我的购物车(客户) 4.我的订单(客户) 5.订单管理(管理员) 6.客户管理(管 ...

  8. 基于JSP+Servlet+MySQL+Bootstrap的防疫知识在线问答系统

    问答首页 详细问答 列表页面 回复页面 发起提问 我的问答 密码修改 修改个人资料 用户登录 用户注册 管理页面 用户管理 帖子管理 主题管理 技术描述 开发工具: Idea/Eclipse 数据库: ...

  9. 基于jsp+servlet的银行信贷管理系统。

    运行环境,jdk1.8或者jdk1.7.tomcat8或者tomcat8.5.mysql5.7.eclipse.myeclipse开发环境. 1.基于jsp+servlet的银行信贷管理系统,前台界面 ...

最新文章

  1. 4篇SCI,1篇A类期刊,这位复旦博士生分享自身科研经验
  2. mongodb:linux基本操作
  3. PostCSS理解与运用
  4. linux 内核 数据结构 file_operations、file、inode
  5. cdn加速的原理是怎么样的
  6. python_装饰器
  7. ZOJ1654-Place the Robots【最大匹配,图论】
  8. 听说你做IT的,帮我做个网站呗!
  9. 5点击换gif_新媒体人,至少要会做这种切换式GIF
  10. python3自动化软件发布系统_PythonPC客户端自动化实现原理(pywinauto)
  11. apache poi使用例_Apache POI使用详解
  12. PC微信小程序突然Charles抓不到包
  13. 计算机专业毕设论文题目大全(一)
  14. sap服务器安装双系统教程,电脑安装双系统图文教程
  15. Jmeter之接口测试流程详解
  16. 自制力差?!教你强迫自己学习
  17. Spark高频面试题总结
  18. (转载)Cisco 2960 交换机 安装配置基础
  19. 同时删除多个 PDF 中间几页
  20. HbuilderX下载安装教程

热门文章

  1. 使用js发送post请求
  2. 计算机装调与维护论文,计算机装调课程实验报告.doc
  3. 优秀课件笔记旅游需求预测Forecast of Tourism DemandsChapter Demands
  4. windbg入门教程之获取异常报告
  5. 考勤助手——教务安排课程时序图
  6. Arcgis的proxy使用
  7. 高准质量流量计的上限流量取决于测量原理
  8. gitlab-runner:安装、注册、配置用户root
  9. iPhone 实用技巧 之 快速使用iTools安装ipa软件。本节简单介绍如何使用iTools安装在iPhone上安装ipa软件
  10. 我这里有漂亮的繁体字,非主流图片