Java-Web-程序設(shè)計(jì)模塊7_第1頁
Java-Web-程序設(shè)計(jì)模塊7_第2頁
Java-Web-程序設(shè)計(jì)模塊7_第3頁
Java-Web-程序設(shè)計(jì)模塊7_第4頁
Java-Web-程序設(shè)計(jì)模塊7_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

模塊7組件應(yīng)用及常用模塊JavaWeb程序設(shè)計(jì)“十三五”職業(yè)教育國家規(guī)劃教材配套資源目錄項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件項(xiàng)目25上傳文件模塊制作項(xiàng)目26縮略圖制作項(xiàng)目27驗(yàn)證碼的制作項(xiàng)目28密碼的加密與解密小結(jié)習(xí)題項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.1項(xiàng)目描述與實(shí)現(xiàn)(1)描述一般在進(jìn)行信息在線編輯時(shí),需要插入圖片,進(jìn)行文字排版等,使顯示的時(shí)候以固定排版格式顯示,因此,需要在錄入時(shí),能夠允許進(jìn)行信息的在線樣式編輯在JSP中,可采用Ueditor在線編輯器實(shí)現(xiàn)以上描述功能項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)過程1.下載UEditor。在UEditor官方網(wǎng)站網(wǎng)址下載UEditor的JSP版本。本例下載當(dāng)前最新版本Jsp版本。2.將UEditor文件夾和jar復(fù)制到指定位置。下載后解壓,將 UEditor解壓后的jsp\lib目錄下的ueditor.jar等文件復(fù)制到采用站點(diǎn)的WEB-INF/lib/目錄下,將解壓后的所有文件復(fù)制到站點(diǎn)文件夾的WebContent/chapter7/uditor/目錄下。3.編寫調(diào)用表單文件。編寫含有在線編輯器的表單,即在原先表單制作的基礎(chǔ)上,增加相應(yīng)UEditor的調(diào)用語句即可。程序7-1為實(shí)現(xiàn)了含有在線編輯器的一個(gè)表單頁面。項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)過程程序7-1exam23_1_ueditorform.jsp<%@pagecontentType="text/html;charset=utf-8"language="java"import="java.sql.*"errorPage=""%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>UEditor測試</title></head><body><formid="form1"name="form1"method="post"action="exam23_1_editorpost.jsp">

文章標(biāo)題:<inputname="title"type="text"id="title"size="60"/><br/>

文章正文:<textareacols="50"id="ArtContent"name="ArtContent"rows="3">歡迎使用UEditor!</textarea><inputtype="submit"name="Submit"value="提交"/></form><!--配置文件--><scripttype="text/javascript"src="ueditor/ueditor.config.js"></script><!--編輯器源碼文件--><scripttype="text/javascript"src="ueditor/ueditor.all.js"></script><!--實(shí)例化編輯器--><scripttype="text/javascript">

vareditor=UE.getEditor('ArtContent');</script></body></html>項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.1項(xiàng)目描述與實(shí)現(xiàn)運(yùn)行效果項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.2新知識點(diǎn)-Web在線編輯器在線編輯器是指用于在線編輯的工具,編輯的內(nèi)容是基于HTML的文檔。Web在線編輯器可用于在線編輯HTML的文檔,因此,它經(jīng)常被用于留言板留言、論壇發(fā)貼、Blog編寫日志、文章發(fā)布等需要用戶輸入普通HTML的地方。目前Web在線編輯器有很多,比較常用的有如下幾個(gè)。(1)UEditor(2)CKEditor(3)YUIEditor項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.2新知識點(diǎn)-UEditor常用API(1)getEditor(),實(shí)例化編輯器,其使用格式為:varue=UE.getEditor('container');使用如:<scripttype="text/javascript">

varue=UE.getEditor('ArtContent');</script>表示實(shí)例化編輯器到id為ArtContent的dom容器上。項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.2新知識點(diǎn)-UEditor常用API(2)setContent(),設(shè)置編輯器內(nèi)容,其使用格式為:ue.setContent('<p>hello!</p>');如:<scripttype="text/javascript">varue=UE.getEditor('ArtContent');ue.ready(function(){ue.setContent('<p>newtext</p>',true);});</script>項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.3擴(kuò)展1-修改信息時(shí)采用在線編輯器原表單元素為:<textareacols="80"id="ArtContent"name="ArtContent"rows="3"></textarea>設(shè)置默認(rèn)值:<textareacols="80"id="ArtContent"name="ArtContent"rows="3">編輯器默認(rèn)值</textarea>采用setContent方法設(shè)置默認(rèn)值,其關(guān)鍵代碼如下:<!--實(shí)例化編輯器--><scripttype="text/javascript">

