且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

JSP+Servlet培训班作业管理系统[17]–教师角色之课程管理功能实现

更新时间:2022-03-16 11:26:38

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;

}

1

2

3

4

5

6

7

8

9

10

11

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()));

  }

 }

1

2

3

4

5

6

7

8

9

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>

   </tr>

  </c:forEach>

 </table>

</div>

<div id="content_bottom">

 <a href="/HomeworkSystem/RouteServlet?childPage=courseAdd.jsp">新增</a>

</div>

</body>

</html>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

4. 新增功能实现

添加新增页面如下:


<%@ 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>courseAdd.jsp</title>

<link href="css/content.css" type="text/css" rel="stylesheet" />

</head>

<body>

<form action="/HomeworkSystem/CourseServlet?method=courseAdd"

 method="post">

 <div id="content_top">课程新增</div>

 <div id="content_mid">

  <table class="table_theme1">

   <tr>

    <td>课程名称:</td>

    <td><input type="text" name="courseName" /></td>

   </tr>

  </table>

 </div>

 <div id="content_bottom">

  <input type="submit" value="保存"></input>

 </div>

</form>

</body>

</html>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

然后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);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

5. 编辑功能实现

编辑的话,其实只允许编辑一个课程名称,比较简单。


首先跳转编辑页面时需要携带信息,修改CourseDao:


/**

 * 通过id获取

 */

public Course getById(String courseId) {

 Connection conn = null;

 PreparedStatement ps = null;

 ResultSet rs = null;

 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_id=? ";

  ps = conn.prepareStatement(sql);

  ps.setString(1, courseId);

  rs = ps.executeQuery();

  if (rs.next()) {

   return makeOneCourse(rs);

  } else {

   return null;

  }

 } catch (SQLException e) {

  System.out.println(e.toString());

  return null;

 } finally {

  DbUtils.releaseConnection(rs, ps, conn);

 }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

修改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);

 }

1

2

3

4

5

6

然后添加courseEdit.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>courseEdit.jsp</title>

<link href="css/content.css" type="text/css" rel="stylesheet" />

</head>

<body>

<form action="/HomeworkSystem/CourseServlet?method=courseEdit"

 method="post">

 <div id="content_top">课程编辑</div>

 <div id="content_mid">

  <table class="table_theme1">

   <tr>

    <td>编号:</td>

    <td><input type="text" name="courseId"

     value="${course.courseId}" readonly /></td>

   </tr>

   <tr>

    <td>名称:</td>

    <td><input type="text" name="courseName"

     value="${course.courseName}" /></td>

   </tr>

  </table>

 </div>

 <div id="content_bottom">

  <input type="submit" value="保存"></input>

 </div>

</form>

</body>

</html>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

最后修改CourseServlet处理编辑请求:


   else if (method.equals("courseEdit")) {// 编辑用户

  Course course = new Course();

  course.setCourseId(Integer.parseInt(request.getParameter("courseId")));

  course.setCourseUser(loginUser.getUserId());

  course.setCourseName(request.getParameter("courseName"));

  // 保存到数据库

  courseDao.update(course);

 }

1

2

3

4

5

6

7

8

6. 测试验证

使用钱老师+123登录后可以测试验证新增、编辑功能。


7. 总结

教师发布课程功能是一个非常典型的功能模块,到此基本上大家就了解为一个角色添加一个功能页面的开发流程了。


后续我们将加快一些节奏,让大家了解开发中的注意事项即可。