前言:進行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());
}
}
四、實作效果
登錄首頁

管理員用戶管理界面

管理員用戶添加界面

管理員用戶資訊修改界面

管理員用戶資訊洗掉界面

管理員實驗管理界面

管理員實驗添加界面

管理員實驗資訊修改界面

管理員題庫管理界面

管理員題目增加界面

管理員題目修改界面

教師個人資訊頁面

教師個人資訊修改頁面

教師子實驗資訊頁面

教師所屬學生資訊頁面

教師查看學生成績頁面

學生個人資訊頁面

學生個人資訊修改頁面

學生子實驗資訊頁面

學生子實驗測驗頁面

學生測驗結果頁面

五、基礎代碼
- 整體的結構還是很簡單的,每一個功能實作幾乎是共通的!
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://cdn.bootcss.com/bootstrap/4.0.0/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://cdn.bootcss.com/bootstrap/4.0.0/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://cdn.bootcss.com/bootstrap/4.0.0/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>
六、框架集顯示
- 由于當時沒有用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>
第一次進行WEB專案,寫的略顯潦草,后期有待優化!需要原始碼的朋友留下郵箱,我會直接打包發給你們,之后有時間我會上傳到GitHub上!期待大家的指教!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260585.html
標籤:其他