vareditor=UE.getEditor('ArtContent'); editor.ready(function(){ editor.setContent('<p>hello!</p>'); });</script>項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.3擴(kuò)展1-修改信息時(shí)采用在線編輯器項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.4擴(kuò)展2——簡潔的在線編輯器程序7-2exam23_2_ueditorform.jsp<formid="form1"name="form1"method="post"action="exam23_1_editorpost.jsp">

文章標(biāo)題:<inputname="title"type="text"id="title"size="60"/><br/>

文章正文:<textareacols="50"id="ArtContent"name="ArtContent"rows="3"></textarea><inputtype="submit"name="Submit"value="提交"/></form><!--配置文件--><scripttype="text/javascript"src="ueditor/ueditor.config.js"></script><!--編輯器源碼文件--><scripttype="text/javascript"src="ueditor/ueditor.all.js"></script><!--實(shí)例化編輯器--><scripttype="text/javascript">

vareditor=UE.getEditor('ArtContent',{ toolbars:[ ['fullscreen','source','undo','redo','bold'] ], autoHeightEnabled:true, autoFloatEnabled:true }); editor.ready(function(){ editor.setContent('<p>簡化的編輯器</p>'); });</script></body></html>項(xiàng)目23帶在線編輯器的信息發(fā)布模塊制作23.4擴(kuò)展2——簡潔的在線編輯器代碼說明:本程序采用簡潔的編輯器。采用toolbars配置其工具按鈕,需要哪個(gè)就可以配置哪個(gè)。主要代碼為:toolbars:[['fullscreen','source','undo','redo','bold']],本程序配置了5個(gè)工具按鈕,即全屏、源碼、撤銷、重做、字體加粗。其他更多的工具按鈕使用,可以依次設(shè)置進(jìn)去,其余按鈕見UEditor配置文件ueditor.config.js。

項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件24.1項(xiàng)目描述與實(shí)現(xiàn)(1)描述在網(wǎng)站注冊成功后,會(huì)發(fā)送郵件到注冊者郵箱,提示注冊成功項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件24.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)1.下載并加載JavaMailAPI2.編寫郵件身份驗(yàn)證類3.編寫發(fā)送郵件類4.編寫注冊表單5.編寫注冊Servlet,包括發(fā)郵件功能項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件24.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)1.下載并加載JavaMailAPI收發(fā)郵件需要下載JavaMailAPI并加載到服務(wù)器后,才可以正常執(zhí)行。JavaMailAPI目前的版本為JavaMailAPI1.4.3??梢詮娜缦碌刂废螺d:/products/javamail/downloads/index.html下載后,解壓并找到mail.jar文件,將其復(fù)制到項(xiàng)目的WEB-INF/lib/文件夾下,如直接加載到Web服務(wù)器,則復(fù)制到Tomcat安裝目錄下的lib文件夾中。

項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件24.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)2.編寫郵件身份驗(yàn)證類程序7-3Auth.javapackagechapter7.mail;importjava.util.Properties;importjavax.mail.Authenticator;importjavax.mail.PasswordAuthentication;

