首页 > 编程语言 >JavaWeb之Servlet入门版教务系统(四)

JavaWeb之Servlet入门版教务系统(四)

时间:2023-08-12 20:00:59浏览次数:49  
标签:sysEmail JavaWeb 教务 req id int Servlet email 邮件

之前分享了教务系统中的系统管理模块的具体内容,相信或多或少都收获到了一些东西,今天继续讲述教务系统下的邮件系统模块。首先说一下我写的时候的思路,该模块下主要包含写邮件、收邮件、发邮件、草稿箱、垃圾箱等五个主要功能,用户通过登录系统后,可以在收件箱中看到其他用户给自己发送的邮件信息,也可以点击写邮件进行邮件编写点击保存到草稿箱中统一管理,草稿箱里会展示出保存后的所有编辑的邮件信息,可以单击抄送按钮跳转到发件箱回显邮件信息并填写收件人的电子邮件地址进行发送操作,也可以点击删除按钮把邮件删除到垃圾箱中,在垃圾箱中进行彻底的删除操作。设计的邮件系统的业务流程就这样,接下来还是一一简述操作流程。

首先还是要准备好数据库中的表,sys_email表的建表语句如下:


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_email
-- ----------------------------
DROP TABLE IF EXISTS `sys_email`;
CREATE TABLE `sys_email`  (
  `email_id` int NOT NULL AUTO_INCREMENT COMMENT '邮件id',
  `email_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '邮件标题',
  `email_context` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '邮件内容',
  `email_state` int NULL DEFAULT NULL COMMENT '邮件状态',
  `email_user_id` int NULL DEFAULT NULL COMMENT '邮件创建者id',
  `logical_delete_state` int NULL DEFAULT 1 COMMENT '逻辑删除字段,1代表未逻辑删除,0代表逻辑删除了',
  PRIMARY KEY (`email_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

过程中会和用户表中的信息关联所以需要一张中间表来维护关系,sys_user_email建表语句如下:


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_user_email
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_email`;
CREATE TABLE `sys_user_email`  (
  `user_email_id` int NOT NULL AUTO_INCREMENT COMMENT '用户邮件Id',
  `user_id` int NULL DEFAULT NULL COMMENT '发件用户ID',
  `email_id` int NULL DEFAULT NULL COMMENT '邮件Id',
  `rec_user_id` int NULL DEFAULT NULL COMMENT '收件用户ID',
  PRIMARY KEY (`user_email_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

下面开始实现功能,首先是收件箱展示用户自己收到别人发送过来的邮件,效果图如下:

JavaWeb之Servlet入门版教务系统(四)_邮件系统模块

会显示发件人的姓名和邮件内容,可以选择已读修改邮件状态或者删除邮件到垃圾箱里。控制层拿到前端页面传递过来的用户id去关系表里面匹配,把所有匹配的数据全封装到集合中返回给页面进行展示。收件箱列表展示核心代码参考如下:

/**
     * 根据用户id收件箱显示自己的邮件列表
     * @param req
     * @param resp
     * @return
     */
    public String list(HttpServletRequest req, HttpServletResponse resp){
        //获取当前用户id
        HttpSession session = req.getSession();
        SysUser user1 = (SysUser)session.getAttribute("USER");
        int User_id = user1.getUser_id();
        //使用当前用户id与关系表中的接收者id匹配,拿出关系表对象
        List<SysUserEmail> sysUserEmailList = sysUserEmailService.queryByUserId(User_id);
        List<InBoxInfo> infos = new ArrayList<>();
        //取出集合中的邮件id和user_id去查询邮件内容和发件人姓名
        for (SysUserEmail sysUserEmail : sysUserEmailList) {
            int email_id = sysUserEmail.getEmail_id();//关系表中对应的邮件id
            int user_id = sysUserEmail.getUser_id();//关系表中对应的发送者id
            SysEmail sysEmail = emailService.queryEmailByEmailId(email_id);
            SysUser sysUser = sysUserService.queryUserById(user_id);
            String name = sysUser.getName();
            String email_title = sysEmail.getEmail_title();
            String email_context = sysEmail.getEmail_context();
            int email_state = sysEmail.getEmail_state();
            InBoxInfo inBoxInfo = new InBoxInfo(name,email_title,email_context,email_state);
            infos.add(inBoxInfo);
        }
        //返回数据
        req.setAttribute("infos",infos);
        // 跳转页面
        return "view/email/inboxEmail.jsp";
    }

其次是写邮件功能,效果图如下:

JavaWeb之Servlet入门版教务系统(四)_实战开发_02

通过输入邮件标题和邮件内容然后保存到草稿箱中,主要就是通过获取前端页面上输入的内容通过邮件对象封装起来存入数据即可。写邮件核心参考代码如下:

  /**
     * 写件箱写邮件
     * @param req
     * @param resp
     * @return
     */
    public String writeEmail(HttpServletRequest req, HttpServletResponse resp){

        String title = req.getParameter("title");
        String context = req.getParameter("context");
        String state = req.getParameter("state");
        Integer email_state = Integer.valueOf(state);

        HttpSession session = req.getSession();
        SysUser user1 = (SysUser)session.getAttribute("USER");
        int User_id = user1.getUser_id();
        //默认设置成未读

        // 封装数据
        SysEmail sysEmail = new SysEmail();
        sysEmail.setEmail_title(title);
        sysEmail.setEmail_context(context);
        sysEmail.setEmail_state(email_state);
        sysEmail.setEmail_user_id(User_id);

        // 添加邮件
        int n = emailService.addEmail(sysEmail);
        //拿出的用户邮件对象,判断存放的使用者id是否与当前user_id相等
        SysUserEmail sysUserEmail = new SysUserEmail();
        List<SysEmail> sysEmailList =  emailService.queryAll();
        // 添加关系表之前需要进行删除
        int number =  sysUserEmailService.deleteUserEmailByUser_id(User_id);
        for (SysEmail email : sysEmailList) {
            if(email.getEmail_user_id() == User_id){
                sysUserEmail.setUser_id(User_id);
                sysUserEmail.setEmail_id(email.getEmail_id());
               int num =  sysUserEmailService.addUserEmail(sysUserEmail);
            }
        }
        return "view/email/writeEmail.jsp";
    }

然后是草稿箱显示,效果图如下:

JavaWeb之Servlet入门版教务系统(四)_邮件系统模块_03

草稿箱接收写件箱保存过来的邮件信息,在该界面可以跳转到发件箱或者删除邮件到垃圾箱在该界面隐藏该条邮件信息。这里也是根据登录时存储的session对象里的用户id来查询并显示具体的信息。草稿显示核心代码参考截图如下:

JavaWeb之Servlet入门版教务系统(四)_教务系统_04

JavaWeb之Servlet入门版教务系统(四)_邮件系统模块_05

在然后是垃圾箱显示,效果图如下:

JavaWeb之Servlet入门版教务系统(四)_实战开发_06

垃圾箱显示之前模块里操作删除过的邮件信息,点击彻底删除后该邮件信息会从数据库中彻底清除。这里也是根据登录时存储的session对象里的用户id来查询并显示具体的信息。彻底删除就是获取邮件的id,然后通过邮件id匹配关系表删除,然后再删除邮件,最后刷新页面更新数据。垃圾箱核心参考代码截图:

JavaWeb之Servlet入门版教务系统(四)_邮件系统模块_07

JavaWeb之Servlet入门版教务系统(四)_实战开发_08

最后是较为复杂的发件箱功能,效果图如下:

JavaWeb之Servlet入门版教务系统(四)_实战开发_09

JavaWeb之Servlet入门版教务系统(四)_邮件系统模块_10

如果直接点击左边框栏的发件箱就会弹出像第一张效果图显示的一样是空白的发送邮件页面需要手动填写邮件信息(相当于写邮件功能),如果是点击草稿箱里的抄送到发件箱就会像第二张效果图显示的一样会回显之前编辑好的邮件内容,填写好对应收件人的电子邮件,点击发送就可以发送给对方了。发件箱核心代码如下:

/**
     * 点击发件箱直接跳转发件箱界面
     * @param req
     * @param resp
     * @return
     */
    public String outboxEmail(HttpServletRequest req, HttpServletResponse resp){
        return "view/email/outboxEmailUI.jsp";
    }

    /**
     * 草稿箱抄送到发件箱界面
     * @param req
     * @param resp
     * @return
     */
    public String outboxEmailUI(HttpServletRequest req, HttpServletResponse resp){
        //接收数据
        String email_idStr = req.getParameter("id");
        System.out.println(email_idStr);
        Integer email_id = Integer.valueOf(email_idStr);
        // 根据获取的邮件id查找邮件对象
        SysEmail sysEmail = emailService.queryEmailByEmailId(email_id);
        System.out.println("发件信息" + sysEmail);
        req.setAttribute("sysEmail",sysEmail);
        return "view/email/outboxEmail.jsp";
    }
 /**
     * 发送邮件
     * @param req
     * @param resp
     * @return
     */
    public String postEmail(HttpServletRequest req, HttpServletResponse resp){
        HttpSession session = req.getSession();
        SysUser user1 = (SysUser)session.getAttribute("USER");
        int User_id = user1.getUser_id();
        //接收数据

        //通过邮件号获取接收者id
        String emailAddress = req.getParameter("emailAddress");
        SysUser emailReceiver = sysUserService.queryUserByEmail(emailAddress);
        //拿到当前邮件对象
        String email_idStr = req.getParameter("email_id");
        //判断是否存在邮件id,若不存在就添加
        if(email_idStr == ""){
            String email_title = req.getParameter("email_title");
        String email_context = req.getParameter("email_context");

            //默认设置成未读

            // 封装数据
            SysEmail sysEmail = new SysEmail();
            sysEmail.setEmail_title(email_title);
            sysEmail.setEmail_context(email_context);
            sysEmail.setEmail_state(0);
            sysEmail.setEmail_user_id(User_id);
            sysEmail.setLogical_delete_state(1);
            // 添加邮件
            int n = emailService.addEmail(sysEmail);

            //拿出的用户邮件对象,判断存放的使用者id是否与当前user_id相等
            SysUserEmail sysUserEmail = new SysUserEmail();
            List<SysEmail> sysEmailList =  emailService.queryAll();
            // 添加关系表之前需要进行删除
            int number =  sysUserEmailService.deleteUserEmailByUser_id(User_id);
            for (SysEmail email : sysEmailList) {
                if(email.getEmail_user_id() == User_id){
                    sysUserEmail.setUser_id(User_id);
                    sysUserEmail.setEmail_id(email.getEmail_id());
                    sysUserEmail.setRec_user_id(emailReceiver.getUser_id());
                    int num =  sysUserEmailService.addUserEmail(sysUserEmail);
                }
            }
        }
       else{
            Integer email_id = Integer.valueOf(email_idStr);
            SysEmail sysEmail = emailService.queryEmailByEmailId(email_id);
            //把两个对象信息添加到关系表中
            SysUserEmail sysUserEmail = new SysUserEmail();
            sysUserEmail.setEmail_id(sysEmail.getEmail_id());
            sysUserEmail.setUser_id(User_id);
            sysUserEmail.setRec_user_id(emailReceiver.getUser_id());
            sysUserEmailService.addUserEmail(sysUserEmail);
        }

        return "view/email/outboxEmailUI.jsp";
    }

到此该教务系统中的基础版邮件系统就完成了。

标签:sysEmail,JavaWeb,教务,req,id,int,Servlet,email,邮件
From: https://blog.51cto.com/u_15101214/7061155

相关文章

  • JavaWeb之Servlet入门版教务系统(三)
    本次要分享的内容是之前教务系统中系统管理模块下的权限列表功能,包括对权限信息进行增删改查以及对不同的角色身份进行的不同权限分配(重点讲解)。首先还是需要使用mysql数据库准备一张权限表,建表语句如下:DROPTABLEIFEXISTS`sys_permission`;CREATETABLE`sys_permission`(......
  • @webServlet注解失效原因
    原因一在web.xml文件中配置<web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://x......
  • Servlet过滤器
    过滤器的基本概念Servlet过滤器从字面上的字意理解为经过一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。Filter是在......
  • tomcat10 javaweb webapp jstl的maven依赖库配置
    1.在pom.xml中配置,可能不是最新版,在idea中可能会报黄线,但是可以正常使用<dependencies><!--https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api--><dependency><groupId>jakarta.servlet</groupId>......
  • 解密SpringBoot3.0:构建易维护的JavaWeb应用
    SpringBoot3.0最新深入浅出从入门到项目实战,突出Web应用痛点解决方案SpringBoot已经成为Java开发中最流行的框架之一,它提供了一种快速构建、易于扩展的方式,使开发人员能够更加专注于业务逻辑而不是繁琐的配置。而最新的SpringBoot3.0版本将进一步改善开发体验,并提供更多的解决方......
  • 老杜 JavaWeb 讲解(二十) ——Listener监听器
    (十八)Listener监听器引子:静态代码块packagecom.zwm.javaweb.servlet;/***@author猪无名*@date2023/8/81347*discription:*/publicclasstest2{//静态代码块在类加载时执行,并且只执行一次。//这个语法很简单,但什么时候用?很疑惑//假如,你希......
  • JavaWeb短信验证的实现方法
    JavaWeb短信验证的实现方法短信验证是现代应用程序中常用的一种用户身份验证方式。在JavaWeb开发中,我们可以通过一些简单而有效的方法实现短信验证功能。本文将介绍如何使用Java编程语言来实现JavaWeb短信验证。JavaWeb短信验证的实现方法首先,我们需要一个短信服务提供商,比如阿......
  • JavaWebSocket心跳机制详解
    JavaWebSocket心跳机制详解WebSocket是一种在Web浏览器和服务器之间进行全双工通信的协议,它提供了一种简单而强大的方式来实现实时数据传输。在使用WebSocket时,心跳机制是非常关键的,它能够保持连接的稳定性并及时发现连接的异常。本文将详细解释JavaWebSocket心跳机制的实现原理......
  • Servlet课程学习
    Servlet 最近暑假学习了servlet的技术,想一边学习一边记录下。先了解下servlet是什么?JavaServlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。使用Servlet,您可以收集来自网页......
  • 老杜 JavaWeb 讲解(十九) ——Filter过滤器
    (十七)Filter过滤器Filter过滤器当前的OA项目存在什么缺陷?DeptServlet、EmpServlet、OrderServlet。每一个Servlet都是处理自己相关的业务。在这些Servlet执行之前都是需要判断用户是否登录了。如果用户登录了,可以继续操作,如果没有登录,需要用户登录。这段判断用户是否登录......