开发基于Mysql+Servlet+JSP的作业管理系统(四)

开发基于Mysql+Servlet+JSP的作业管理系统(四)

一、构建Spring MVC项目

1.创建maven项目

(1)创建新项目,如图:

创建maven工程
(2)文件命名、选择路径:

命名、路径

2.添加Spring MVC框架

(1)项目右键→ Add Framework Support

add framework support
(2)添加 Spring MVC 框架

Spring MVC

(3)将 lib 文件夹移至 WEB-INF 文件夹下:

目录
(4)将 lib 文件添加到依赖中:

添加

二、配置Tomcat

(1) Run → Edit Configuration

Edit
Local
Fix

三、移入原项目部分文件

(1) main 右键 → new → Directory 分别新建 java、resources 文件夹:

java
(2)分别将 Jdbc.package 及 Model.package 移至 java 文件夹下;
将 hikari.properties 移至 resources 文件夹下;
将 css、fonts、images、js 移至 webapp 文件夹下;
在 java 文件夹下 新建 Controller.package,文件目录如下:
在这里插入图片描述

四、修改.xml文件(代码中包含注释)

1.pom.xml

在 pom.xml 文件中添加依赖(分别用于 Servlet 相关、数据库连接池、el表达式、springframework 相关 jar 包):

 <!--servlet-->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
</dependency>

 <!--数据库连接池-->
<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
  <version>3.4.2</version>
</dependency>

<!--https://mvnrepository.com/artifact/org.slf4j/slf4j-api-->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.22</version>
</dependency>

<!--https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12-->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.22</version>
</dependency>

<!--https://mvnrepository.com/artifact/org.slf4j/slf4j-simple-->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.22</version>
</dependency>

 <!--el表达式-->
<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

<dependency>
  <groupId>taglibs</groupId>
  <artifactId>standard</artifactId>
  <version>1.1.2</version>
</dependency>

<dependency>
  <groupId>org.jetbrains</groupId>
  <artifactId>annotations-java5</artifactId>
  <version>RELEASE</version>
  <scope>compile</scope>
</dependency>

<!--springframework 相关 jar 包-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>5.2.3.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.2.3.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.2.3.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>5.2.3.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>5.2.3.RELEASE</version>
</dependency>

2.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <display-name>Archetype Created Web Application</display-name>

    <!--指定运行后出现界面-->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <!--配置SpringMVC DispatcherServlet-->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!--配置dispatcher.xml作为mvc的配置文件-->
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!--把applicationContext.xml加入到配置文件中-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!--过滤器,防止前端向后端传输数据出现中文乱码-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

3.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--base-package由目录结构决定-->
    <context:component-scan base-package="java"/>
</beans>