publicclassAuthextendsAuthenticator{privateStringusername="";privateStringpassword="";publicAuth(Stringusername,Stringpassword){this.username=username;this.password=password;}protectedPasswordAuthenticationgetPasswordAuthentication(){returnnewPasswordAuthentication(username,password);}}用來驗(yàn)證SMTP服務(wù)器身份。程序繼承了Authenticator類,它主要用來實(shí)現(xiàn)登錄郵件服務(wù)器時(shí)的認(rèn)證。它包含兩個(gè)屬性:username和password,分別用來存儲(chǔ)認(rèn)證時(shí)所需的用戶名和密碼信息。程序重寫了Authenticator類的getPasswordAuthentication()方法,該方法返回PasswordAuthentication對象,此對象包含通過STMP服務(wù)器身份驗(yàn)證所需的用戶名和密碼,供認(rèn)證時(shí)session調(diào)用。項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件24.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)3.編寫發(fā)送郵件類publicclassSendMail{privatePropertiesprops;//系統(tǒng)屬性privateSessionmailSession;//郵件會(huì)話對象privateMimeMessagemimeMsg;//MIME郵件對象publicSendMail(StringSMTPHost,StringPort,StringMailUsername,

StringMailPassword){

Authau=newAuth(MailUsername,MailPassword);//設(shè)置系統(tǒng)屬性props=java.lang.System.getProperties();//獲得系統(tǒng)屬性對象props.put("mail.smtp.host",SMTPHost);//設(shè)置SMTP主機(jī)props.put("mail.smtp.port",Port);//設(shè)置服務(wù)端口號props.put("mail.smtp.auth","true");//同時(shí)通過驗(yàn)證//獲得郵件會(huì)話對象

mailSession=Session.getInstance(props,au);}publicbooleansendingMimeMail(StringMailFrom,StringMailTo,StringMailCopyTo,StringMailBCopyTo,StringMailSubject,StringMailBody){try{//創(chuàng)建MIME郵件對象mimeMsg=newMimeMessage(mailSession);mimeMsg.setFrom(newInternetAddress(MailFrom));//設(shè)置發(fā)信人//設(shè)置收信人if(MailTo!=null){mimeMsg.setRecipients(Message.RecipientType.TO,

InternetAddress.parse(MailTo));}if(MailCopyTo!=null){mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,InternetAddress.parse(MailCopyTo));//設(shè)置抄送人}if(MailBCopyTo!=null){mimeMsg.setRecipients(javax.mail.Message.RecipientType.BCC,InternetAddress.parse(MailBCopyTo));//設(shè)置暗送人}mimeMsg.setSubject(MailSubject,"gb2312");//設(shè)置郵件主題//設(shè)置郵件內(nèi)容,將郵件body部分轉(zhuǎn)化為HTML格式mimeMsg.setContent(MailBody,"text/html;charset=gb2312");Transport.send(mimeMsg);//發(fā)送郵件returntrue;}catch(Exceptione){e.printStackTrace();returnfalse;}}}代碼說明:該程序?yàn)橐粋€(gè)郵件發(fā)送通用類的程序,SendMail構(gòu)造方法實(shí)現(xiàn)對發(fā)送郵件身份的認(rèn)證,獲得Session對象。該方法中SMTPHost、Port、MailUsername、MailPassword分別表示所使用的SMTP服務(wù)器、服務(wù)器的smtp端口、用戶名和密碼。sendingMimeMail()方法為發(fā)送郵件的方法,在該方法需要傳入的參數(shù)中,MailFrom為發(fā)件人電子信箱,MailTo為收件人電子信箱,MailCopyTo為抄送人電子信箱,MailBCopyTo為暗送人電子信箱,MailSubject為發(fā)送郵件主題,MailBody為發(fā)送郵件正文。sendingMimeMail()返回boolean類型,表示是否發(fā)送成功。發(fā)送郵件時(shí)先調(diào)用構(gòu)造方法SendMail()創(chuàng)建郵件發(fā)送對象,然后調(diào)用sendingMimeMail()方法發(fā)送。項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件24.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)4.編寫注冊表單程序7-5exam24_1_reg.html<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>注冊測試</title></head><body><formid="form1"name="form1"method="post"action="../Chapter7Reg.do"><p>注冊并發(fā)送歡迎郵件測試</p><p>姓名:<inputname="username"type="text"id="username"/></p><p>E-mail:<inputname="email"type="text"id="email"/></p><p><inputtype="submit"name="Submit"value="提交"/></p></form></body></html>項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件24.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)5.編寫注冊Servletpublicvoidinit(ServletConfigconfig)throwsServletException{super.init(config);this.Servletconf=config;}protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponse

