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" } });
	}
}

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;
	}

修改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>
				</tr>
			</c:forEach>
		</table>
	</div>
	<div id="content_bottom">
		<a href="/HomeworkSystem/RouteServlet?childPage=courseAdd.jsp">新增</a>
	</div>
</body>
</html>

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>

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

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

<%@ 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>

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

6. 测试验证

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

7. 总结

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值