|
|
package web.servlet.teacher;
|
|
|
// 声明该类所属的包名,表明这个Servlet类位于"web.servlet.teacher"包下,通过包结构对类进行组织管理,有助于清晰地划分项目中的不同功能模块,方便代码的维护与扩展。
|
|
|
|
|
|
import domain.SelectCourse;
|
|
|
import service.SelectCourseService;
|
|
|
import service.impl.SelectCourseServiceImpl;
|
|
|
// 导入相关的类和接口,用于处理选课相关的业务逻辑。
|
|
|
// "domain.SelectCourse":通常是一个领域模型类,用于封装与选课相关的各种属性,比如学生所选课程的具体信息(课程编号、学生编号等)以及对应的成绩等内容,代表了业务领域中的选课这一概念实体在代码中的体现。
|
|
|
// "service.SelectCourseService":这是定义了选课业务操作的服务接口,规定了可以在选课业务方面进行的各种操作方法,例如查询学生选课信息、更新选课记录等,是对选课业务逻辑抽象出来的统一操作入口。
|
|
|
// "service.impl.SelectCourseServiceImpl":是"SelectCourseService"接口的具体实现类,里面包含了实际与数据库或其他数据源进行交互的代码,以此来真正完成接口中定义的那些选课业务操作,比如按照特定条件查询数据库获取选课信息等具体实现细节就在这个类中。
|
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
import javax.servlet.annotation.WebServlet;
|
|
|
import javax.servlet.http.HttpServlet;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.io.IOException;
|
|
|
import java.util.List;
|
|
|
// 导入Java EE中Servlet相关的基础类和接口以及处理输入输出异常、使用集合框架所需的类。
|
|
|
// "ServletException":用于处理Servlet在执行过程中出现的各种异常情况,比如配置错误、业务逻辑执行出错、请求处理过程中遇到不符合预期的情况等,都可以通过抛出这个异常来进行相应的处理。
|
|
|
// "WebServlet":是一个注解类,用于将一个普通的Java类标注为Servlet,并可以通过它配置该Servlet对应的访问路径等相关属性,方便Web容器(像Tomcat等应用服务器)识别并对其进行管理和调度,决定何时以及如何调用这个Servlet来处理客户端的请求。
|
|
|
// "HttpServlet":是所有基于HTTP协议的Servlet的基类,它提供了处理HTTP请求的基础架构和一系列默认方法,开发人员通过重写它里面的特定方法(如doGet、doPost等)来实现具体的业务逻辑,以应对不同类型的HTTP请求。
|
|
|
// "HttpServletRequest":主要用于获取客户端发送过来的HTTP请求中包含的各种详细信息,例如请求参数(通过类似getParameter方法获取表单提交的数据等)、请求头信息(如浏览器相关的一些标识信息等)以及其他和请求相关的内容,是在Servlet中处理请求数据的关键入口。
|
|
|
// "HttpServletResponse":负责向客户端发送HTTP响应,包括设置响应的状态码(比如200表示成功、404表示未找到资源等)、响应头(设置如内容类型、缓存控制等相关的头部信息)以及返回具体的响应内容(如HTML页面、JSON数据等),用于构建完整的返回给客户端的信息。
|
|
|
// "IOException":用于处理输入输出相关的异常情况,例如在读取或写入文件、进行网络传输(像从数据库获取数据或者向客户端发送响应数据等涉及到数据传输的操作)等过程中如果出现问题,就会抛出这个异常,方便进行相应的错误处理。
|
|
|
// "List":是Java集合框架中的接口,表示一个有序的、可包含重复元素的集合,在这里用于存放查询出来的多个选课相关信息(以SelectCourse对象的形式),方便后续对这些数据进行遍历、处理以及传递给其他组件(如JSP页面用于展示等)。
|
|
|
|
|
|
@WebServlet("/findStudentCourseScoreServlet")
|
|
|
// 使用@WebServlet注解将当前类标记为一个Servlet,并指定这个Servlet对应的访问路径为"/findStudentCourseScoreServlet"。意味着当客户端通过浏览器等工具,向服务器发起的HTTP请求的URL路径为该指定路径时,Web容器(服务器端负责管理Servlet的环境,如Tomcat)就会找到并调用这个Servlet类来处理相应的请求。
|
|
|
public class FindStudentCourseScoreServlet extends HttpServlet {
|
|
|
// 定义了一个名为"FindStudentCourseScoreServlet"的类,它继承自"HttpServlet"类,这表明该类是一个专门用于处理HTTP请求的Servlet,借助继承"HttpServlet"类的机制,可以方便地重写其中相应的方法(比如doGet、doPost等)来实现具体的、与业务相关的请求处理逻辑,在这个类中主要是实现查询学生课程成绩相关的业务逻辑。
|
|
|
|
|
|
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
|
|
// 重写了"HttpServlet"类中的"doPost"方法,此方法专门用于处理HTTP POST请求。当客户端通过POST方式(例如表单提交等情况常用POST方式向服务器发送数据)访问此Servlet对应的"/findStudentCourseScoreServlet"这个URL路径时,Web容器会自动调用这个重写后的方法来处理相应的请求。
|
|
|
// 方法中的两个参数"request"和"response"分别代表客户端发送过来的请求信息以及用于向客户端返回响应信息的对象,它们在整个请求处理过程中起着关键作用,通过它们可以获取请求数据、设置响应内容等。
|
|
|
|
|
|
request.setCharacterEncoding("utf-8");
|
|
|
// 设置请求的字符编码为"utf-8",这一步非常重要,因为客户端发送过来的数据可能包含各种字符(特别是如果有中文等非ASCII字符时),如果不设置正确的编码,在获取请求参数等数据时可能会出现乱码问题,无法正确解析数据内容。通过设置为"utf-8"编码格式,能确保后续从请求中获取到的参数等数据可以按照正确的编码规范进行解析,保障数据的准确性和完整性,在这里对于获取要查询成绩的课程编号等关键信息尤为重要。
|
|
|
|
|
|
String cid = request.getParameter("cid");
|
|
|
// 从客户端发送的HTTP请求中获取名为"cid"的参数值,按照业务逻辑推测,这个参数值通常代表要查询成绩的课程的编号,它是后续进行查询学生该课程成绩相关操作的重要依据,将获取到的课程编号赋值给"cid"变量,方便后续在代码中使用这个变量来调用相应的业务方法进行查询操作。
|
|
|
|
|
|
System.out.println(cid);
|
|
|
// 将获取到的课程编号(cid)输出打印到控制台,这一般是出于调试目的,方便开发人员在运行程序时查看实际接收到的课程编号是否符合预期,比如检查前端页面传递过来的参数是否正确,或者在排查程序出现问题(例如查询不到数据等情况)时,通过查看这个参数值来确认是否是传入参数的问题,有助于快速定位和解决问题。
|
|
|
|
|
|
SelectCourseService service = new SelectCourseServiceImpl();
|
|
|
// 创建一个"SelectCourseServiceImpl"类的实例,通过多态的方式将其赋值给"SelectCourseService"接口类型的变量"service"。这样做的好处是,代码后续调用"SelectCourseService"接口中定义的方法时,实际上执行的是"SelectCourseServiceImpl"类中对这些方法的具体实现代码,使得代码的结构更加灵活,便于替换不同的实现方式或者进行单元测试等操作,在这里就是为了调用选课业务相关的方法来查询学生选课及成绩信息。
|
|
|
|
|
|
List<SelectCourse> scs = service.findStudentSelectedCourseByCourseId(cid);
|
|
|
// 调用"service"(实际上就是"SelectCourseServiceImpl"的实例)的"findStudentSelectedCourseByCourseId"方法,将前面获取到的课程编号"cid"作为参数传入进去。这个方法应该是在数据库或者其他存储选课信息的数据源中,依据传入的课程编号来查询出选修该课程的所有学生的选课信息(这些信息会被封装到"SelectCourse"对象中,可能包含学生的学号、所选课程的具体信息以及对应的成绩等内容),并以"SelectCourse"对象组成的列表形式返回,然后将查询到的学生选课信息列表赋值给"scs"变量,方便后续对这些查询结果进行进一步的处理和展示。
|
|
|
|
|
|
for (int i = 0; i < scs.size(); i++) {
|
|
|
System.out.println(scs.get(i));
|
|
|
}
|
|
|
// 使用循环遍历查询到的学生选课信息列表(scs),通过调用"scs.get(i)"方法获取列表中的每一个"SelectCourse"对象,并将其输出打印到控制台。同样,这一步大概率也是出于调试目的,方便开发人员查看查询出来的每一条选课信息是否准确完整,例如查看学生的信息、课程信息以及成绩等是否符合预期,有助于在出现数据问题时排查是查询逻辑错误还是数据源本身数据有误等情况,进一步辅助定位和解决问题。
|
|
|
|
|
|
request.setAttribute("scs", scs);
|
|
|
// 使用"request"对象的"setAttribute"方法,将查询到的学生选课信息列表(scs)保存到请求对象中,设置的属性名为"scs",这样在后续将请求转发到JSP页面等操作时,在目标JSP页面中就可以通过这个属性名("scs")来获取到该选课信息列表,进而可以在页面中进行数据展示等相关操作,例如通过JSP的标签或者脚本语言将这些选课信息以表格等形式展示给用户查看。
|
|
|
|
|
|
request.getRequestDispatcher("/WEB-INF/teacher/findSelectCourseListByCourseId.jsp").forward(request, response);
|
|
|
// 获取一个请求转发器,将当前请求转发到"/WEB-INF/teacher/findSelectCourseListByCourseId.jsp"这个JSP页面(通常该JSP页面会用于展示查询到的学生选课及成绩信息等相关内容,可能会通过循环遍历获取到的选课信息列表,然后将学生的学号、课程名、成绩等信息以合适的HTML元素展示出来)。这样服务器端会接着处理转发后的请求,并向客户端返回相应的JSP页面经过渲染后的内容,整个过程对于客户端来说就像是一次完整的请求响应过程,客户端浏览器地址栏中的URL并不会发生改变,通过这种转发机制可以顺利地进行后续的页面展示操作,将查询到的学生课程成绩等信息呈现给用户查看。
|
|
|
}
|
|
|
|
|
|
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
|
|
// 重写了"HttpServlet"类中的"doGet"方法,此方法主要用于处理HTTP GET请求,例如当客户端通过在浏览器地址栏直接输入URL或者点击链接等方式(通常这些情况会发起GET请求)访问此Servlet对应的路径时,Web容器会调用这个方法来处理相应的请求。
|
|
|
|
|
|
doPost(request, response);
|
|
|
// 在"doGet"方法中直接调用了"doPost"方法,这意味着对于GET请求的处理逻辑和POST请求的处理逻辑是完全一样的,也就是不管客户端是通过POST方式还是GET方式访问这个Servlet对应的路径,都会按照"doPost"方法里所定义的逻辑去进行相应的处理,比如获取课程编号、查询选课信息、输出调试信息以及转发请求到JSP页面等操作都会同样执行,这样做可能是在业务逻辑上对于这两种请求方式获取和展示学生课程成绩信息的要求是一致的,所以进行了这样的复用处理。
|
|
|
}
|
|
|
} |