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

简介: 本文目录1. 本章任务2. 代码实现2.1 添加菜单2.2 加载教师所管理的作业2.3 显示作业题目列表2.4 作业题目新增功能实现2.5 作业题目编辑功能的实现3. 总结

1. 本章任务

本章实现教师角色的作业管理功能。


教师需要发布作业题目,发布后可以修改,但是不允许删除。需要注意几点:


作业是属于课程的,所以当老师查看自己所管理的作业列表时,需要查询自己管理课程下面发布的作业。

发布作业题目(title)时,需要同时生成学生应该提交的作业内容(job)记录。加入有30个学生选择了对应课程,则每次发布作业,除了要生成一个title记录,还要生成30条job记录,这样学生登录之后才能看到自己需要提交的作业题目及对应内容、打分情况。

2. 代码实现

之前对项目中实现一个新功能讲的已经比较多了,此处简单的贴一下代码就OK,重点内容会有文字描述。


2.1 添加菜单

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" }, { "作业题目管理", "titleManage.jsp" } });

}

}

1

2

3

4

5

6

7

8

9

10

11

2.2 加载教师所管理的作业

修改Title


public class Title {

private int titleId;

private String titleContent;

private int titleCourse;

private String titleTime;

/**

 * 冗余字段用于显示

 */

private String titleCourseName;

 // 省略get set方法

}

1

2

3

4

5

6

7

8

9

10

11

修改RouteServlet


   else if (childPage.equals("titleManage.jsp")) {

  User loginUser = (User) request.getSession().getAttribute("loginUser");

  if (loginUser != null) {// 已登录

   TitleDao titleDao = new TitleDao();

   // 返回值为登录用户所对应的课程

   request.setAttribute("titles", titleDao.getTitlesByUserId(loginUser.getUserId()));

  }

 }

1

2

3

4

5

6

7

8

修改 TitleDao


 /**

 * 通过userId获取对应作业题目

 */

public List<Title> getTitlesByUserId(int userId) {

 Connection conn = null;

 PreparedStatement ps = null;

 ResultSet rs = null;

 List<Title> titles = new ArrayList<Title>();

 try {

  conn = DbUtils.getConnection();

  String sql = "select t.*,c.course_name from title t left join course c on t.title_course=c.course_id left join user u on c.course_user=u.user_id where u.user_id=?";

  ps = conn.prepareStatement(sql);

  ps.setInt(1, userId);

  rs = ps.executeQuery();

  while (rs.next()) {

   titles.add(makeOneTitle(rs));

  }

 } catch (SQLException e) {

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

 } finally {

  DbUtils.releaseConnection(rs, ps, conn);

 }

 return titles;

}

/**

 * 获取一个

 */

public Title makeOneTitle(ResultSet rs) throws SQLException {

 Title title = new Title();

 title.setTitleId(rs.getInt("title_id"));

 title.setTitleContent(rs.getString("title_content"));

 title.setTitleCourse(rs.getInt("title_course"));

 title.setTitleTime(rs.getString("title_time"));

 if (rs.getString("course_name") != null) {

  title.setTitleCourseName(rs.getString("course_name"));

 }

 return title;

}

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

38

2.3 显示作业题目列表

添加titleManage.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>titleManage.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="${titles}" var="item">

   <tr>

    <td>${item.titleId}</td>

    <td>${item.titleContent}</td>

    <td>${item.titleCourseName}</td>

    <td><a

     href="/HomeworkSystem/RouteServlet?childPage=titleEdit.jsp&titleId=${item.titleId}">编辑</a></td>

   </tr>

  </c:forEach>

 </table>

</div>

<div id="content_bottom">

 <a href="/HomeworkSystem/RouteServlet?childPage=titleAdd.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

2.4 作业题目新增功能实现

由于作业新增页面需要选择作业所属课程,所以跳转到作业新增页面时,需要先加载教师管理的课程列表。


修改RouteServlet


   else if (childPage.equals("titleAdd.jsp")) {// 课程新增页面,需要教师管理的课程列表

  User loginUser = (User) request.getSession().getAttribute("loginUser");

  CourseDao courseDao = new CourseDao();

  request.setAttribute("courses", courseDao.getCoursesByUserId(loginUser.getUserId()));

 }

1

2

3

4

5

修改titleAdd.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>titleAdd.jsp</title>

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

</head>

