1. 本章任務
本章開始實作教師角色的課程管理功能。需要注意的是課程一旦釋出是不允許删除的,避免已有學生選課;課程可以修改;課程可以新增;課程浏覽時還需要注意一個教師隻能檢視本人負責的課程。
2. 添加課程管理菜單
添加課程管理菜單,對應頁面為courseManage.jsp。
public class Constants {
// 用于儲存角色及對應的菜單資訊
public static HashMap<String, String[][]> roleMenuMap = new HashMap<String, String[][]>();
// 使用static代碼塊對roleMenuMap進行初始化
static {
// 校長擁有的菜單
roleMenuMap.put("master", new String[][] { { "人員管理", "userManage.jsp" }, { "課程檢視", "courseView.jsp" } });
// 教師擁有的菜單
roleMenuMap.put("teacher", new String[][] { { "課程管理", "courseManage.jsp" } });
}
}
1
2
3
4
5
6
7
8
9
10
11
3. 跳轉課程管理頁面
注意通過RouteServlet跳轉課程管理頁面時,需要攜帶目前登入教師管理的課程資訊。同時CourseDao需要添加通過使用者編号查詢對應課程的功能。
修改CourseDao如下:
/**
* 通過userId擷取對應課程
*/
public List<Course> getCoursesByUserId(int userId) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<Course> courses = new ArrayList<Course>();
try {
conn = DbUtils.getConnection();
String sql = "select c.*,u.user_name from course c left join user u on c.course_user=u.user_id where c.course_user=?";
ps = conn.prepareStatement(sql);
ps.setInt(1, userId);
rs = ps.executeQuery();
while (rs.next()) {
courses.add(makeOneCourse(rs));
}
} catch (SQLException e) {
} finally {
DbUtils.releaseConnection(rs, ps, conn);
}
return courses;
12
13
14
15
16
17
18
19
20
21
22
23
修改RouteServlet如下:
else if (childPage.equals("courseManage.jsp")) {
// 擷取目前登入使用者
User loginUser = (User) request.getSession().getAttribute("loginUser");
if (loginUser != null) {// 已登入
CourseDao courseDao = new CourseDao();
// 傳回值為登入使用者所對應的課程
request.setAttribute("courses", courseDao.getCoursesByUserId(loginUser.getUserId()));
4. 添加課程管理頁面
添加課程管理頁面courseManage.jsp,先顯示資訊,同時把新增、編輯按鈕放上,根據之前的讨論,不能有删除按鈕。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!-- 使用c:标簽需要添加本行代碼 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>courseManage.jsp</title>
<link href="css/content.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="content_top">課程管理</div>
<div id="content_mid">
<table class="table_theme1">
<thead>
<tr
<tr>
<th>課程編号</th>
<th>課程名稱</th>
<th>授課教師</th>
<th>操作</th>
</tr>
</thead>
<c:forEach items="${courses}" var="item">
<tr>
<td>${item.courseId}</td>
<td>${item.courseName}</td>
<td>${item.courseUserName}</td>
<td><a
href="/HomeworkSystem/RouteServlet?childPage=courseEdit.jsp&courseId=${item.courseId}">編輯</a></td>
</c:forEach>
</table>
</div>
<div id="content_bottom">
<a href="/HomeworkSystem/RouteServlet?childPage=courseAdd.jsp">新增</a>
</body>
</html>
24
25
26
27
28
29
30
31
32
33
34
35
36
37
4. 新增功能實作
添加新增頁面如下:
<title>courseAdd.jsp</title>
<form action="/HomeworkSystem/CourseServlet?method=courseAdd"
method="post">
<div id="content_top">課程新增</div>
<div id="content_mid">
<table class="table_theme1">
<td>課程名稱:</td>
<td><input type="text" name="courseName" /></td>
</table>
</div>
<div id="content_bottom">
<input type="submit" value="儲存"></input>
</form>
然後CourseServlet中處理儲存新增的請求,注意課程關聯的使用者為目前登入使用者。
@WebServlet("/CourseServlet")
public class CourseServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 處理post請求
// 設定輸入輸出格式、編碼
response.setContentType("text/html");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 擷取method參數
String method = request.getParameter("method");
// 擷取登入使用者資訊
User loginUser = (User) request.getSession().getAttribute("loginUser");
// 操作資料庫
CourseDao courseDao = new CourseDao();
if (method.equals("courseAdd")) {// 新增
Course course = new Course();
course.setCourseName(request.getParameter("courseName"));
course.setCourseUser(loginUser.getUserId());
courseDao.add(course);
// 攜帶最新使用者資料到人員管理頁面
request.setAttribute("courses", courseDao.getCoursesByUserId(loginUser.getUserId()));
// 跳轉到管理背景頁面,且子頁面是使用者管理
request.setAttribute("childPage", "courseManage.jsp");
request.getRequestDispatcher("/index.jsp").forward(request, response);
5. 編輯功能實作
編輯的話,其實隻允許編輯一個課程名稱,比較簡單。
首先跳轉編輯頁面時需要攜帶資訊,修改CourseDao:
* 通過id擷取
public Course getById(String courseId) {
String sql = "select c.*,u.user_name from course c left join user u on c.course_user=u.user_id where c.course_id=? ";
ps.setString(1, courseId);
if (rs.next()) {
return makeOneCourse(rs);
} else {
return null;
System.out.println(e.toString());
return null;
修改RouteServlet:
else if (childPage.equals("courseEdit.jsp")) {
CourseDao courseDao = new CourseDao();
String courseId = request.getParameter("courseId");
Course course = courseDao.getById(courseId);
request.setAttribute("course", course);
然後添加courseEdit.jsp
<title>courseEdit.jsp</title>
<form action="/HomeworkSystem/CourseServlet?method=courseEdit"
<div id="content_top">課程編輯</div>
<td>編号:</td>
<td><input type="text" name="courseId"
value="${course.courseId}" readonly /></td>
<td>名稱:</td>
<td><input type="text" name="courseName"
value="${course.courseName}" /></td>
最後修改CourseServlet處理編輯請求:
else if (method.equals("courseEdit")) {// 編輯使用者
course.setCourseId(Integer.parseInt(request.getParameter("courseId")));
// 儲存到資料庫
courseDao.update(course);
6. 測試驗證
使用錢老師+123登入後可以測試驗證新增、編輯功能。
7. 總結
教師釋出課程功能是一個非常典型的功能子產品,到此基本上大家就了解為一個角色添加一個功能頁面的開發流程了。
後續我們将加快一些節奏,讓大家了解開發中的注意事項即可。