文章目录

  • 作业要求
  • 使用工具
  • 项目启动
  • 创建项目
  • 新建项目
  • 引入依赖
  • 创建webapp文件
  • 配置文件
  • 项目结构
  • 数据库设计
  • Mybatis整合
  • JSP整合
  • AOP应用
  • 引入依赖
  • ServiceAspect
  • 项目展示
  • 项目源码地址


作业要求

  • 用户为学生和老师
  • 用户可以注册登录
  • 学生可以查看作业、提交作业、更新作业
  • 老师可以查看学生信息、查看学生作业、查看已发布作业、发布作业、添加学生

使用工具

  • 软件:IDEA
  • 语言:Java

项目启动

创建项目

新建项目

新建步骤如下图所示:

javaee作业系统 javaee管理系统大作业_服务器


javaee作业系统 javaee管理系统大作业_javaee作业系统_02


javaee作业系统 javaee管理系统大作业_mysql_03


javaee作业系统 javaee管理系统大作业_javaee作业系统_04


javaee作业系统 javaee管理系统大作业_xml_05

引入依赖

以下是项目会用到的一些依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.3</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
</dependency>

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.5</version>
</dependency>

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.9.5</version>
</dependency>

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
创建webapp文件

根据下图提示进行操作,手动添加webapp目录:

javaee作业系统 javaee管理系统大作业_xml_06

javaee作业系统 javaee管理系统大作业_mysql_07


随后在webapp文件夹下创建WEB-INF文件夹,该文件夹下创建web.xml文件,内容为:

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<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_4_0.xsd"
         version="4.0">
</web-app>
配置文件

在application.properties文件中设置数据库连接信息和mybatis配置信息以及JSP文件的位置

spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/javaee?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username = root
spring.datasource.password = 123456