response)throwsServletException,IOException{request.setCharacterEncoding("utf-8");username=request.getParameter("username");email=request.getParameter("email");/**……*省略注冊并寫入數(shù)據(jù)庫部分*//**注冊成功,發(fā)送歡迎郵件*/if(sendmail(email,username)){msg="郵件發(fā)送成功";}else{msg="郵件發(fā)送失敗";}toResponse(response,msg);}privatebooleansendmail(Stringmailto,Stringusername){StringMailTo=mailto;StringMailSubject="WestlakeInternational-ApplicationReceived";StringMailBCopyTo="";StringMailCopyTo="";StringMailBody="<p><imgalt=\"westlakelogo\"src=

\"/images/top.gif\"border=

\"0\"/></p>"+"<p>親愛的"+username+",<br/>"+"<br/>"+"歡迎您,您已經(jīng)注冊成功。</p>"+"<p>We'dliketothankyouforyourinterestinourexpert

networkbusiness.Weappreciateyoutakingtimetoapplyfor

membershipinourexpertcommunity.</p>"+"<p>Toensuretheintegrityandqualityofournetwork,weseek

toverifythecredentialsofourexperts.Wehopethatyou

understandit.Wewillsendyouaconfirmationemail

shortly.</p>"+"<p>Bestregards,<br/>"+"<br/>WestlakeInternationalTeam</p><p> </p>";項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件24.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)5.編寫注冊ServletStringSMTPHost=Servletconf.getInitParameter("smtphost");StringPort=Servletconf.getInitParameter("port");StringMailUsername=Servletconf.getInitParameter("mailusername");StringMailPassword=Servletconf.getInitParameter("mailpassword");StringMailFrom=Servletconf.getInitParameter("mailfrom");if(SMTPHost==null||SMTPHost==""||MailUsername==null||

MailUsername==""||MailPassword==null||MailPassword==

""||MailFrom==null||MailFrom==""){System.out.println("ServletparameterWrongs");}SendMailsend=newSendMail(

SMTPHost,Port,MailUsername,MailPassword);if(send.sendingMimeMail(MailFrom,MailTo,MailCopyTo,MailBCopyTo,

MailSubject,MailBody)){returntrue;}else{returnfalse;}}

項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件24.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)5.編寫注冊Servlet<servlet>

<description>chapter7.reg</description>

<display-name>chapter.Reg</display-name>

<servlet-name>Chapter7Reg</servlet-name>

<servlet-class>chapter7.Reg</servlet-class>

<init-param>

<description>SMTPHost</description>

<param-name>smtphost</param-name>

<param-value></param-value>

</init-param>

<init-param>

<description>MailPort</description>

<param-name>port</param-name>

<param-value>25</param-value>

</init-param>

<init-param>

<description>MailHostUsername</description>

<param-name>mailusername</param-name>

<param-value>webmaster@</param-value>

</init-param>

<init-param>

<description>MailHostPassword</description>

<param-name>mailpassword</param-name>

<param-value>wdesix3s#</param-value>

</init-param>

<init-param>

<description>MailFrom</description>

<param-name>mailfrom</param-name>

<param-value>us@</param-value>

</init-param></servlet><servlet-mapping>

<servlet-name>Chapter7Reg</servlet-name>

<url-pattern>/Chapter7Reg.do</url-pattern></servlet-mapping>web.xml中的配置代碼如下:項(xiàng)目24用戶注冊時(shí)發(fā)送歡迎郵件24.2新知識點(diǎn)-JavaMailSMTP