4.dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--此文件负责整个mvc中的配置-->

    <!--启用spring的一些annotation -->
    <context:annotation-config/>

    <!-- 配置注解驱动 可以将request参数与绑定到controller参数上 -->
    <mvc:annotation-driven/>

    <!--静态资源映射-->
    <!--本项目把静态资源放在了webapp目录下,资源映射如下-->
    <mvc:resources mapping="/css/**" location="css/"/>
    <mvc:resources mapping="/fonts/**" location="fonts/"/>
    <mvc:resources mapping="/images/**" location="images/"/>
    <mvc:resources mapping="/js/**" location="js/"/>

    <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了) 使用JSP-->
    <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/><!--设置JSP文件的目录位置-->
        <property name="suffix" value=".jsp"/>
        <property name="exposeContextBeansAsAttributes" value="true"/>
    </bean>

    <!--自动扫描装配 (base-package由包名决定-->
    <context:component-scan base-package="Controller"/>
</beans>

五、通过Controller实现前后端交互及跳转

1.jsp 向 controller 传递数据

(1) 通过 form 表单(以注册为例):

index.jsp

<!-- index 为对应 controller 的注释中的 value 值 -->
<form action="index" method="get">
  <div class="form-group has-feedback feedback-left">
    <input type="text" placeholder="请输入您的用户名" class="form-control" name="login_name" id="login_name" />
  </div>
  <div class="form-group has-feedback feedback-left">
    <input type="text" placeholder="请输入您的身份(老师/学生)" class="form-control" id="login_identity" name="login_identity" />
  </div>
  <div class="form-group">
    <a class="btn btn-w-xl btn-default" type="button" href="register.jsp">注册</a>
    <input class="btn btn-w-xl btn-primary" type="submit" value="登录" />
  </div>
</form>

IndexController.class

@Controller
public class IndexController {
    @RequestMapping(value = "index")
    public String Login(@RequestParam("login_name") String login_name,
                        @RequestParam("login_identity") String login_identity,
                        Model model,
                        HttpServletRequest request) {

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        if(login_identity.equals("学生")) {
            request.getSession().setAttribute("student_name", login_name);

            Student student = (Student) applicationContext.getBean("student");
            student.setStudent_name(login_name);

            StudentJdbc studentJdbc = (StudentJdbc) applicationContext.getBean("student_jdbc");
            List<Homework> homework_list = studentJdbc.QueryHomework(student);
            request.setAttribute("homework_list", homework_list);

            return "student_submit";
        }else {
            request.getSession().setAttribute("teacher_name", login_name);

            Teacher teacher = (Teacher) applicationContext.getBean("teacher");
            teacher.setTeacher_name(login_name);

            TeacherJdbc teacherJdbc = (TeacherJdbc) applicationContext.getBean("teacher_jdbc");
            List<Homework> homework_list = teacherJdbc.QueryHomework(teacher);
            model.addAttribute("homework_list", homework_list);

            return "teacher_homework";
        }
    }
}

(2)通过 url 传值(以查看已提交名单为例):

teacher_homework.jsp

<a type="button" class="btn btn-info btn-xs" href="homework_submit_list?homework_title=${list.homework_title}">查看已提交名单</a>

HomeworkSubmitListController.class

@Controller
public class HomeworkSubmitListController {
    @RequestMapping(value = "homework_submit_list")
    public String getSubmitList(@RequestParam("homework_title") String homework_title,
                                Model model,
                                HttpServletRequest request) {

        String teacher_name = (String) request.getSession().getAttribute("teacher_name");

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Teacher teacher = (Teacher) applicationContext.getBean("teacher");
        teacher.setTeacher_name(teacher_name);

        TeacherJdbc teacherJdbc = (TeacherJdbc) applicationContext.getBean("teacher_jdbc");
        List<Submit> submit_list = teacherJdbc.QuerySubmit(homework_title, teacher);
        model.addAttribute("submit_list", submit_list);

        return "homework_student";
    }
}

2.controller 向 jsp 传递数据

controller 通过 return “jsp名称” 直接跳转到相应 jsp 界面,并返回数据

以由老师作业列表跳转至相应作业已完成名单为例:

HomeworkSubmitListController.class

@Controller
public class HomeworkSubmitListController {
    @RequestMapping(value = "homework_submit_list")
    public String getSubmitList(@RequestParam("homework_title") String homework_title,
                                Model model,
                                HttpServletRequest request) {

        String teacher_name = (String) request.getSession().getAttribute("teacher_name");

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Teacher teacher = (Teacher) applicationContext.getBean("teacher");
        teacher.setTeacher_name(teacher_name);

        TeacherJdbc teacherJdbc = (TeacherJdbc) applicationContext.getBean("teacher_jdbc");
        List<Submit> submit_list = teacherJdbc.QuerySubmit(homework_title, teacher);
        model.addAttribute("submit_list", submit_list);

        return "homework_student";
    }
}

homework_student.jsp

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="utf-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:forEach items="${submit_list}" var="list" varStatus="status">
    <tr style="text-align: center">
        <th scope="row" style="text-align: center">${status.count}</th>
        <td>${list.student_name}</td>
        <td>
            <a type="submit" class="btn btn-primary btn-xs" data-toggle="modal" href="homework_content?homework_title=${list.homework_title}&student_name=${list.student_name}">查看作业</a>
        </td>
    </tr>
</c:forEach>

六、使用Spring IoC管理实例

(1)将 WEB-INF 文件夹下的 applicationContext.xml 复制粘贴到 resources 文件夹下。

(2)将 main/java/Model 文件夹重命名为 Bean。

(3)在 applicationContext.xml 文件中添加如下内容:

<bean id="homework" class="Bean.Homework" />
<bean id="student" class="Bean.Student" />
<bean id="submit" class="Bean.Submit" />
<bean id="teach" class="Bean.Teach" />
<bean id="teacher" class="Bean.Teacher" />

(4)以 Student.class 为例,通过 bean 创建一个实例,并调用其中函数:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
<!-- getBean("student"), student 与 Student类的 id 一致 -->
Student student = (Student) applicationContext.getBean("student");
student.setStudent_name(register_name);

七、JDBC操作类注册为bean

在 applicationContext.xml 文件中添加如下内容,通过与步骤六同样的方法使用 JDBC 操作类:

<bean id="student_jdbc" class="Jdbc.StudentJdbc" />
<bean id="teacher_jdbc" class="Jdbc.TeacherJdbc" />
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值