<body>

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

 method="post">

 <div id="content_top">作业题目新增</div>

 <div id="content_mid">

  <table class="table_theme1">

   <tr>

    <td>作业题目:</td>

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

   </tr>

   <tr>

    <td>所属课程:</td>

    <td><select name="titleCourse">

      <c:forEach items="${courses}" var="item">

       <option value="${item.courseId}">${item.courseName}</option>

      </c:forEach>

    </select></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

33

34

点击新增后,需要生成作业题目记录,同时还需要生成选择该门课的学生的作业内容记录。所以修改TitleServlet如下,注意需要修改的相关的Dao层方法可以去查阅我的Github源码,此处就不再一一粘贴了。



@WebServlet("/TitleServlet")

public class TitleServlet 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");

 // 操作数据库

 TitleDao titleDao = new TitleDao();

 SelectionDao selectionDao = new SelectionDao();

 JobDao jobDao = new JobDao();

 if (method.equals("titleAdd")) {

  // 新增作业题目

  Title title = new Title();

  title.setTitleContent(request.getParameter("titleContent"));

  title.setTitleCourse(Integer.parseInt(request.getParameter("titleCourse")));

  title.setTitleTime(TimeUtils.getNowSqlTime());

  int newId = titleDao.add(title);

  // 查询选择该门课的用户id

  List<Selection> selections = selectionDao.getSelectionsByCourseId(title.getTitleCourse());

  // 为每个选择该课的学生新增作业内容记录

  for (Selection selection : selections) {

   Job job = new Job();

   job.setJobTitle(newId);

   job.setJobUser(selection.getSelectionUser());

       job.setJobTime(TimeUtils.getNowSqlTime());

   jobDao.add(job);

  }

 }

 // 携带最新用户数据到人员管理页面

 request.setAttribute("titles", titleDao.getTitlesByUserId(loginUser.getUserId()));

 // 跳转到管理后台页

 request.setAttribute("childPage", "titleManage.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

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

2.5 作业题目编辑功能的实现

作业编辑,仅仅允许修改作业的题目,比较简单,此处就不再一一列举了。


3. 总结

如果感觉不熟悉,还是需要手工去把代码敲一敲加深理解的。

相关文章
|
1月前
|
Java 容器
【学习笔记】Jsp与Servlet技术
【学习笔记】Jsp与Servlet技术
65 0
|
3月前
|
供应链 前端开发 Java
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
这篇文章通过一个服装库存管理系统的实例,展示了在Spring Boot项目中使用Ajax、JSON、layui、MVC架构和iframe等技术,涵盖了注册登录、权限管理、用户管理、库存管理等功能,并提供了系统运行环境和技术要求的详细说明。
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
|
3月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
28 0
|
3月前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
39 0
|
3月前
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
|
5月前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
104 12
|
5月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
107 10
|
5月前
|
缓存 小程序 前端开发
Java服务器端技术探秘:Servlet与JSP的核心原理
【6月更文挑战第23天】Java Web开发中的Servlet和JSP详解:Servlet是服务器端的Java小程序,处理HTTP请求并响应。生命周期含初始化、服务和销毁。创建Servlet示例代码展示了`doGet()`方法的覆盖。JSP则侧重视图,动态HTML生成,通过JSP脚本元素、声明和表达式嵌入Java代码。Servlet常作为控制器,JSP处理视图,遵循MVC模式。优化策略涉及缓存、分页和安全措施。这些技术是Java服务器端开发的基础。
61 9
|
5月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
【6月更文挑战第23天】Java Web开发中,Servlet和JSP是构建动态Web应用的基础。Servlet处理逻辑,JSP专注展示。示例展示了Servlet如何通过`request.setAttribute`传递数据给JSP渲染。JSP自定义标签提升页面功能,如创建`WelcomeTag`显示欢迎消息。Servlet过滤器,如`CacheControlFilter`,用于预处理数据或调整响应头。这些集成和扩展技术增强了应用效率、安全性和可维护性,是Java服务器端开发的关键。
65 7
|
5月前
|
前端开发 安全 Java
Java服务器端开发实战:利用Servlet和JSP构建动态网站
【6月更文挑战第23天】**Servlet和JSP在Java Web开发中扮演关键角色。Servlet处理业务逻辑,管理会话,JSP则结合HTML生成动态页面。两者协同工作,形成动态网站的核心。通过Servlet的doGet()方法响应请求,JSP利用嵌入式Java代码创建动态内容。实战中,Servlet处理数据后转发给JSP展示,共同构建高效、稳定的网站。虽然新技术涌现,Servlet与JSP仍为Java Web开发的基石,提供灵活且成熟的解决方案。**
72 8