天天看點

JSP+Servlet教育訓練班作業管理系統[17]–教師角色之課程管理功能實作

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. 總結

教師釋出課程功能是一個非常典型的功能子產品,到此基本上大家就了解為一個角色添加一個功能頁面的開發流程了。

後續我們将加快一些節奏,讓大家了解開發中的注意事項即可。