亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于JavaMail的Web郵件驗(yàn)證系統(tǒng)設(shè)計(jì)

        2018-02-26 09:45:22卜凡港
        電子技術(shù)與軟件工程 2018年16期
        關(guān)鍵詞:電子郵件

        卜凡港

        摘要

        當(dāng)今社會(huì),電子郵件的應(yīng)用非常廣泛,例如在某網(wǎng)站注冊(cè)了一個(gè)賬戶(hù),自動(dòng)發(fā)送一封歡迎郵件,通過(guò)郵件找回密碼,自動(dòng)批量發(fā)送活動(dòng)信息等。但這些應(yīng)用不可能和我們自己平時(shí)發(fā)郵件一樣,先打開(kāi)瀏覽器,登錄郵箱,創(chuàng)建郵件再發(fā)送。為了更好的做好用戶(hù)注冊(cè)的安全性,保證有效用戶(hù)數(shù),以及對(duì)產(chǎn)品接下來(lái)的相關(guān)信息的推廣,本文將首先簡(jiǎn)單介紹一些相關(guān)的術(shù)語(yǔ)和協(xié)議,并通過(guò)Java代碼來(lái)創(chuàng)建電子郵件,并連接郵件服務(wù)器發(fā)送郵件,以及郵件鏈接的驗(yàn)證,激活注冊(cè)用戶(hù)的相關(guān)功能,并對(duì)注冊(cè)時(shí)產(chǎn)生的一定量高并發(fā)進(jìn)行研究。該研究對(duì)項(xiàng)目開(kāi)發(fā)者學(xué)習(xí)和實(shí)現(xiàn)服務(wù)器端與郵箱服務(wù)器之間通信功能有一定的參考價(jià)值。

        【關(guān)鍵詞】JavaMail 電子郵件 Web 高并發(fā)

        隨著互聯(lián)網(wǎng)領(lǐng)域各項(xiàng)技術(shù)迅速地發(fā)展,電子郵箱已經(jīng)成為現(xiàn)代人常用的一種聯(lián)系工具,并且涉及的領(lǐng)域也越來(lái)越廣泛,個(gè)人郵箱有時(shí)可以看作是一個(gè)身份認(rèn)證的標(biāo)識(shí),可以用來(lái)進(jìn)行身份確認(rèn),以及進(jìn)行相關(guān)的聯(lián)系活動(dòng)?,F(xiàn)在有很多WEB開(kāi)發(fā)都需要JavaMail,例如,用戶(hù)注冊(cè)后,網(wǎng)站發(fā)送一封激活郵件進(jìn)行驗(yàn)證;用戶(hù)過(guò)生日,系統(tǒng)發(fā)送生日祝福郵件;將最新活動(dòng)和優(yōu)惠以郵件的形式告知會(huì)員等等。這些應(yīng)用都需要開(kāi)發(fā)人員使用編程發(fā)送郵件。本次設(shè)計(jì)就是基于JavaMail實(shí)現(xiàn)用戶(hù)注冊(cè)時(shí),通過(guò)郵件對(duì)賬戶(hù)進(jìn)行認(rèn)證的完善登陸系統(tǒng)。通過(guò)郵箱激活注冊(cè)賬戶(hù),既保證了對(duì)相關(guān)賬戶(hù)的安全性,也拓展了信息推廣的途徑,這方式已經(jīng)成為了很多IT公司用戶(hù)注冊(cè)必經(jīng)步驟。整個(gè)設(shè)計(jì)采用B/S架構(gòu),在設(shè)計(jì)過(guò)程中,我們首先搭建并配置郵箱服務(wù)器端和郵件客戶(hù)端,數(shù)據(jù)庫(kù)采用MySQL,在數(shù)據(jù)庫(kù)中建立相應(yīng)數(shù)據(jù)表,導(dǎo)入相應(yīng)的JavaMail的jar包,在eclipse平臺(tái)上引用相應(yīng)的API,并考慮到一定的高并發(fā)性,采取多線程,用JAVA語(yǔ)言進(jìn)行開(kāi)發(fā)郵箱驗(yàn)證功能。我們?cè)谧詈蟮膶?shí)驗(yàn)結(jié)果檢測(cè)過(guò)程中,會(huì)檢測(cè)分析到系統(tǒng)成功實(shí)現(xiàn)郵件發(fā)送、接收,以及點(diǎn)擊鏈接后的激活功能,本次系統(tǒng)的設(shè)計(jì)也將對(duì)研究人員在用戶(hù)安全性設(shè)計(jì)方面有一定的幫助。

        1 JavaMail

        JavaMail是由SUN公司發(fā)布,提供給開(kāi)發(fā)者處理電子郵件相關(guān)的編程接口。JavaMail支持常用的SMTP、POP3、TMAP等郵件協(xié)議,開(kāi)發(fā)人員使用JavaMail編寫(xiě)郵件程序時(shí),無(wú)需考慮底層的通信細(xì)節(jié)(Socket),可以更加有效地實(shí)施郵件傳輸操作,同時(shí)JavaMail所提供的API也能夠支持創(chuàng)建出各種復(fù)雜MIME格式的郵件內(nèi)容。JavaMail的API結(jié)構(gòu)圖如圖1所示。

        JavaMail API提供了消息、地址和頭文件等基本的郵件系統(tǒng)對(duì)象,即使針對(duì)不同的郵件協(xié)議,不同的廠商,都可以從JavaMail所提供的一系列接口中找到相應(yīng)的實(shí)現(xiàn)類(lèi),從而滿(mǎn)足開(kāi)發(fā)者多方面需求。

        2 郵件收發(fā)協(xié)議

        協(xié)議是用來(lái)規(guī)定雙方應(yīng)該滿(mǎn)足什么樣的格式,回什么樣格式的數(shù)據(jù),才可以進(jìn)行正常通訊的一個(gè)規(guī)定。當(dāng)我們?cè)卩]箱服務(wù)器上申請(qǐng)空間,進(jìn)行郵件的傳輸接收,都是默認(rèn)了一種通訊協(xié)議,以便通訊的正常進(jìn)行。如果讓JavaMail與郵件服務(wù)器通信,就需要相應(yīng)的協(xié)議支持,該部分稱(chēng)為服務(wù)提供者接口,也就是JavaMail自身需要的協(xié)議支持。

        2.1 SMTP協(xié)議

        SMTP,即簡(jiǎn)單傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,控制信件的中轉(zhuǎn)方式,屬于TCP/IP協(xié)議簇,幫助每臺(tái)計(jì)算機(jī)在發(fā)送或中轉(zhuǎn)信件時(shí)找到下一個(gè)目的地。通過(guò)SMTP所指定的服務(wù)器,可以把E-mail在較短時(shí)間內(nèi)寄到收件人的服務(wù)器上,通常把處理用戶(hù)SMTP請(qǐng)求的郵件服務(wù)器稱(chēng)為SMTP服務(wù)器,SMTP服務(wù)器則是遵循SMTP協(xié)議的發(fā)送郵件服務(wù)器,用來(lái)發(fā)送或中轉(zhuǎn)電子郵件,SMTP服務(wù)器的默認(rèn)端口號(hào)為25。

        2.2 POP3協(xié)議

        POP3,即郵局協(xié)議版本3,主要用于支持使用客戶(hù)端遠(yuǎn)程管理在服務(wù)器上的郵件。如果用戶(hù)想從郵箱服務(wù)器中獲得或接受一封電子郵件的話,連上郵件服務(wù)器后,也需要遵循一定的通訊格式,而POP3協(xié)議就是用來(lái)定義這種通訊格式。通常把處理POP3請(qǐng)求的服務(wù)器稱(chēng)為POP3服務(wù)器,它的默認(rèn)端口號(hào)為110。

        3 郵件驗(yàn)證方案分析

        移動(dòng)互聯(lián)網(wǎng)迅速發(fā)展,社交聯(lián)系得越密切,社交手段越多樣化,而電子郵箱也是當(dāng)今社交重要方式之一,所以JavaMail在產(chǎn)品開(kāi)發(fā)中必不可少,而了解郵箱收發(fā)過(guò)程也是很多開(kāi)發(fā)人員容易忽視的一點(diǎn)。通過(guò)對(duì)郵件收發(fā)過(guò)程,郵件驗(yàn)證邏輯,以及并發(fā)量的解決方案分析可以使系統(tǒng)設(shè)計(jì)得更加完善。

        3.1 由卜箱收發(fā)過(guò)程分析

        郵箱收發(fā)過(guò)程遵循之前所講解的郵件協(xié)議,并根據(jù)相應(yīng)協(xié)議所對(duì)應(yīng)的服務(wù)器進(jìn)行通信,具體收發(fā)過(guò)程如圖2所示。

        假設(shè)現(xiàn)在有兩個(gè)郵箱,我們想讓163郵箱向126郵箱發(fā)送一封郵件,讓163郵箱賬戶(hù)和密碼通過(guò)客戶(hù)端進(jìn)行鏈接,客戶(hù)端可以是網(wǎng)頁(yè)版或者是軟件版,登陸到郵箱服務(wù)器上,連接郵箱服務(wù)器中的SMTP服務(wù)器上,然后進(jìn)行寫(xiě)郵件操作,將寫(xiě)好的郵件同,163郵箱的SMTP服務(wù)器連接到126郵箱的SMTP服務(wù)器上,把這封郵件發(fā)送到對(duì)方郵箱服務(wù)器的SMTP上,于是126郵箱將會(huì)把這封郵件存儲(chǔ)到其內(nèi)在的存儲(chǔ)空間里面。收郵件過(guò)程,用戶(hù)通過(guò)注冊(cè)時(shí)的用戶(hù)名和密碼,連接到相應(yīng)郵箱服務(wù)器中的POP3服務(wù)器上,找到這封郵件,并返回到客戶(hù)端,用戶(hù)就能看到對(duì)方發(fā)送過(guò)來(lái)的郵件,整個(gè)過(guò)程反之亦然。

        3.2 驗(yàn)證邏輯分析

        在設(shè)計(jì)過(guò)程中,在數(shù)據(jù)表中設(shè)置state字段,0為激活,1為非激活狀態(tài),當(dāng)用戶(hù)第一次注冊(cè)后,數(shù)據(jù)表中傳入相應(yīng)字段,state處于非激活狀態(tài),然后發(fā)送一封激活郵件到對(duì)應(yīng)的注冊(cè)郵箱,用戶(hù)點(diǎn)擊郵件中的激活鏈接后,state由非激活狀態(tài)變?yōu)榧せ顮顟B(tài)。如圖3所示。

        郵件驗(yàn)證的邏輯,相對(duì)而言較為簡(jiǎn)單,在實(shí)現(xiàn)注冊(cè)功能時(shí),服務(wù)器產(chǎn)生激活碼,并根據(jù)開(kāi)發(fā)者的配置,給注冊(cè)用戶(hù)發(fā)送含有激活碼鏈接的激活郵件,通過(guò)點(diǎn)擊鏈接,改變state的取值從而實(shí)現(xiàn)用戶(hù)激活,但如果遇上系統(tǒng)新開(kāi)放注冊(cè),這將會(huì)產(chǎn)生一定量的并發(fā)量,若一定時(shí)間段內(nèi),用戶(hù)一窩蜂地進(jìn)行注冊(cè)操作,將有可能造成SMTP服務(wù)器產(chǎn)生拒絕421等狀態(tài),接下來(lái)將對(duì)并發(fā)量的解決方案進(jìn)行分析。

        3.3 并發(fā)量分析

        由于注冊(cè)功能不會(huì)像電商秒殺功能一樣,瞬間有上千萬(wàn)甚至上億的并發(fā)量,所以考慮節(jié)約資源,且可抗住一定量的并發(fā)量,我們可將注冊(cè)頁(yè)面放入CDN,將發(fā)送功能采用多線程進(jìn)行封裝,從而達(dá)到一定量的抗并發(fā)效果。具體多線程實(shí)現(xiàn)邏輯如圖4所示。

        本次設(shè)計(jì)采用ThreadPoolExecutor線程池來(lái)實(shí)現(xiàn)多線程,并在線程池中設(shè)定同時(shí)運(yùn)行的線程數(shù)量,線程池維護(hù)線程所允許的空閑時(shí)間的單位,以及緩沖隊(duì)列,從而達(dá)到對(duì)線程池的參數(shù)的設(shè)置以及優(yōu)化,在參數(shù)設(shè)置基礎(chǔ)上,多的任務(wù)可以進(jìn)行排隊(duì),從而可以實(shí)現(xiàn)了多線程的JavaMail并發(fā)。

        4 Web郵件系統(tǒng)編碼實(shí)現(xiàn)

        本套系統(tǒng)的實(shí)現(xiàn)采用的是MVC框架結(jié)構(gòu),這是目前相對(duì)主流且成熟的框架,我們首先在MySQL數(shù)據(jù)庫(kù)中建立數(shù)據(jù)庫(kù)和相應(yīng)的用戶(hù)表,配置C3P0數(shù)據(jù)池鏈接,導(dǎo)入所需要的Jar包,根據(jù)MVC結(jié)構(gòu),依次從實(shí)體類(lèi),DAO層,再到業(yè)務(wù)層,最后編寫(xiě)注冊(cè)Servlet和激活Servlet實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)功能。

        4.1 DAO層的實(shí)現(xiàn)

        用戶(hù)注冊(cè),首先調(diào)用數(shù)據(jù)訪問(wèn)層中定義的方法,通過(guò)JDBC將數(shù)據(jù)存入到數(shù)據(jù)庫(kù)用戶(hù)表中,state狀態(tài)為。值,并隨機(jī)生成一串編碼,并通過(guò)程序生成含有激活碼的字符串鏈接,然后再給用戶(hù)發(fā)送一封含有該激活碼鏈接的郵件,此時(shí)通過(guò)DAO層與數(shù)據(jù)庫(kù)的交互,部分代碼如下:

        Connection conn=DBUtil.getConnectionn;

        String sql =-insert into user(usemame,email,password,state,code)values(?,?,?,?,?)";

        PreparedStatement pstmt=conn.prepareStatement(sql);

        pstmt.setString(1,user.getUsemame());

        pstmt.setString(2,user.getEmail());

        pstmt.setString(3,user.getPasswordo);

        pstmt.setlnt(4,user.getState());

        pstmt.setString(5,user.getCode());

        num=pstmt.executeUpdateo;

        DBUtil.close(conn,pstmt,null);

        DBUtil是封裝好的數(shù)據(jù)庫(kù)連接類(lèi),通過(guò)編寫(xiě)一條SQL語(yǔ)句,經(jīng)預(yù)編譯進(jìn)行處理,然后一一對(duì)應(yīng)進(jìn)行傳值,從而實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的交互。

        4.2 業(yè)務(wù)層的實(shí)現(xiàn)

        根據(jù)WC結(jié)構(gòu),我們將業(yè)務(wù)層首先規(guī)定相應(yīng)方法的接口,再在業(yè)務(wù)層中定義實(shí)現(xiàn)類(lèi),通過(guò)繼承這些接口,實(shí)現(xiàn)業(yè)務(wù)層中定義的相應(yīng)方法。在注冊(cè)功能方面,利用正則表達(dá)式驗(yàn)證郵箱是否符合郵箱格式,若符合生成激活碼,把相應(yīng)數(shù)據(jù)存入到數(shù)據(jù)庫(kù)中,保存成功后通過(guò)線程方式給用戶(hù)發(fā)送一封郵件,再通過(guò)調(diào)用DAO層中激活用戶(hù)的方法實(shí)現(xiàn)激活功能,其中部分代碼如下所示:

        String code=CodeUtil.generateUniqueCode();

        User user=new User(usemame,email,password,0,code);

        UserDao userDao=newUserDaolmpl();

        if(userDao.save(user)>0){

        new Thread(newMailUtil(email,code)).start();

        return true;

        }

        在抗并發(fā)上,整個(gè)事務(wù)邏輯是通過(guò)調(diào)用線程池接口,開(kāi)啟線程,實(shí)現(xiàn)用戶(hù)的注冊(cè)和激活功能,并在一定程度上,可以抗住一定量的用戶(hù)注冊(cè)產(chǎn)生的并發(fā)量。

        4.3 Servlet的實(shí)現(xiàn)

        本次設(shè)計(jì)中,為了實(shí)現(xiàn)Web應(yīng)用程序,不收到cGI程序性能的限制,我們通過(guò)采用JavaServlet來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中的JDBCAPI進(jìn)行訪問(wèn),本設(shè)計(jì)涉及到的最主要的兩部分Servlet是實(shí)現(xiàn)用戶(hù)注冊(cè)Servlet和激活Servlet,我們需將其首先繼承 Httpservlet類(lèi),并復(fù)寫(xiě)doGet和doPost方法,其中部分代碼如下:

        String userName=request.getParameter("usemame");

        String password=request.getParameter("password");

        String email=request.getParameter("email");

        UserService userService=newUserServiceImpl();

        if(userService.doRegister(userName,password,email)){

        request.setAttribute("msg","注冊(cè)成功,請(qǐng)登錄郵箱激活賬號(hào)");

        }else{

        request.setAttribute("msg","注冊(cè)失敗,請(qǐng)檢查相關(guān)信息")

        }

        request.getRequestDispatcher("/result.jsp").forward(request,response);

        在doPost方法中接收數(shù)據(jù),將數(shù)據(jù)進(jìn)行封裝,調(diào)用業(yè)務(wù),實(shí)現(xiàn)業(yè)務(wù)實(shí)現(xiàn)類(lèi),將用戶(hù)信息和激活碼傳遞過(guò)去,根據(jù)激活碼查詢(xún)用戶(hù),更改用戶(hù)狀態(tài),將狀態(tài)0變?yōu)?,同時(shí)將激活碼在相應(yīng)數(shù)據(jù)設(shè)置為NULL,然后調(diào)用request的getRequestDispatcher方法進(jìn)行頁(yè)面跳轉(zhuǎn)。

        4.4 JavaMail多線程的實(shí)現(xiàn)

        創(chuàng)建連接對(duì)象javax.mail.session,然后創(chuàng)建郵件對(duì)象javax.mail.Message,再發(fā)送一封激活郵件,某些郵箱服務(wù)器要求SMTP連接需要使用SSL安全認(rèn)證,為了提高安全性,郵箱支持SSL連接,也可以自己開(kāi)啟,如果無(wú)法連接郵件服務(wù)器,則需仔細(xì)查看控制臺(tái)打印的日志信息,如果有類(lèi)似“連接失敗,要求SSL安全連接”等錯(cuò)誤,可以重新設(shè)置SMTP服務(wù)器端口,部分代碼如下:

        Message message=newMimeMessage(session);

        message.setFrom(newIntemetAddress(from));

        message.addRecipient(Message.RecipientType.TO,new IntemetAddress(email));

        message.setSubject("賬號(hào)激活");

        String content="

        這是一封激活郵件,激活請(qǐng)點(diǎn)擊以下鏈接

        http://localhost:8080/RegisterDemo/ActiveServlet?code="+code+ "

        ";

        message.setContent(content,"text/html;charset=UTF-8");

        Transport.send(message);

        System.out.println("郵件成功發(fā)送!");

        先指定發(fā)件人電子郵箱,指定發(fā)送郵件的主機(jī),獲取系統(tǒng)屬性,設(shè)置郵件服務(wù)器,打開(kāi)認(rèn)證,若是QQ郵箱,還需要通過(guò)MailSSLSocketFactory獲取相關(guān)屬性,當(dāng)這些步驟完成后,我們將進(jìn)行最后的發(fā)驗(yàn)證郵件操作,獲取默認(rèn)session對(duì)象,創(chuàng)建郵件對(duì)象,設(shè)置發(fā)件人,設(shè)置郵件主題,設(shè)置郵件內(nèi)容,將要發(fā)送的功能封裝成Runnable,最后進(jìn)行發(fā)送郵件。

        5 測(cè)試

        本套設(shè)計(jì)系統(tǒng)采用的是Tomcat服務(wù)器進(jìn)行運(yùn)行,首先我們?cè)谧?cè)頁(yè)面中輸入用戶(hù)名,注冊(cè)郵箱,和密碼。注冊(cè)完后,數(shù)據(jù)庫(kù)表中會(huì)有相應(yīng)的用戶(hù)信息,state值為0,并我們將在注冊(cè)郵箱中收到一封激活郵件,如圖5所示。

        當(dāng)點(diǎn)擊郵件激活碼鏈接后,會(huì)進(jìn)行頁(yè)面跳轉(zhuǎn),并提示成功進(jìn)行激活,然后跳轉(zhuǎn)到登陸頁(yè)面進(jìn)行登陸操作,此時(shí)注冊(cè)用戶(hù)已成為有效用戶(hù),我們可以再觀察數(shù)據(jù)庫(kù)用戶(hù)表中的相關(guān)數(shù)據(jù),如圖6所示。

        從圖6中我們首先可以看出注冊(cè)時(shí)的數(shù)據(jù)已經(jīng)成功注入到數(shù)據(jù)表中,并注意到password密碼是經(jīng)過(guò)MD5進(jìn)行加密處理的,這樣能很大程度上保證的用戶(hù)的安全性,另外從后面兩個(gè)字段中,并且state狀態(tài)由。變1,激活碼也根據(jù)之前程序設(shè)定的自動(dòng)清空,該賬戶(hù)已經(jīng)成功被激活,從而可以進(jìn)行后面研發(fā)產(chǎn)品中任何體驗(yàn)操作。

        6 結(jié)束語(yǔ)

        本次驗(yàn)證系統(tǒng)設(shè)計(jì),首先根據(jù)對(duì)SMTP和POP3郵件相關(guān)協(xié)議的了解,詳細(xì)論述了郵件收發(fā)過(guò)程和注冊(cè)郵件激活邏輯,并通過(guò)多線程防止高并發(fā)量造成的死鎖,采用JavaMail提供的API實(shí)現(xiàn)郵件發(fā)送和用戶(hù)的激活功能。整個(gè)系統(tǒng)架構(gòu)采用JSP+Servlet結(jié)構(gòu),輕化了系統(tǒng)框架,節(jié)省了資源。在設(shè)計(jì)過(guò)程中,我們也需要注意,并不是所有的提供郵箱的網(wǎng)站都會(huì)對(duì)用戶(hù)開(kāi)通SMTP服務(wù)器,一般可以使用的SMTP服務(wù)器都需要身份驗(yàn)證的,且無(wú)法進(jìn)行匿名發(fā)郵件。從測(cè)試結(jié)果來(lái)說(shuō),我們可以成功實(shí)現(xiàn)注冊(cè)時(shí)產(chǎn)生激活碼的鏈接,對(duì)用戶(hù)發(fā)送含激活鏈接的郵件,用戶(hù)點(diǎn)擊郵件中鏈接后,也成功實(shí)現(xiàn)激活用戶(hù)的操作。但本次設(shè)計(jì)中,仍存在一定的缺陷,無(wú)法承擔(dān)企業(yè)級(jí)的并發(fā)量,整體功能并不完善,當(dāng)用程序?qū)σ粋€(gè)郵箱發(fā)送大量郵件,也可能會(huì)被某些郵箱服務(wù)器當(dāng)作外界攻擊。整體來(lái)講,本次設(shè)計(jì)對(duì)JavaMail的運(yùn)用和對(duì)郵件系統(tǒng)的設(shè)計(jì)有著一定的參考價(jià)值。

        參考文獻(xiàn)

        [1]Bruce Eckel.Thinking in Java[M].Upper Saddle River,New Jersey,USA:Prentice Hall,2006.

        [2](美)阿諾德,Ken Arnold等.Java程序設(shè)計(jì)語(yǔ)言[M].北京:人民郵電出版社,2006.

        [3]姜承堯.高性能網(wǎng)站MySQL數(shù)據(jù)庫(kù)實(shí)踐.維普中文科技期刊數(shù)胡庫(kù),2013.

        [4]林學(xué)良.JSP&Servlet學(xué)習(xí)筆記.北京:清華大學(xué)出版社,2012.

        [5]羅軍舟,黎波濤,楊明.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù)[M].北京:清華大學(xué)出版社,2004.

        [6]何進(jìn),謝松巍.基于Socket的TCP/IP網(wǎng)絡(luò)通訊模式研究[J].計(jì)算機(jī)應(yīng)用研究,2001,18(08):134-135

        [7]孫衛(wèi)琴.Tomcat與Java Web開(kāi)發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2009.

        [8]賀松平.基于MVC模式的B/S架構(gòu)的研究及應(yīng)用[D].武漢:華中科技大學(xué),2006(04).

        [9]趙俊峰等.Java Web應(yīng)用開(kāi)發(fā)案例教程:基于MVC模式的JSP+ServIet+JDBC和AJAX[M].北京:清華大學(xué)出版社,2012(01)

        [10]張峋,楊三成.關(guān)鍵技術(shù):JSP與JDBC應(yīng)用詳解[M].中國(guó)鐵道出版社,2010(11).

        猜你喜歡
        電子郵件
        有關(guān)旅行計(jì)劃的電子郵件
        大數(shù)據(jù)時(shí)代背景下的海量電子郵件分析
        民事訴訟電子郵件送達(dá)制度的司法適用
        基于復(fù)雜網(wǎng)絡(luò)的電子郵件網(wǎng)絡(luò)搜索策略研究
        小測(cè)試:你對(duì)電子郵件上癮了嗎?
        有獎(jiǎng)問(wèn)答
        有獎(jiǎng)問(wèn)答
        有獎(jiǎng)問(wèn)答
        為L(zhǎng)inux架設(shè)Sendmailil郵件服務(wù)器
        手機(jī)與E-mail的親密接觸
        電子世界(2004年4期)2004-07-26 23:59:30
        无码少妇a片一区二区三区| 在线免费观看蜜桃视频| 老熟妇乱子交视频一区| 午夜成人鲁丝片午夜精品| 亚洲一区二区三区在线| 人妻无码一区二区在线影院| 一本久久综合亚洲鲁鲁五月夫| 那有一级内射黄片可以免费看| 娜娜麻豆国产电影| 欧美老妇与禽交| 久久国产精品岛国搬运工| 国产日产免费在线视频| 日本熟女精品一区二区三区 | 狠狠色噜噜狠狠狠狠97首创麻豆| 毛片亚洲av无码精品国产午夜| 麻豆AV免费网站| 久久久久国产精品四虎| 亚洲无毛成人在线视频| 亚洲欧美中文字幕5发布| 狠狠噜天天噜日日噜| 亚洲国产精品一区二区第一| 一区二区三区国产高清视频| 亚洲va欧美va日韩va成人网 | 免费成人电影在线观看| 吸咬奶头狂揉60分钟视频| 99久久久国产精品丝袜| 东京热东京道日韩av| 亚洲精品无码av人在线观看国产| 国产亚洲精品资源在线26u| 日本久久久免费高清| 国产一区二区三区免费小视频| 亚洲女优中文字幕在线观看| 亚洲精品乱码久久久久久中文字幕| 日韩精品一区二区三区视频| 少妇的诱惑免费在线观看| 精品黄色国产一区二区| 色哟哟亚洲色精一区二区| 无码人妻精品一区二区三区下载| 久久久精品3d动漫一区二区三区| 丰满人妻无套内射视频| 午夜人妻久久久久久久久|