参考的狂神的Web综合项目,新加了一个邮件验证功能,以及屡次验证失败群发管理邮件报警功能,邮件创建/发送的创建工具类参数比较多,所以采用了构造形式实现,其他都与狂神的代码大同小异 (或许SQL写得不一样(滑稽))。
主要还是复习MVC的思想和JavaWeb那些内容吧。
构造:
由上图可知,总共可以分为5个模块
Dao层负责直接与数据库停止交互Servlet层负责调用Dao层相应方法执行一些业务逻辑操作。POJO层数据库中数据对应的实体类Servlet层衔接视图与模型jsp…这个不是我写的,照搬的狂神的
代码实现就不讲,详细的去看狂神的视频,主要学习了一种思路吧(俺上面那个箭头画反了,应该从底到顶,写一个小模块测一下)。
最后讲一下构造器形式:
由于俺加那个邮件功能的工具类参数有点多,所以用的建造者设计形式。
建造者形式俺的理解就是,对一个类的构建(实例化)交给一个建造者来创建,需要设置什么参数就告诉它要做什么工作,然后完活。
《Effective Java》建议超越4参数的情况下就可以考虑使用构造者形式,主要就是类的构成复杂(简单的说参数多),或者参数的初始化的顺序影响类的功能的情况下就考虑使用它了。- publicclassSendEmailextendsThread{private List<String> toEmail;private String subject;private String content;private String fromEmail;private String fromEmailPassword;publicstaticclassBuilder{private List<String> toEmail;private String subject;private String content;private String fromEmail;private String fromEmailPassword;public SendEmail build(){returnnewSendEmail(this);}public Builder toEmail(List<String> list){this.toEmail = list;returnthis;}public Builder subject(String subject){this.subject = subject;returnthis;}public Builder content(String content){this.content = content;returnthis;}public Builder fromEmail(String fromEmail){this.fromEmail = fromEmail;returnthis;}public Builder fromEmailPassword(String fromEmailPassword){this.fromEmailPassword = fromEmailPassword;returnthis;}}.........无关代码
复制代码- //使用代码
- SendEmail email =newSendEmail.Builder().content("建造者形式的尝试").fromEmail("").fromEmailPassword("").subject("建造者形式").toEmail(list).build();
复制代码 目前没处置的问题:
1.js乱码:
设置为UTF-8和js文本自身设置为UTF-8(无效)将js文本设置为带dom的utf-8然后设置为GB2312(非动态传参有效)
- InternetAddress[] objects =(InternetAddress[])toEmail.stream().map(t->{try{returnnewInternetAddress(t);}catch(AddressException e){
- e.printStackTrace();}return null;}).toArray();
复制代码 这段代码会报类型强转异常,提示Object和InternetAddress不在一个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")
复制代码 项目地址,有需要的自取 |
|