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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

模塊7組件應用及常用模塊JavaWeb程序設計“十三五”職業(yè)教育國家規(guī)劃教材配套資源目錄項目23帶在線編輯器的信息發(fā)布模塊制作項目24用戶注冊時發(fā)送歡迎郵件項目25上傳文件模塊制作項目26縮略圖制作項目27驗證碼的制作項目28密碼的加密與解密小結習題項目23帶在線編輯器的信息發(fā)布模塊制作23.1項目描述與實現(1)描述一般在進行信息在線編輯時,需要插入圖片,進行文字排版等,使顯示的時候以固定排版格式顯示,因此,需要在錄入時,能夠允許進行信息的在線樣式編輯在JSP中,可采用Ueditor在線編輯器實現以上描述功能項目23帶在線編輯器的信息發(fā)布模塊制作23.1項目描述與實現(2)實現過程1.下載UEditor。在UEditor官方網站網址下載UEditor的JSP版本。本例下載當前最新版本Jsp版本。2.將UEditor文件夾和jar復制到指定位置。下載后解壓,將 UEditor解壓后的jsp\lib目錄下的ueditor.jar等文件復制到采用站點的WEB-INF/lib/目錄下,將解壓后的所有文件復制到站點文件夾的WebContent/chapter7/uditor/目錄下。3.編寫調用表單文件。編寫含有在線編輯器的表單,即在原先表單制作的基礎上,增加相應UEditor的調用語句即可。程序7-1為實現了含有在線編輯器的一個表單頁面。項目23帶在線編輯器的信息發(fā)布模塊制作23.1項目描述與實現(2)實現過程程序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">

文章標題:<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><!--實例化編輯器--><scripttype="text/javascript">

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

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

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

文章標題:<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><!--實例化編輯器--><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>項目23帶在線編輯器的信息發(fā)布模塊制作23.4擴展2——簡潔的在線編輯器代碼說明:本程序采用簡潔的編輯器。采用toolbars配置其工具按鈕,需要哪個就可以配置哪個。主要代碼為:toolbars:[['fullscreen','source','undo','redo','bold']],本程序配置了5個工具按鈕,即全屏、源碼、撤銷、重做、字體加粗。其他更多的工具按鈕使用,可以依次設置進去,其余按鈕見UEditor配置文件ueditor.config.js。

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

項目24用戶注冊時發(fā)送歡迎郵件24.1項目描述與實現(2)實現2.編寫郵件身份驗證類程序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);}}用來驗證SMTP服務器身份。程序繼承了Authenticator類,它主要用來實現登錄郵件服務器時的認證。它包含兩個屬性:username和password,分別用來存儲認證時所需的用戶名和密碼信息。程序重寫了Authenticator類的getPasswordAuthentication()方法,該方法返回PasswordAuthentication對象,此對象包含通過STMP服務器身份驗證所需的用戶名和密碼,供認證時session調用。項目24用戶注冊時發(fā)送歡迎郵件24.1項目描述與實現(2)實現3.編寫發(fā)送郵件類publicclassSendMail{privatePropertiesprops;//系統(tǒng)屬性privateSessionmailSession;//郵件會話對象privateMimeMessagemimeMsg;//MIME郵件對象publicSendMail(StringSMTPHost,StringPort,StringMailUsername,

StringMailPassword){

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

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

InternetAddress.parse(MailTo));}if(MailCopyTo!=null){mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,InternetAddress.parse(MailCopyTo));//設置抄送人}if(MailBCopyTo!=null){mimeMsg.setRecipients(javax.mail.Message.RecipientType.BCC,InternetAddress.parse(MailBCopyTo));//設置暗送人}mimeMsg.setSubject(MailSubject,"gb2312");//設置郵件主題//設置郵件內容,將郵件body部分轉化為HTML格式mimeMsg.setContent(MailBody,"text/html;charset=gb2312");Transport.send(mimeMsg);//發(fā)送郵件returntrue;}catch(Exceptione){e.printStackTrace();returnfalse;}}}代碼說明:該程序為一個郵件發(fā)送通用類的程序,SendMail構造方法實現對發(fā)送郵件身份的認證,獲得Session對象。該方法中SMTPHost、Port、MailUsername、MailPassword分別表示所使用的SMTP服務器、服務器的smtp端口、用戶名和密碼。sendingMimeMail()方法為發(fā)送郵件的方法,在該方法需要傳入的參數中,MailFrom為發(fā)件人電子信箱,MailTo為收件人電子信箱,MailCopyTo為抄送人電子信箱,MailBCopyTo為暗送人電子信箱,MailSubject為發(fā)送郵件主題,MailBody為發(fā)送郵件正文。sendingMimeMail()返回boolean類型,表示是否發(fā)送成功。發(fā)送郵件時先調用構造方法SendMail()創(chuàng)建郵件發(fā)送對象,然后調用sendingMimeMail()方法發(fā)送。項目24用戶注冊時發(fā)送歡迎郵件24.1項目描述與實現(2)實現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>項目24用戶注冊時發(fā)送歡迎郵件24.1項目描述與實現(2)實現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");/**……*省略注冊并寫入數據庫部分*//**注冊成功,發(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/>"+"歡迎您,您已經注冊成功。</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>";項目24用戶注冊時發(fā)送歡迎郵件24.1項目描述與實現(2)實現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;}}

項目24用戶注冊時發(fā)送歡迎郵件24.1項目描述與實現(2)實現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中的配置代碼如下:項目24用戶注冊時發(fā)送歡迎郵件24.2新知識點-JavaMailSMTP

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

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

溫馨提示

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

評論

0/150

提交評論