SMTP(SimpleMailTransferProtocol,簡單郵件傳輸協(xié)議)由RFC821定義。它定義了發(fā)送電子郵件的機(jī)制。POPPOP(PostOfficeProtocol)代表郵局協(xié)議IMAPIMAP是更高級的用于接收消息的協(xié)議。在RFC2060中被定義,IMAP代表Internet消息訪問協(xié)議(InternetMessageAccessProtocol),目前使用的是版本4,因此也稱IMAP4。MIMEMIME代表多用途Internet郵件擴(kuò)展標(biāo)準(zhǔn)(MultipurposeInternetMailExtensions)。它不是郵件傳輸協(xié)議,但對傳輸內(nèi)容的消息、附件及其他內(nèi)容定義了格式。項(xiàng)目25上傳文件模塊制作25.1項(xiàng)目描述與實(shí)現(xiàn)(1)項(xiàng)目描述:使用commonsFileUpload組件上傳文件實(shí)現(xiàn)一個(gè)簡單的期末論文提交網(wǎng)頁,要求論文提交頁面有學(xué)號、姓名、論文題目的輸入框,以及一個(gè)上傳文件的表單域,當(dāng)用戶填寫內(nèi)容并選擇文件進(jìn)行提交之后,將用戶所上傳的文件重命名成“學(xué)號-姓名-論文題目.后綴名”的格式存儲(chǔ)到服務(wù)器D盤的uploadPaper文件夾下,并在響應(yīng)頁面向用戶提示他所上傳的文件名,以及上傳后的新文件名。項(xiàng)目25上傳文件模塊制作25.1項(xiàng)目描述與實(shí)現(xiàn)(2)項(xiàng)目實(shí)現(xiàn):(1)下載文件上傳組件。到apache官網(wǎng)/fileupload/和http://commons./io/下載commonsFileUpload組件以及commonsio組件,本例使用這兩個(gè)組件目前的最新版本:commons-fileupload-1.2.2.jar和commons-io-2.3.jar。(2)將上述jar包添加到項(xiàng)目的WebContent/WEB-INF/lib文件夾中。(3)創(chuàng)建論文提交頁面。在WebContent\chapter7文件夾中創(chuàng)建一個(gè)名為exam25_1_uploadPaper.jsp的JSP頁面,該頁面為文件上傳表單頁面。(4)編寫servlet,完成文件上傳功能。在源文件夾下的chapter7包中創(chuàng)建一個(gè)servlet類PaperUpload_do,該類中的文件上傳處理思路為:首先獲取stuNum、stuName、title(分別表示學(xué)號、姓名、標(biāo)題)這三個(gè)普通表單域的值,然后在將用戶上傳的文件存儲(chǔ)到服務(wù)器磁盤上時(shí)使用上述三個(gè)表單域的值組合成文件的名字。(5)在web.xml中配置上述servlet。(6)測試。項(xiàng)目25上傳文件模塊制作25.1項(xiàng)目描述與實(shí)現(xiàn)(2)項(xiàng)目實(shí)現(xiàn):重點(diǎn)代碼見課本代碼分析:由程序7-7可知請求是通過post方法發(fā)出的,所以這里只需寫doPost方法即可。在該方法中,首先用ServletFileUpload類的靜態(tài)方法isMultipartContent(request)判斷request消息中的表單類型是否是“multipart/form-data”,如果是,才進(jìn)行下面的文件上傳處理。savedPath和tempPath這兩個(gè)File對象分別表示存儲(chǔ)上傳文件的文件夾以及臨時(shí)文件夾。factory.setSizeThreshold(4*1024)將文件處理工廠的緩沖區(qū)大小設(shè)為4kb,在文件正式存儲(chǔ)到磁盤上之前,如果文件小于等于4kb,則文件保存在內(nèi)存中;如果文件大于4kb,則將文件暫時(shí)存儲(chǔ)在臨時(shí)文件夾。ServletFileUpload的parseRequest方法可以將request中包含的所有表單項(xiàng)解析到一個(gè)由FileItem組成的List中(每個(gè)表單項(xiàng)解析成一個(gè)FileItem對象)。fileItem.write(savedFile);能將文件域的內(nèi)容存儲(chǔ)到savedFile所對應(yīng)的磁盤文件中,如果該文件在磁盤中不存在,則會(huì)創(chuàng)建新文件;如果已存在,則原文件的內(nèi)容將會(huì)被覆蓋。項(xiàng)目25上傳文件模塊制作25.1項(xiàng)目描述與實(shí)現(xiàn)(2)項(xiàng)目實(shí)現(xiàn):項(xiàng)目25上傳文件模塊制作25.1項(xiàng)目描述與實(shí)現(xiàn)(2)項(xiàng)目實(shí)現(xiàn):2.使用servlet3.0接口上傳文件重點(diǎn)代碼見課本代碼分析:首先使用@MultipartConfig注解來對上傳操作相關(guān)的一些參數(shù)進(jìn)行了配置:@MultipartConfig(fileSizeThreshold=4*1024,location="D:/uploadDir",maxFileSize=10000*1024),表示文件的緩沖區(qū)大小為4kb,文件超過這個(gè)大小的話會(huì)在存儲(chǔ)文件之前暫時(shí)將文件保存在磁盤的臨時(shí)文件夾內(nèi);location指服務(wù)器上存儲(chǔ)上傳文件的路徑,該路徑同時(shí)也作為臨時(shí)文件夾;maxSize限制上傳文件最大只能為10M。在使用commonsFileUpload組件時(shí),不能通過request.getParameter方法來獲取請求參數(shù)。使用servlet3.0提供的接口上傳文件則不同,這里可以使用request.getParameter方法正常獲取請求參數(shù),所以通過該方法獲取學(xué)號、學(xué)生姓名、論文標(biāo)題這三個(gè)表單域的值。request.getPart("paper")方法能將域名稱為“paper”的表單域封裝到一個(gè)Part對象中,javax.servlet.http.Part接口的對象用來表示一個(gè)“multipart/form-data”類型的Post請求中所包含的一個(gè)文件或者普通表單項(xiàng)。然后通過將“學(xué)號-姓名-標(biāo)題”和上傳文件本身的后綴名相結(jié)合,組成新的文件名將該文件使用Part對象的write方法存儲(chǔ)到服務(wù)器磁盤上。項(xiàng)目25上傳文件模塊制作25.2新知識點(diǎn)——上傳組件及方法commonsFileUpload組件FileUpload是Apachecommons項(xiàng)目的一個(gè)子項(xiàng)目,它實(shí)現(xiàn)了在JSP/Servlet中高效的文件上傳功能;而FileUpload還需要commons的另一個(gè)子項(xiàng)目IO進(jìn)行支持,commonsIO組件提供了很多I/O工具。所以,要運(yùn)用FileUpload組件實(shí)現(xiàn)文件上傳功能需要下載這兩個(gè)組件。項(xiàng)目25上傳文件模塊制作25.2新知識點(diǎn)——上傳組件及方法(1)FileItem接口FileUpload組件可以將multipart/form-data類型的request中的所有表單項(xiàng),不管是文件類型還是其它類型,都封裝成FileItem對象。FileItem接口常用的方法:1publicbooleanisFormField()2publicStringgetName()3publicStringgetFieldName()4publicvoidwrite(Filefile)5publicStringgetString([Stringencoding])6publicStringgetContentType()7publiclonggetSize()8publicbooleanisInMemory()9publicvoiddelete()項(xiàng)目25上傳文件模塊制作25.2新知識點(diǎn)——上傳組件及方法(2)DiskFileItemFactory類DiskFileItemFactory類就是將request中的每一個(gè)表單項(xiàng)封裝成一個(gè)FileItem對象的工廠,它實(shí)現(xiàn)的接口是FileItemFactory。此類封裝FileItem對象時(shí),如果上傳的文件大小小于規(guī)定臨界值時(shí),則直接將文件內(nèi)容保存在內(nèi)存中;如果文件size大于規(guī)定值時(shí),則將文件存儲(chǔ)在臨時(shí)文件夾中。屬性:1publicstaticfinalintDEFAULT_SIZE_THRESHOLD2privateintsizeThreshold3privateFilerepository方法:1publicDiskFileItemFactory()、2publicDiskFileItemFactory(intsizeThreshold,Filerepository)3publicvoidsetSizeThreshold(intsizeThreshold)4publicFileItemcreateItem()項(xiàng)目25上傳文件模塊制作25.2新知識點(diǎn)——上傳組件及方法(3)ServletFileUpload類ServletFileUpload類對象可以解析request請求,將request中的所有輸入項(xiàng)封裝到一個(gè)由FileItem對象組成的List對象中,它進(jìn)行解析時(shí)需要依賴一個(gè)DiskFileItemFactory對象中的createItem()方法來封裝具體的FileItem對象。常用的方法:1publicServletFileUpload(FileItemFactoryfileItemFactory)2publicstaticbooleanisMultipartContent(HttpServletRequestrequest)3publicListparseRequest(HttpServletRequestrequest)4publicFileItemIteratorgetItemIterator(HttpServletRequestrequest)5publicvoidsetFileSizeMax(longfileSizeMax)6publicvoidsetSizeMax(longsizeMax)7publicvoidsetHeaderEncoding(Stringencoding)8publicvoidsetProgressListener(ProgressListenerpListener)項(xiàng)目25上傳文件模塊制作25.2新知識點(diǎn)——上傳組件及方法Servlet3.0提供的上傳文件接口Servlet3.0提供的文件上傳功能主要涉及到兩個(gè)接口(HttpServletRequest和Part)以及一個(gè)注解類型(MultipartConfig)接口的方法詳細(xì)見課本項(xiàng)目25上傳文件模塊制作25.3擴(kuò)展——下載實(shí)現(xiàn)文件下載功能。當(dāng)用戶點(diǎn)擊下載頁面的文件下載按鈕或鏈接時(shí),能彈出文件下載對話框,用戶能夠?qū)⒎?wù)器上的相關(guān)文件下載到客戶機(jī)上。代碼見課本代碼分析該文件下載功能實(shí)現(xiàn)的流程是:首先根據(jù)下載頁面?zhèn)鬟f過來的文件名參數(shù),查找服務(wù)器的特定路徑下是否存在該文件,如果不存在的話向用戶報(bào)錯(cuò)“xxx文件不存在”,然后返回,不再執(zhí)行下面的操作。如果存在,則使用一個(gè)FileInputStream(文件輸入流)從服務(wù)器的文件存儲(chǔ)路徑下讀取要下載的相關(guān)文件,再把該輸入流的內(nèi)容以1kb為單位循環(huán)寫入到一個(gè)當(dāng)前響應(yīng)的ServletOutputStream輸出流中。“response.setContentType("binary/octet-stream");”將響應(yīng)的MIME類型設(shè)置為8位格式的二進(jìn)制流。“response.setHeader("Content-Disposition","attachment;filename="+newString(filename.getBytes(),"iso8859-1")+"");”使得客戶端能夠以附件的形式來下載輸出流中的內(nèi)容項(xiàng)目25上傳文件模塊制作25.3擴(kuò)展——下載運(yùn)行項(xiàng)目26縮略圖制作26.1項(xiàng)目描述與實(shí)現(xiàn)(1)項(xiàng)目描述完成一個(gè)上傳圖片并自動(dòng)生成縮略圖的功能。當(dāng)用戶在圖片上傳頁面上傳JPG/JPEG格式的圖片時(shí),能夠正確將用戶上傳的圖片以“當(dāng)前時(shí)間的毫秒數(shù)_100以內(nèi)隨機(jī)數(shù)”重命名后存儲(chǔ)到服務(wù)器“D:\uploadImg”目錄下,并生成該圖片的縮略圖存儲(chǔ)到“D:\uploadImg\small”目錄下,然后在響應(yīng)頁面打印出用戶所上傳的圖片的名稱、大小、縮略圖以及原始圖。項(xiàng)目26縮略圖制作26.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)過程1實(shí)現(xiàn)生成縮略圖的工具類程序7-15生成縮略圖的工具類JpegTool.java代碼分析:該類能夠依據(jù)三種方式生成縮略圖:固定縮略圖的寬度、固定縮略圖的高度、按縮小比例。且優(yōu)先級依次降低,即如果設(shè)定了縮略圖的寬度,那么就按照該寬度來同比例縮小高度生成縮略圖;如果沒設(shè)定縮略圖寬度,才依次考慮使用后兩種方式。該類的核心方法是doFinal(Stringpic_big_pathfilename,Stringpic_small_pathfilename),其余的都是相關(guān)參數(shù)的set方法。該方法通過javax.imageio.ImageIO類的靜態(tài)方法從磁盤文件中將圖片讀取到內(nèi)存中,存儲(chǔ)在一個(gè)java.awt.image.BufferedImage對象中,然后通過java.awt.image.AffineTransformOp對象的filter(BufferedImagesrc,BufferedImagedst)方法轉(zhuǎn)換源BufferedImage并將結(jié)果存儲(chǔ)在目標(biāo)BufferedImage中。當(dāng)參數(shù)不合符要求或者執(zhí)行中出現(xiàn)IOException異常時(shí),程序7-15都拋出JpegToolException來中斷程序執(zhí)行,這是一個(gè)自定義的異常。項(xiàng)目26縮略圖制作26.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)過程2定義異常類JpegToolException3創(chuàng)建圖片上傳頁面exam26_1_uploadImage.jsp4編寫Servlet類ImageUpload_do,該類的doPost方法用來處理圖片上傳、生成縮略圖以及向用戶返回響應(yīng)的工作5在web.xml中配置上述Servlet6測試項(xiàng)目26縮略圖制作26.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)過程項(xiàng)目26縮略圖制作26.2新知識點(diǎn)——縮略圖原理1.使用javax.imageio.ImageIO類的靜態(tài)方法BufferedImageread(Fileinput)從磁盤文件中將圖片讀取到內(nèi)存中,存儲(chǔ)在一個(gè)java.awt.image.BufferedImage對象中;2.構(gòu)建一個(gè)仿射變換對象java.awt.geom.AffineTransform。然后確定目標(biāo)圖片與原圖片的寬度比例以及高度比例,依據(jù)這兩維的縮放比例調(diào)用AffineTransform的setToScale(float,float)方法將此變換設(shè)置為縮放變換。3.根據(jù)上面的仿射變換對象構(gòu)造出一個(gè)java.awt.image.AffineTransformOp對象,該對象能夠使用仿射轉(zhuǎn)換來執(zhí)行從源圖像到目標(biāo)圖像的線性映射。具體使用的方法是filter(BufferedImagesrc,BufferedImagedst),此方法將轉(zhuǎn)換源BufferedImage并將結(jié)果存儲(chǔ)在目標(biāo)BufferedImage中。4.使用ImageIO類的write方法將轉(zhuǎn)換好的目標(biāo)BufferedImage以一定的圖片類型寫到磁盤文件上。項(xiàng)目26縮略圖制作26.3擴(kuò)展——圖片增加水印給用戶上傳的圖片添加水印。當(dāng)用戶在圖片上傳頁面填寫用戶名并從客戶端選擇文件提交上傳請求后,服務(wù)器能夠?qū)⒂脩羯蟼鞯膱D片存儲(chǔ)到服務(wù)器的特定路徑下,并能夠?qū)⒂脩裘运〉男问綐?biāo)記到圖片上,存儲(chǔ)該水印圖片并打印到響應(yīng)頁面。實(shí)現(xiàn)(1)編寫為圖片添加水印標(biāo)記的工具類。代碼如程序7-20所示。(2)創(chuàng)建圖片上傳頁面exam26_3_uploadImage2.jsp(3)編寫Servlet類ImageUploadAndMark_do,該類的doPost方法用來處理圖片上傳、為圖片添加水印標(biāo)記以及向用戶返回響應(yīng)的工作。(4)在web.xml中配置上述Servlet(5)測試代碼分析:該類提供了兩個(gè)為圖片添加文字水印的方法,其中一個(gè)是無旋轉(zhuǎn)角度設(shè)置的方法,另一個(gè)可以設(shè)置水印的旋轉(zhuǎn)角度,實(shí)際上前一個(gè)方法只需簡單調(diào)用后一個(gè)方法即可(使旋轉(zhuǎn)角度參數(shù)為null)。添加水印的設(shè)計(jì)思路為:讀取源圖片文件產(chǎn)生一個(gè)BufferedImage,然后為該用該Image對象創(chuàng)建Graphics2D畫筆對象,進(jìn)行一系列的畫筆屬性設(shè)置后,調(diào)用其drawString方法將標(biāo)記文字添加到圖片上,最后把該BufferedImage對象以“JPG”格式保存到目標(biāo)文件中。項(xiàng)目26縮略圖制作26.3擴(kuò)展——圖片增加水印測試效果項(xiàng)目27驗(yàn)證碼的制作27.1項(xiàng)目描述與實(shí)現(xiàn)(1)項(xiàng)目描述使用JSP程序,在用戶登錄界面加載一個(gè)圖片驗(yàn)證碼驗(yàn)證碼生成的思路如下:(1)生成四個(gè)隨機(jī)字符。(2)設(shè)置隨機(jī)背景顏色。(3)增加背景干擾線。(4)生成JPG圖像。項(xiàng)目27驗(yàn)證碼的制作27.1項(xiàng)目描述與實(shí)現(xiàn)(2)實(shí)現(xiàn)過程編寫驗(yàn)證碼程序……response.setHeader("Pragma","No-cache");//設(shè)置頁面不緩存response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires",0);intwidth=80,height=30;BufferedImageimage=newBufferedImage(width,height,

