javaweb学习29:网站注册发送邮件

2022/4/6 17:19:18

本文主要是介绍javaweb学习29:网站注册发送邮件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

javaweb学习29:网站注册发送邮件

  • 网站注册发送邮件:

    • 为了提高效率,使用多线程;

    • 网页三秒原则;

    • 脚手架模型;

    • 多线程的start() 和 run()方法的区别;

      • start()开启一个多线程;

      • run()只是一个普通方法;

       

 

  • 多线程总结:

    • 1。start():

      先来看看Java API中对于该方法的介绍:

      使该线程开始执行;Java 虚拟机调用该线程的 run 方法。

      结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。

      多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。

      用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体中的代码执行完毕而直接继续执行后续的代码。通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里的run()方法 称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。

      2。run():

      同样先看看Java API中对该方法的介绍:

      如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

      Thread 的子类应该重写该方法。

      run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

      3。总结:

      调用start方法方可启动线程,而run方法只是thread类中的一个普通方法调用,还是在主线程里执行。

 

 

  • 代码案例:jsp注册页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>注册</title>
      </head>
      <body>
    ​
        <form action="${pageContext.request.contextPath}/RegisterServlet.do" method="post">
         用户名:<input type="text"name="username"/><br/>
          密码:<input type="password" name="pwd"><br/>
          邮箱:<input type="text" name="email"><br/>
          <input type="submit" value="注册">
    ​
        </form>
      </body>
    </html>
    ​
  • 代码案例:jsp注册成功页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        ${message}
    </body>
    </html>
  • 代码案例:邮件发送

    /**
     * 用户体验:网站三秒原则:
     *      打开一个页面,需要在3秒内;
     *
     * 怎么实现:
     *      使用多线程解决用户体验;(异步处理)
     */
    public class Sendmail extends Thread   {
    ​
        private String from ="xxx@qq.com";//发送人
        private String username ="xxx@qq.com";//邮箱的用户名
        private String password ="xxx";//邮箱的秘密
        private String host ="smtp.qq.com";//发送邮件的服务器地址
    ​
    ​
        private User user;
    ​
        public Sendmail(User user){
            this.user=user;
        }
    ​
    ​
        @Override
        public void run() {
    ​
            try {
                Properties prop=new Properties();
                prop.setProperty("mail.host",host);//设置QQ邮箱服务器
                prop.setProperty("mail.transport.protocol","smtp");//邮件发送协议
                prop.setProperty("mail.smtp.auth","true");//需要验证用户名和密码
    ​
                //关于QQ邮箱,还要设置SSL加密,加上以下代码即可
                MailSSLSocketFactory sf= null;
                sf = new MailSSLSocketFactory();
    ​
                sf.setTrustAllHosts(true);
                prop.put("mail.smtp.ssl.enable","true");
                prop.put("mail.smtp.ssl.socketFactory",sf);
    ​
                //使用javamail发送邮件的5个步骤
    ​
                //1,创建定义整个应用程序所需的环境信息的Session对象;
                //QQ才有,其他邮箱不需要
                Session session=Session.getDefaultInstance(prop, new Authenticator() {
                    public PasswordAuthentication getPasswordAuthentication() {
                        //发送人邮件用户名,授权码
                        return new PasswordAuthentication(username,password);//授权码
                    }
                });
                //开启Session的DEBUG模式,这样就可以查看到程序发送Email的运行状态
                session.setDebug(true);
                //2,通过session得到transport对象
                Transport ts=session.getTransport();
                //3,使用邮箱的用户名和授权码连上邮件服务器
                ts.connect(host,username,password);
                //4,创建邮件:写邮件
                MimeMessage message = new MimeMessage(session);//注意需要传递session
                //发送人
                message.setFrom(new InternetAddress(from));
                //收件人
                message.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getEmail()));
                //邮件主体
                message.setSubject("用户注册的邮件");
                String info="恭喜您注册成功,您的用户名为:"+user.getName()+",您的秘密:"+user.getPwd()+",请妥善保管!";
                //邮件内容
                message.setContent(info,"text/html;charset=utf-8");
                message.saveChanges();
    ​
                //5,发送
                ts.sendMessage(message,message.getAllRecipients());
                //6,关闭连接
                ts.close();
    ​
            } catch (Exception e) {
                e.printStackTrace();
            }
    ​
        }
    }
    ​
  • 代码案例:servlet

    ​
    /**
     * 脚手架模型
     */
    ​
    public class RegisterServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //接收用户请求
            String username = request.getParameter("username");
            String pwd = request.getParameter("pwd");
            String email = request.getParameter("email");
    ​
            User user = new User(username, pwd, email);
    ​
            //用户注册成功之后,给用户发送邮件
            //我们使用线程来专门发送邮件,防止出现耗时,和网站注册人数过多的情况
            Sendmail send = new Sendmail(user);
            send.start();
    ​
            //注册用户
            request.setAttribute("message","注册成功,邮件已经发送成功,请查收");
            request.getRequestDispatcher("info.jsp").forward(request,response);
    ​
        }
    ​
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ​
        }
    }
    ​
  • 代码案例: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_4_0.xsd"
             version="4.0">
        
        <servlet>
            <servlet-name>RegisterServlet</servlet-name>
            <servlet-class>com.demo.servlet.RegisterServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>RegisterServlet</servlet-name>
            <url-pattern>/RegisterServlet.do</url-pattern>
        </servlet-mapping>
    </web-app>

     

 

 

 

 

 

 



这篇关于javaweb学习29:网站注册发送邮件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程