mybatis.type-aliases-package=com.example.demo.model
mybatis.config-locations=classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:mapper/*.xml

spring.mvc.view.prefix=/WEB-INF/views/

mybatis-config.xml内容如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- mybatis全局设置 -->
    <settings>
        <!--使用数据库自增id-->
        <setting name="useGeneratedKeys" value="true" />

        <setting name="useColumnLabel" value="true" />

        <!-- 开启驼峰命名规范-->
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
</configuration>
项目结构

设置完成之后,项目的目录结构如下:

javaee作业系统 javaee管理系统大作业_spring_08

数据库设计

Teacher

javaee作业系统 javaee管理系统大作业_mysql_09


Student

javaee作业系统 javaee管理系统大作业_mysql_10


Homework

javaee作业系统 javaee管理系统大作业_服务器_11


StudentHomework

javaee作业系统 javaee管理系统大作业_spring_12

Mybatis整合

以Homework为例
首先是Model实体层,使用lombok减少get()、set()方法的编写。

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Builder
public class Homework {

    private int homework_id;

    private String homework_title;

}

其次是mapper层

import com.example.demo.model.Homework;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface HomeworkMapper{

    String getTitlebyId(int homework_id);

    void save(Homework h);
    
    List<Homework> findAll();

    Homework findById(int homeworkId);
    
}

mapper对应SQL语句在对应mapper.xml文件中

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.mapper.HomeworkMapper">

    <insert id="save" parameterType="Homework">
        insert into homework (homework_id,homework_title) value (#{homework_id}, #{homework_title})
    </insert>

    <select id="findById" resultType="com.example.demo.model.Homework">
      select * from homework where homework_id = #{homeworkId}
    </select>

    <select id="findAll" resultType="com.example.demo.model.Homework">
        select * from homework
    </select>

</mapper>

service实现层

package com.example.demo.service;

import com.example.demo.mapper.HomeworkMapper;
import com.example.demo.model.Homework;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class HomeworkService {

    @Autowired
    final HomeworkMapper homeworkMapper;

    public HomeworkService(HomeworkMapper homeworkMapper){
        this.homeworkMapper = homeworkMapper;
    }

    //得到全部已发布的作业
    public  List<Homework> selectAllHomework() {
        return homeworkMapper.findAll();
    }

    //向数据库中添加老师新发布的作业
    public  boolean addHomework(Homework h) {
        try{
            //判断该作业是否存在
            boolean ishomework = false;
            List<Homework> hlist = homeworkMapper.findAll();
            for (Homework ho : hlist) {
                if (ho.getHomework_id() == h.getHomework_id()) {
                    ishomework = true;
                    break;
                }
            }
            if(ishomework){
                return false;
            }else{
                homeworkMapper.save(h);
                return true;
            }
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    //通过作业编号得到作业标题
    public String getTitlebyId(int homeworkId) {
       Homework homework=homeworkMapper.findById(homeworkId);
       return homework.getHomework_title();
    }
}

Controller连接前端进行调用

package com.example.demo.controller;

import com.example.demo.model.Homework;
import com.example.demo.service.HomeworkService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;


@Controller
public class HomeworkController {

    @Autowired
    private final HomeworkService homeworkService;

    public HomeworkController(HomeworkService homeworkService) {
        this.homeworkService = homeworkService;
    }

    @RequestMapping(value = "/allHomework",method= RequestMethod.GET)
    public ModelAndView allHomework(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //DataResponse response = new DataResponse();
        List<Homework> list = homeworkService.selectAllHomework();
        ModelAndView mav = new ModelAndView("allHomework.jsp");
        mav.addObject("homeworklist", list);
        return mav;
    }

    @RequestMapping("publishHomework")
    public String publishHomework(){
        return "publishHomework.jsp";
    }
    
    //发布新作业
    @RequestMapping(value = "publishH")
    public void publishHomework(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        String str = new String(req.getParameter("homework_title"));
        Homework newHomework = Homework.builder()
                .homework_id(Integer.parseInt(req.getParameter("homework_id")))
                .homework_title(str)
                .build();

        resp.setContentType("text/html;charset=UTF-8");

        if (newHomework.getHomework_title().equals("")) {

            //显示弹窗并且当关闭弹窗后跳到指定页面
            resp.getWriter().write("<script>alert('作业标题不得为空!网页将跳转到发布界面!'); window.location='publishHomework'; window.close();</script>");
            resp.getWriter().flush();
        } else {
            if (homeworkService.addHomework(newHomework)) {
                //显示弹窗并且当关闭弹窗后跳到指定页面
                resp.getWriter().write("<script>alert('发布成功!网页将跳转到首页!'); window.location='teachermenu'; window.close();</script>");
                resp.getWriter().flush();
            } else {
                //显示弹窗并且当关闭弹窗后跳到指定页面
                resp.getWriter().write("<script>alert('发布失败,请检查后再发布!网页将跳转到发布界面!'); window.location='publishHomework'; window.close();</script>");
                resp.getWriter().flush();
            }
        }
    }
    //所有作业
    @RequestMapping(value = "/sallHomework",method = RequestMethod.GET)
    public ModelAndView doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Homework> list = homeworkService.selectAllHomework();
        ModelAndView mav = new ModelAndView("sallHomework.jsp");
        mav.addObject("homeworklist", list);
        return mav;
    }
}

在启动时,需要加上mapper扫描注释,否则可能扫描不到mapper文件。

@SpringBootApplication
@MapperScan(basePackages = "com.example.demo.mapper")
public class DemoApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

这样就实现了mybatis在spring boot中的整合,其重点是mapper文件和mapper.xml文件

JSP整合

整合JSP首先需要向pom.xml文件添加依赖,这是因为需要使用JSP引擎,而spring boot内置tomcat没有此依赖

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

之后就可以在Controller层进行JSP调用,下面给出一个示例:
注意注解要写@Controller

@Controller
public class HomeworkController {

    @Autowired
    private final HomeworkService homeworkService;

    public HomeworkController(HomeworkService homeworkService) {
        this.homeworkService = homeworkService;
    }

    @RequestMapping(value = "allHomework",method= RequestMethod.GET)
    public ModelAndView allHomework() {
        
        List<Homework> list = homeworkService.selectAllHomework();
        ModelAndView mav = new ModelAndView("allHomework.jsp");
        mav.addObject("homeworklist", list);
        return mav;
    }

    @RequestMapping("publishHomework")
    public String publishHomework(){
        return "publishHomework.jsp";
    }
}

启动项目之后就可以输入网址进行访问啦~

AOP应用

引入依赖

pom.xml文件引入依赖

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.5</version>
</dependency>

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.9.5</version>
</dependency>
ServiceAspect
package com.example.demo.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.sql.Connection;

@Aspect
@Component
public class ServiceAspect {

    @Pointcut("execution(* com.example.demo.service..*.*(..))")
    public void service(){}

    @Before("service()")
    public void beforeService(JoinPoint joinPoint){
        System.out.println("Before Service");
    }

    @After("service()")
    public void afterService(){
        System.out.println("After Service");
    }

   @Around("service()")
   public Object aroundService(ProceedingJoinPoint joinPoint) throws Throwable {
        Object object=null;
        try{
            System.out.println("Before Around Service");
            object=joinPoint.proceed();
            System.out.println("After Around Service. "+object);
        }catch(Throwable throwable){
            throwable.printStackTrace();
        }
       return object;
    }
}

项目展示

注册界面

javaee作业系统 javaee管理系统大作业_spring_13


** 登录界面**

javaee作业系统 javaee管理系统大作业_javaee作业系统_14


教师主界面

javaee作业系统 javaee管理系统大作业_javaee作业系统_15


查询学生信息

javaee作业系统 javaee管理系统大作业_xml_16


查询学生作业

javaee作业系统 javaee管理系统大作业_javaee作业系统_17


添加学生

javaee作业系统 javaee管理系统大作业_mysql_18


查询作业

javaee作业系统 javaee管理系统大作业_javaee作业系统_19


发布作业

javaee作业系统 javaee管理系统大作业_服务器_20


学生主界面

javaee作业系统 javaee管理系统大作业_javaee作业系统_21

学生查询作业

javaee作业系统 javaee管理系统大作业_服务器_22


学生提交作业

如果此次作业已存在,那么会更新此次作业。

javaee作业系统 javaee管理系统大作业_javaee作业系统_23