BufferedImage.TYPE_INT_RGB);Graphicsg=image.getGraphics();//獲取圖形上下文Randomrandom=newRandom();//生成隨機(jī)對象g.setColor(getRandColor(200,250));//設(shè)定背景顏色g.fillRect(0,0,width,height);g.setFont(newFont("TimesNewRoman",Font.PLAIN,18));//設(shè)定字體//隨機(jī)產(chǎn)生155條干擾線,使圖像中的驗(yàn)證碼不易被其他程序探測到g.setColor(getRandColor(160,200));for(inti=0;i<155;i++){intx=random.nextInt(width);inty=random.nextInt(height);intxl=random.nextInt(12);intyl=random.nextInt(12);g.drawLine(x,y,x+xl,y+yl);}//取隨機(jī)產(chǎn)生的驗(yàn)證碼(4位數(shù)字)StringsRand="";for(inti=0;i<4;i++){Stringrand=String.valueOf(random.nextInt(10));sRand+=rand;//將驗(yàn)證碼顯示到圖像中g(shù).setColor(newColor(20+random.nextInt(110),

20+random.nextInt(110),20+random.nextInt(110)));//設(shè)置顯示的隨機(jī)字符的顏色g.drawString(rand,13*i+6,16);}session.setAttribute("rand",sRand);//將驗(yàn)證碼存入SESSIONg.dispose();//圖像生效//輸出圖像到頁面ImageIO.write(image,"JPEG",response.getOutputStream());out.clear();out=pageContext.pushBody();代碼分析:此段代碼主要實(shí)現(xiàn)用JSP程序生成JPG驗(yàn)證碼,驗(yàn)證碼為4個(gè)隨機(jī)數(shù)字字符。生成驗(yàn)證碼文件后,在登錄頁面可以以圖片的形式加載驗(yàn)證碼程序,調(diào)用方式為用XHTML的img標(biāo)簽,如<imgsrc="checknum.jsp"id="code"width="50"height="30"/>。項(xiàng)目27驗(yàn)證碼的制作27.2新知識

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論