




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块7组件应用及常用模块JavaWeb程序设计“十三五”职业教育国家规划教材配套资源目录项目23带在线编辑器的信息发布模块制作项目24用户注册时发送欢迎邮件项目25上传文件模块制作项目26缩略图制作项目27验证码的制作项目28密码的加密与解密小结习题项目23带在线编辑器的信息发布模块制作23.1项目描述与实现(1)描述一般在进行信息在线编辑时,需要插入图片,进行文字排版等,使显示的时候以固定排版格式显示,因此,需要在录入时,能够允许进行信息的在线样式编辑在JSP中,可采用Ueditor在线编辑器实现以上描述功能项目23带在线编辑器的信息发布模块制作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带在线编辑器的信息发布模块制作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带在线编辑器的信息发布模块制作23.1项目描述与实现运行效果项目23带在线编辑器的信息发布模块制作23.2新知识点-Web在线编辑器在线编辑器是指用于在线编辑的工具,编辑的内容是基于HTML的文档。Web在线编辑器可用于在线编辑HTML的文档,因此,它经常被用于留言板留言、论坛发贴、Blog编写日志、文章发布等需要用户输入普通HTML的地方。目前Web在线编辑器有很多,比较常用的有如下几个。(1)UEditor(2)CKEditor(3)YUIEditor项目23带在线编辑器的信息发布模块制作23.2新知识点-UEditor常用API(1)getEditor(),实例化编辑器,其使用格式为:varue=UE.getEditor('container');使用如:<scripttype="text/javascript">
varue=UE.getEditor('ArtContent');</script>表示实例化编辑器到id为ArtContent的dom容器上。项目23带在线编辑器的信息发布模块制作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带在线编辑器的信息发布模块制作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带在线编辑器的信息发布模块制作23.3扩展1-修改信息时采用在线编辑器项目23带在线编辑器的信息发布模块制作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带在线编辑器的信息发布模块制作23.4扩展2——简洁的在线编辑器代码说明:本程序采用简洁的编辑器。采用toolbars配置其工具按钮,需要哪个就可以配置哪个。主要代码为:toolbars:[['fullscreen','source','undo','redo','bold']],本程序配置了5个工具按钮,即全屏、源码、撤销、重做、字体加粗。其他更多的工具按钮使用,可以依次设置进去,其余按钮见UEditor配置文件ueditor.config.js。
项目24用户注册时发送欢迎邮件24.1项目描述与实现(1)描述在网站注册成功后,会发送邮件到注册者邮箱,提示注册成功项目24用户注册时发送欢迎邮件24.1项目描述与实现(2)实现1.下载并加载JavaMailAPI2.编写邮件身份验证类3.编写发送邮件类4.编写注册表单5.编写注册Servlet,包括发邮件功能项目24用户注册时发送欢迎邮件24.1项目描述与实现(2)实现1.下载并加载JavaMailAPI收发邮件需要下载JavaMailAPI并加载到服务器后,才可以正常执行。JavaMailAPI目前的版本为JavaMailAPI1.4.3。可以从如下地址下载:/products/javamail/downloads/index.html下载后,解压并找到mail.jar文件,将其复制到项目的WEB-INF/lib/文件夹下,如直接加载到Web服务器,则复制到Tomcat安装目录下的lib文件夹中。
项目24用户注册时发送欢迎邮件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用户注册时发送欢迎邮件24.1项目描述与实现(2)实现3.编写发送邮件类publicclassSendMail{privatePropertiesprops;//系统属性privateSessionmailSession;//邮件会话对象privateMimeMessagemimeMsg;//MIME邮件对象publicSendMail(StringSMTPHost,StringPort,StringMailUsername,
StringMailPassword){
Authau=newAuth(MailUsername,MailPassword);//设置系统属性props=java.lang.System.getProperties();//获得系统属性对象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{//创建MIME邮件对象mimeMsg=newMimeMessage(mailSession);mimeMsg.setFrom(newInternetAddress(MailFrom));//设置发信人//设置收信人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);//发送邮件returntrue;}catch(Exceptione){e.printStackTrace();returnfalse;}}}代码说明:该程序为一个邮件发送通用类的程序,SendMail构造方法实现对发送邮件身份的认证,获得Session对象。该方法中SMTPHost、Port、MailUsername、MailPassword分别表示所使用的SMTP服务器、服务器的smtp端口、用户名和密码。sendingMimeMail()方法为发送邮件的方法,在该方法需要传入的参数中,MailFrom为发件人电子信箱,MailTo为收件人电子信箱,MailCopyTo为抄送人电子信箱,MailBCopyTo为暗送人电子信箱,MailSubject为发送邮件主题,MailBody为发送邮件正文。sendingMimeMail()返回boolean类型,表示是否发送成功。发送邮件时先调用构造方法SendMail()创建邮件发送对象,然后调用sendingMimeMail()方法发送。项目24用户注册时发送欢迎邮件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>注册并发送欢迎邮件测试</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用户注册时发送欢迎邮件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");/**……*省略注册并写入数据库部分*//**注册成功,发送欢迎邮件*/if(sendmail(email,username)){msg="邮件发送成功";}else{msg="邮件发送失败";}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用户注册时发送欢迎邮件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用户注册时发送欢迎邮件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用户注册时发送欢迎邮件24.2新知识点-JavaMailSMTP
SMTP(SimpleMailTransferProtocol,简单邮件传输协议)由RFC821定义。它定义了发送电子邮件的机制。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)创建论文提交页面。在WebContent\chapter7文件夹中创建一个名为exam25_1_uploadPaper.jsp的JSP页面,该页面为文件上传表单页面。(4)编写servlet,完成文件上传功能。在源文件夹下的chapter7包中创建一个servlet类PaperUpload_do,该类中的文件上传处理思路为:首先获取stuNum、stuName、title(分别表示学号、姓名、标题)这三个普通表单域的值,然后在将用户上传的文件存储到服务器磁盘上时使用上述三个表单域的值组合成文件的名字。(5)在web.xml中配置上述servlet。(6)测试。项目25上传文件模块制作25.1项目描述与实现(2)项目实现:重点代码见课本代码分析:由程序7-7可知请求是通过post方法发出的,所以这里只需写doPost方法即可。在该方法中,首先用ServletFileUpload类的静态方法isMultipartContent(request)判断request消息中的表单类型是否是“multipart/form-data”,如果是,才进行下面的文件上传处理。savedPath和tempPath这两个File对象分别表示存储上传文件的文件夹以及临时文件夹。factory.setSizeThreshold(4*1024)将文件处理工厂的缓冲区大小设为4kb,在文件正式存储到磁盘上之前,如果文件小于等于4kb,则文件保存在内存中;如果文件大于4kb,则将文件暂时存储在临时文件夹。ServletFileUpload的parseRequest方法可以将request中包含的所有表单项解析到一个由FileItem组成的List中(每个表单项解析成一个FileItem对象)。fileItem.write(savedFile);能将文件域的内容存储到savedFile所对应的磁盘文件中,如果该文件在磁盘中不存在,则会创建新文件;如果已存在,则原文件的内容将会被覆盖。项目25上传文件模块制作25.1项目描述与实现(2)项目实现:项目25上传文件模块制作25.1项目描述与实现(2)项目实现:2.使用servlet3.0接口上传文件重点代码见课本代码分析:首先使用@MultipartConfig注解来对上传操作相关的一些参数进行了配置:@MultipartConfig(fileSizeThreshold=4*1024,location="D:/uploadDir",maxFileSize=10000*1024),表示文件的缓冲区大小为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对象时,如果上传的文件大小小于规定临界值时,则直接将文件内容保存在内存中;如果文件size大于规定值时,则将文件存储在临时文件夹中。属性: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扩展——下载实现文件下载功能。当用户点击下载页面的文件下载按钮或链接时,能弹出文件下载对话框,用户能够将服务器上的相关文件下载到客户机上。代码见课本代码分析该文件下载功能实现的流程是:首先根据下载页面传递过来的文件名参数,查找服务器的特定路径下是否存在该文件,如果不存在的话向用户报错“xxx文件不存在”,然后返回,不再执行下面的操作。如果存在,则使用一个FileInputStream(文件输入流)从服务器的文件存储路径下读取要下载的相关文件,再把该输入流的内容以1kb为单位循环写入到一个当前响应的ServletOutputStream输出流中。“response.setContentType("binary/octet-stream");”将响应的MIME类型设置为8位格式的二进制流。“response.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代码分析:该类能够依据三种方式生成缩略图:固定缩略图的宽度、固定缩略图的高度、按缩小比例。且优先级依次降低,即如果设定了缩略图的宽度,那么就按照该宽度来同比例缩小高度生成缩略图;如果没设定缩略图宽度,才依次考虑使用后两种方式。该类的核心方法是doFinal(Stringpic_big_pathfilename,Stringpic_small_pathfilename),其余的都是相关参数的set方法。该方法通过javax.imageio.ImageIO类的静态方法从磁盘文件中将图片读取到内存中,存储在一个java.awt.image.BufferedImage对象中,然后通过java.awt.image.AffineTransformOp对象的filter(BufferedImagesrc,BufferedImagedst)方法转换源BufferedImage并将结果存储在目标BufferedImage中。当参数不合符要求或者执行中出现IOException异常时,程序7-15都抛出JpegToolException来中断程序执行,这是一个自定义的异常。项目26缩略图制作26.1项目描述与实现(2)实现过程2定义异常类JpegToolException3创建图片上传页面exam26_1_uploadImage.jsp4编写Servlet类ImageUpload_do,该类的doPost方法用来处理图片上传、生成缩略图以及向用户返回响应的工作5在web.xml中配置上述Servlet6测试项目26缩略图制作26.1项目描述与实现(2)实现过程项目26缩略图制作26.2新知识点——缩略图原理1.使用javax.imageio.ImageIO类的静态方法BufferedImageread(Fileinput)从磁盘文件中将图片读取到内存中,存储在一个java.awt.image.BufferedImage对象中;2.构建一个仿射变换对象java.awt.geom.AffineTransform。然后确定目标图片与原图片的宽度比例以及高度比例,依据这两维的缩放比例调用AffineTransform的setToScale(float,float)方法将此变换设置为缩放变换。3.根据上面的仿射变换对象构造出一个java.awt.image.AffineTransformOp对象,该对象能够使用仿射转换来执行从源图像到目标图像的线性映射。具体使用的方法是filter(BufferedImagesrc,BufferedImagedst),此方法将转换源BufferedImage并将结果存储在目标BufferedImage中。4.使用ImageIO类的write方法将转换好的目标BufferedImage以一定的图片类型写到磁盘文件上。项目26缩略图制作26.3扩展——图片增加水印给用户上传的图片添加水印。当用户在图片上传页面填写用户名并从客户端选择文件提交上传请求后,服务器能够将用户上传的图片存储到服务器的特定路径下,并能够将用户名以水印的形式标记到图片上,存储该水印图片并打印到响应页面。实现(1)编写为图片添加水印标记的工具类。代码如程序7-20所示。(2)创建图片上传页面exam26_3_uploadImage2.jsp(3)编写Servlet类ImageUploadAndMark_do,该类的doPost方法用来处理图片上传、为图片添加水印标记以及向用户返回响应的工作。(4)在web.xml中配置上述Servlet(5)测试代码分析:该类提供了两个为图片添加文字水印的方法,其中一个是无旋转角度设置的方法,另一个可以设置水印的旋转角度,实际上前一个方法只需简单调用后一个方法即可(使旋转角度参数为null)。添加水印的设计思路为:读取源图片文件产生一个BufferedImage,然后为该用该Image对象创建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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 面瘫的评估与护理
- 预防学生心理健康主题班会
- 电厂机务培训课件
- 预防医学:食物中毒及其防治
- 2022山西省对口升学语文真题(含答案)
- 广西中医药大学《英语语言素质拓展》2023-2024学年第一学期期末试卷
- 2025年江苏省横林高级中学高考生物试题命题揭秘与专题练析含解析
- 邵阳工业职业技术学院《生物信息学导论上机实验》2023-2024学年第二学期期末试卷
- 遂宁职业学院《市场实践项目创作》2023-2024学年第二学期期末试卷
- 昆明文理学院《半导体材料与器件》2023-2024学年第二学期期末试卷
- 2023年一二级建造师解聘证明
- GB 15763.4-2009建筑用安全玻璃第4部分:均质钢化玻璃
- 设备润滑管理基础知识培训教材
- 哈克贝利·费恩历险记(课堂)课件
- 小班 社会语言 懂礼貌的好宝宝 课件(互动版)
- 四川省生育登记表(样表)
- 医疗护理品管圈QCC成果汇报之提高住院病人健康宣教的知晓率(问题解决型)
- DB34-T 4243-2022 智慧医院医用耗材SPD验收规范
- 5.4直线式感应同步器解析课件
- 煤矿“双回路”供电保障专项整治实施方案
- 航空航天概论(课堂PPT)
评论
0/150
提交评论