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. 总结
教师发布课程功能是一个非常典型的功能模块,到此基本上大家就了解为一个角色添加一个功能页面的开发流程了。
后续我们将加快一些节奏,让大家了解开发中的注意事项即可。