JavaWeb项目总结,超市订单管理系统

参考的狂神的Web综合项目,新加了一个邮件验证功能,以及多次验证失败群发管理邮件报警功能,邮件创建/发送的创建工具类参数比较多,所以采用了构造模式实现,其他都与狂神的代码大同小异 (或许SQL写得不一样(滑稽))
主要还是复习MVC的思想和JavaWeb那些内容吧。

结构:

JavaWeb项目总结,超市订单管理系统_第1张图片
由上图可知,总共可以分为5个模块

  1. Dao层负责直接与数据库进行交互
  2. Servlet层负责调用Dao层相应方法执行一些业务逻辑操作。
  3. POJO层数据库中数据对应的实体类
  4. Servlet层衔接视图与模型
  5. jsp…这个不是我写的,照搬的狂神的

代码实现就不讲,详细的去看狂神的视频,主要学习了一种思路吧(俺上面那个箭头画反了,应该从底到顶,写一个小模块测一下)。
最后讲一下构造器模式:
由于俺加那个邮件功能的工具类参数有点多,所以用的建造者设计模式。
建造者模式俺的理解就是,对一个类的构建(实例化)交给一个建造者来创建,需要设置什么参数就告诉它要做什么工作,然后完活。
《Effective Java》建议超过4参数的情况下就可以考虑使用构造者模式,主要就是类的构成复杂(简单的说参数多),或者参数的初始化的顺序影响类的功能的情况下就考虑使用它了。

public class SendEmail extends Thread {
    private List<String> toEmail;
    private String subject;
    private String content;
    private String fromEmail;
    private String fromEmailPassword;
    public static class Builder{
        private List<String> toEmail;
        private String subject;
        private String content;
        private String fromEmail;
        private String fromEmailPassword;
        public  SendEmail build(){
            return new SendEmail(this);
        }
        public Builder toEmail(List<String> list){
            this.toEmail = list;
            return this;
        }
        public Builder subject(String subject){
            this.subject = subject;
            return this;
        }
        public Builder content(String content){
            this.content = content;
            return this;
        }
        public Builder fromEmail(String fromEmail){
            this.fromEmail = fromEmail;
            return this;
        }
        public Builder fromEmailPassword(String fromEmailPassword){
            this.fromEmailPassword = fromEmailPassword;
            return this;
        }

    }
    .........无关代码
//使用代码
        SendEmail email = new SendEmail.Builder().
        content("建造者模式的尝试").fromEmail("").
                fromEmailPassword("").subject("建造者模式").
                toEmail(list).build();

目前没解决的问题:
1.js乱码:

  1. 设置为UTF-8和js文本本身设置为UTF-8(无效)
  2. 将js文本设置为带dom的utf-8然后设置为GB2312(非动态传参有效)
InternetAddress[] objects = (InternetAddress[])toEmail.
stream().map(t->{
            try {
                return new InternetAddress(t);
            } catch (AddressException e) {
                e.printStackTrace();
            }
            return null;
        }).toArray();

这段代码会报类型强转异常,提示ObjectInternetAddress不在一个loder中,具体为啥不在一个加载器中就不行就不得而知了。

Exception in thread "Thread-0" java.lang.ClassCastException: 
class [Ljava.lang.Object; cannot be converted to class 
[Ljavax.mail.internet.InternetAddress;
 ([Ljava.lang.Object;
  located in the loader 'bootstrap' Module of java.base; 
  [Ljavax.mail.internet.InternetAddress; 
  located in the unnamed module of the loader "app")

项目地址,有需要的自取

你可能感兴趣的:(JavaWeb)