版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章JSP实用组件
2023/9/171内容提要JSP之所以强大,很大程度上依赖于外部组件的使用。有很多著名的公司开发外部Bean组件,比如SUN公司和IBM公司等本章介绍最常用的组件:Email组件、图形组件和文件上传组件2023/9/172Email组件JavaMail是Sun公司发布用来处理E-mail的API,是一种可选的、用于读取、编写和发送电子消息的包(标准扩展)。使用JavaMail可以创建MUA(邮件用户代理MailUserAgent)MUA依靠MTA(邮件传输代理MailTransferAgent)处理实际的发送任务因此需要设置发件人和收件人的邮箱地址等相应参数,必须学习JavaMail的核心类2023/9/173Email组件中的核心类-Session类Session、Message、Address、Authenticator、Transport、Store和Folder等7个类1.Session类JavaMailAPI中提供了Session类,用于定义保存诸如SMTP主机和认证的信息的基本邮件会话每个基于JavaMail的程序都需要创建一个Session或多个Session对象。所以在创建Session对象前,需要先创建java.util.Properties对象(获取诸如邮件服务器、用户名、密码等共享的信息)Propertiesprops=newProperties();SessionmailSession=Session.getDefaultInstance(props,authenticator);不需要指定认证方式authenticator为null2023/9/174Message类2.Message类Message类是一个抽象类,要使用该抽象类可以使用其子类MimeMessage,该类保存在ernet包实例化MimeMessage类的对象message的代码如下:MimeMessagemsg=newMimeMessage(mailSession);MimeMessage类中常用的方法(1)setText(Stringcontent)用于指定纯文本信息的邮件内容(2)setContent(Objectcontent,Stringtype)用于发送HTML等纯文本以外的信息。content:用于指定邮件内容。type:用于指定邮件内容类型例如message.setContent("你现在好吗","text/plain");2023/9/175Message类(3)setSubject(Stringsubject)用于设置邮件的主题(4)saveChanges()方法能够保证报头域同会话内容保持一致,使用格式如下msg.saveChanges();(5)setFrom()方法用于设置发件人地址。参数为InternetAddress类的一个对象(6)setRecipients(RecipientTypetype,InternetAddressaddress);方法
用于设置收件人地址。两个参数,用于指定收件人类型和收件人地址type:用3个常量来区分收件人的类型。①Message.RecipientType.TO//发送②Message.RecipientType.CC//抄送③Message.RecipientType.BCC//暗送2023/9/176Message类address:收件人地址,可以为InternetAddress类的一个对象或多个对象组成的数组。例如:toAddrs=InternetAddress.parse("wgh8007@163.com",false);msg.setRecipients(Message.RecipientType.TO,toAddrs);(7)setSentDate(Datedate);用于设置发送邮件的时间(8)getContent()方法用于获取消息内容(9)writeTo(OutputStreamos)获取消息内容(包括报头信息),并将其内容写到一个输出流2023/9/177Address类3.Address类
用于设置电子邮件的响应地址。抽象类,可以使用其子类InternetAddress,该类保存在ernet包(1)创建只带有电子邮件地址的地址InternetAddressaddress=newInternetAddress("wgh717@");(2)创建电子邮件地址和附加信息的地址InternetAddressaddress=newInternetAddress("wgh717@","WangGuoHui");说明:JavaMailAPI没有提供检查电子邮件地址有效性的机制。如果需要可以自己编写检查电子邮件地址是否有效的方法。2023/9/178Authenticator类4.Authenticator类
通过用户名和密码来访问受保护的资源是个抽象类,需要创建Authenticator的子类并重载getPasswordAuthentication()方法
然后再实例化新创建的Authenticator的子类,并将其与Session对象绑定:
classWghAuthenticatorextendsAuthenticator{publicPasswordAuthenticationgetPasswordAuthentication(){Stringusername="wgh"; //邮箱登录账号Stringpwd="111"; //登录密码returnnewPasswordAuthentication(username,pwd);}
}Authenticatorauth=newWghAuthenticator();Sessionsession=Session.getDefaultInstance(props,auth);2023/9/179Transport类5.Transport类用于使用指定的协议(通常是SMTP)发送电子邮件首先从指定协议的会话中获取一个特定的实例,然后传递用户名和密码,再发送信息,最后关闭连接,代码如下:Transporttransport=sess.getTransport("smtp");transport.connect(servername,from,password);transport.sendMessage(message,message.getAllRecipients());transport.close();
注意:如果想要查看经过邮件服务器发送邮件的具体命令,可以用session.setDebug(true)方法设置调试标志。2023/9/1710Store类6.Store类代表了存储邮件的邮件服务器。在获取会话后,就可以使用用户名和密码或Authenticator类来连接Store类。与Transport类一样,首先要告诉Store类将使用什么协议:使用POP3协议连接Stroe类,代码如下:使用IMAP协议连接Stroe类,代码如下:Storestore=session.getStore("pop3");store.connect(host,username,password);Storestore=session.getStore("imap");store.connect(host,username,password);说明:如果使用POP3协议,只可以使用INBOX文件夹,但是使用IMAP协议,则可以使用其他的文件夹。2023/9/1711Folder类7.Folder类
连接到Store后,一个Folder对象即目录对象将通过Store的getFolder()方法被返回,可从中读取邮件信息定义了获取(fetch)、备份(copy)、附加(append)及以删除(delete)信息等方法使用Folder类读取完邮件信息后,及时关闭Folder和Store。Folderfolder=store.getFolder("INBOX");folder.open(Folder.READ_ONLY);Messagemessage[]=folder.getMessages();folder.close(Booleanboolean);store.close();2023/9/1712Email组件应用发送Email需要使用JavaMail组件,包含两个jar文件,代码参见工程test6-02将两个jar文件拷贝到lib目录,再编写调用程序mail.jsp发送邮件主要代码如下:注意放在try…catch中处理异常Stringmailserver=...;Stringfrom=...;Stringto=...;//获取邮件信息
//建立邮件会话Propertiespro=newProperties();pro.put("mail.smtp.host",mailserver);pro.put("mail.smtp.auth","true");Sessionsess=Session.getInstance(pro);sess.setDebug(true);//新建一个消息对象MimeMessagemessage=newMimeMessage(sess);
2023/9/1713Email组件应用//设置发件人
InternetAddressfrom_mail=newInternetAddress(from);message.setFrom(from_mail);//设置收件人
InternetAddressto_mail=newInternetAddress(to);message.setRecipient(Message.RecipientType.TO,to_mail);//设置主题
message.setSubject(subject);//设置内容
message.setText(messageText);//设置发送时间
message.setSentDate(newDate());//发送邮件
message.saveChanges();//保证报头域同会话内容保持一致
Transporttransport=sess.getTransport("smtp");transport.connect(mailserver,from,password);transport.sendMessage(message,message.getAllRecipients());transport.close();2023/9/1714Email组件应用修改相应参数,发送邮件的服务器地址strHost、验证用户名strUserName和strPassWord密码工程test6-02测试结果截图:2023/9/1715Email组件应用读取邮件,先获得session,并且连接到了邮箱的相应store,打开相应的Folder,得到想要的邮件,结束时关闭连接。关键代码如下
Stringhost=...;Stringusername=...;Stringpassword=...;Propertiesprops=newProperties();Sessionsession=Session.getDefaultInstance(props,null);Storestore=session.getStore("pop3");store.connect(host,username,password);Folderfolder=store.getFolder("INBOX");folder.open(Folder.READ_ONLY);Messagemessage=folder.getMessages();
Message.writeTo(java.io.OutputStreamos)可用writeTo方法将邮件内容输出到控制台2023/9/1716文件上传下载在Web开发中,文件上传下载是非常实用的功能,Java开发体系中,文件上传功能的实现主要依赖于JavaBean,常用的上传组件是jspsmart(jspSmartUpload)该组件是一个可免费使用的全功能的文件上传下载组件2023/9/1717jspSmartUpload组件中的常用类1.File类用于保存单个上传文件的相关信息,如上传文件的文件名、文件大小、文件数据等,File类的常用方法如下方法说明saveAs()该方法用于保存文件isMissing()该方法用于判断用户是否选择了文件,即表单中对应的<inputtype=“file”>标记实现的文件选择域中是否有值,该方法返回boolean型值,选择了文件时,返回false,否则返回truegetFieldName()获取Form表单中当前上传文件所对应的表单项的名称getFileName()获取文件的文件名,该文件名不包含目录getFilePathName()获取文件的文件全名,获取的值是一个包含目录的完整文件名getFileExt()获取文件的扩展名,即后缀名,不包含“.”符号getContentType()获取文件MIME类型,如“text/plain”getContentString()获取文件的内容,返回值为String型getSize()获取文件的大小,单位byte,返回值为int型getBinaryData(intindex)获取文件数据中参数index指定位置处的一个字节,用于检测文件2023/9/1718jspSmartUpload组件中的常用类saveAs()方法用于保存文件,在File类中两种形式:destFilePathName指定文件保存的路径,包括文件名,其值应以“/”开头。optionSaveAs:保存目标选项。有3个值分别是:SAVEAS_AUTO:则首先以SAVEAS_VIRTUAL方式来保存文件,若Web应用下由destFilePathName参数指定的路径不存在,则以SAVEAS_PHYSICAL方式保存文件SAVEAS_VIRTUAL:以web应用的根目录为文件根目录,然后加上destFilePathName参数指定路径SAVEAS_PHYSICAL:以Web服务器的安装路径中的磁盘根目录为文件根目录加上destFilePathName参数指定路径;或者直接用destFilePathName参数指定路径它们是File类中的静态字段,分别表示整数0、1和2。saveAs(StringdestFilePathName)方法saveAs(StringdestFilePathName,intoptionSaveAs)方法2023/9/1719jspSmartUpload组件中的常用类
(1)使用SAVEAS_VIRTUAL选项值saveAs("/file/myfile.txt",File.SAVEAS_VIRTUAL)或saveAs("/file/myfile.txt",1)
若FileUpDown应用下存在“file”子目录,则将上传的文件以“myfile.txt”为文件名进行保存,实际的保存路径如下:C:\Tomcat6.0\webapps\FileUpDown\file\myfile.txt
若不存在“file”子目录,则抛出下面的异常:Thispathdoesnotexist(1135)
(2)使用SAVEAS_PHYSICAL选项值saveAs("/file/myfile.txt",File.SAVEAS_PHYSICAL)或saveAs("/file/myfile.txt",2)2023/9/1720jspSmartUpload组件中的常用类
因为Tomcat安装在C盘,因此若E盘根目录下存在“file”子目录,则将上传的文件以“myfile.txt”为文件名进行保存,实际的保存路径如下:C:\file\myfile.txt
若C盘根目录下不存在file子目录,而FileUpDown应用的根目录下存在file子目录,则抛出下面的异常:Thepathisnotaphysicalpath
否则抛出1135路径不存在的异常:2023/9/1721jspSmartUpload组件中的常用类
使用SAVEAS_PHYSICAL选项值时,可以将上传的文件保存到由destFilePathName参数指定的一个具体的目录下,如:saveAs("D:/temp/myfile.txt",File.SAVEAS_PHYSICAL)最终文件的实际保存路径如下:D:\temp\myfile.txt
(3)使用SAVEAS_AUTO选项值saveAs("/file/myfile.txt",File.SAVEAS_AUTO)或saveAs("/file/myfile.txt",0)
若FileUpDown应用根目录下存在“file”子目录,则以SAVEAS_VIRTUAL方式保存文件,否则以SAVEAS_PHYSICAL方式保存文件。通常情况下应使用SAVEAS_VIRTUAL方式保存文件,以便程序的移植。2023/9/1722jspSmartUpload组件中的常用类
Files类存储了所有上传的文件,通过类中的方法可获得上传文件的数量和总长度等信息。Files类中的常用方法如下表所示。2.Files类方法说明getCount()获取上传文件的数目,返回值为int型getSize()获取上传文件的总长度,单位byte,返回值为long型getFile(intindex)获取参数index指定位置处的com.jspsmart.upload.File对象getCollection()将所有File对象以Collection形式返回getEnumeration()将所有File对象以Enumeration形式返回2023/9/1723jspSmartUpload组件中的常用类
Files类中的getCollection()方法和getEnumeration()方法将所有的File对象分别以Collection和Enumeartion形式返回,它们的源代码如下。(1)getCollection()方法
将所有File对象以Collection的形式返回,以便其他应用程序引用,该方法的具体代码如下:publicCollectiongetCollection(){returnm_files.values();}m_files:为Files类中的属性,Hashtable类型,存储了所有的File对象。Hashtable类:JAVA提供的一种高级数据结构,用于快速的成对的检索数据,Hashtable不仅可以像Vector一样动态存储一系列的对象,而且对存储的每一个对象(称为值)都要安排另一个对象(称为关键字)与之相关联2023/9/1724jspSmartUpload组件中的常用类(2)getEnumeration()方法
将所有File对象以Enumeration形式返回,以便其他应用程序引用,具体代码如下:publicEnumerationgetEnumeration(){returnm_files.elements();}3.Request类设置该类的目的,是因为当Form表单实现文件上传时,必须将ENCTYPE属性设置为“MULTIPART/FORM-DATA”,此时通过JSP的内置对象request的getParameter()方法无法获取其他表单项的值,所以提供了该类来获取。
参见组件实验——发送带附件的EmailRequest类中提供的方法如下表所示。2023/9/1725jspSmartUpload组件中的常用类方法说明getParameter(Stringname)获取Form表单中由参数name指定表单元素的值如<inputtype=“text”name=“user”>,当该表单元素不存在时,返回nullgetParameterNames()获取Form表单中除<inputtype=“file”>外的所有表单元素的名称,它返回一个枚举型对象getParameterValues(Stringname)获取Form表单中多个具有相同名称的表单元素的值,该名称由参数name指定,该方法返回一个字符串数组ENCTYPE属性:指定将数据回到服务器时浏览器使用的编码类型。
application/x-www-form-urlencoded:窗体数据被编码为名称/值对。默认值。
multipart/form-data:不对字符编码。包含文件上传控件的表单时,必须使用该值。text/plain:窗体数据以纯文本形式进行编码,发送邮件时设置。2023/9/1726jspSmartUpload组件中的常用类利用request类获取表单信息的参考代码:SmartUploadsu=newSmartUpload();su.initialize(config,request,response);su.upload();Stringmailfrom=su.getRequest().getParameter("mailfrom");Stringmailto=su.getRequest().getParameter("mailto");Stringsubject=su.getRequest().getParameter("subject");Stringcontext=su.getRequest().getParameter("context");Stringmailpassword=su.getRequest().getParameter("password");2023/9/1727jspSmartUpload组件中的常用类
SmartUpload类用于实现文件的上传与下载操作,方法有:(1)文件上传与文件下载必须实现的方法使用jspSmartUpload组件实现文件上传与下载时,必须第一步先实现initialize()方法。该方法的3种形式:通常应用第3种形式,该方法中的pageContext参数为JSP的内置对象(页面上下文)。4.SmartUpload类initialize(ServletConfigconfig,HttpServletRequestrequest,HttpServletResponseresponse)//需要用到request、response对象时initialize(ServletContextapplication,HttpSessionsession,HttpServletRequestrequest,HttpServletResponseresponse,JspWriterout)initialize(PageContextpageContext)//常用这种2023/9/1728jspSmartUpload组件中的常用类(2)文件上传使用的方法首先应实现initialize()方法,然后实现如下的两个方法即可将文件上传到服务器中。①upload()方法用来完成一些准备操作。首先在该方法中调用JSP的内置对象request的getInputStream()方法获取客户端的输入流,然后通过该输入流的read()方法读取用户上传的所有文件数据到字节数组中,然后在循环语句中从该字节数组中提取每个文件的数据,并将当前提取出的文件的信息封装到File类对象中,最后将该File类对象通过Files类的addFile()方法添加到Files类对象中。2023/9/1729jspSmartUpload组件中的常用类②save()方法调用该方法就可将全部上传文件保存到指定目录下,并返回保存的文件个数。具有以下两种形式:
第一个方法等同于save(destPathName,0)或save(destPathName,File.SAVE_AUTO)。
实际上在SmartUpload类的save()方法中最终是调用File类中的saveAs()方法保存文件的,所以save()方法中的参数使用与File类的saveAs()方法中的参数使用是相同的。注意:save()方法中option参数指定的保存选项的可选值为SAVE_AUTO,SAVE_VIRTUAL和SAVE_PHYSICAL。是SmartUpload类中的静态字段表示整数0、1和2。而File类中的saveAs()方法的参数为
SAVEAS_AUTO…save(StringdestPathName)save(StringdestPathName,intoption)2023/9/1730jspSmartUpload组件中的常用类通过以上的两个方法就实现了文件的上传。下面介绍SmartUpload类中可用来限制上传文件和获取其他信息的主要方法。①setDeniedFilesList(StringdeniedFilesList)方法
设置禁止上传的文件。参数deniedFilesList:指定禁止上传文件的扩展名,多个扩展名之间以逗号分隔。若禁止上传没有扩展名的文件,以“,,”表示。例如,setDeniedFilesList("exe,jsp,,bat")表示禁止上传*.exe、*.jsp、*.bat和不带扩展名的文件。②setAllowedFilesList(StringallowedFilesList)方法
设置允许上传的文件。参数allowedFilesList:指定允许上传文件的扩展名,多个扩展名之间以逗号分隔。若允许上传没有扩展名的文件,以“,,”表示。例如,setAllowedFilesList("txt,doc,,")表示只允许上传*.txt、*.doc和不带扩展名的文件。2023/9/1731jspSmartUpload组件中的常用类注意:上述的对上传文件进行限制的方法,需在upload()方法之前调用。
下面为SmartUpload类中的获取文件信息的方法。①getSize()方法
用于获取上传文件的总长度,代码如下:③setMaxFileSize(longmaxFileSize)方法
用于设定允许每个文件上传的最大长度,该长度由参数maxFileSize指定。④setTotalMaxFileSize(longtotalMaxFileSize)方法
用于设置允许上传文件的总长度,该长度由参数totalMaxFileSize指定。publicintgetSize(){returnm_totalBytes;}2023/9/1732jspSmartUpload组件中的常用类
m_totalBytes:为SmartUpload类中的属性,表示上传文件的总长度,它是在upload()方法中通过调用JSP内置对象request的getContentLength()方法被赋值的。②getFiles()方法
获取全部上传文件,以Files对象形式返回。③getRequest()方法
获取com.jspsmart.upload.Request对象,然后通过该对象获得上传的表单中其他表单项的值。(3)文件下载使用的方法①setContentDisposition(StringcontentDisposition)方法
该方法用于将数据追加到MIME文件头的CONTENT-DISPOSITION域。
参数contentDisposition为要添加的数据。2023/9/1733jspSmartUpload组件中的常用类
进行文件下载时,将contentDispotition设为null,则组件将自动添加“attachment”,表示将下载的文件作为附件,IE浏览器会弹出“文件下载”对话框,而不是自动打开这个文件(IE浏览器一般根据下载的文件扩展名决定执行什么操作,扩展名为doc的文件将用Word打开)。②downloadFile()方法
实现文件下载,SmartUpload类中提供了以下4种形式的downloadFile()方法:downloadFile(StringsourceFilePathName)downloadFile(StringsourceFilePathName,StringcontentType)downloadFile(StringsourceFilePathName,StringcontentType,StringdestFileName)downloadFile(StringsourceFilePathName,StringcontentType,StringdestFileName,intblockSize)2023/9/1734jspSmartUpload组件中的常用类
sourceFilePathName:用于指定要下载文件的文件名(可带目录,如/file/myfile.txt或E:/file/myfile.text),若该文件名存在当前应用下,则
sourceFilePathName=pageContext.getServletContext().
getRealPath(sourceFilePathName)。contentType:定一个文件内容类型(MIME格式的文件类型信息)。destFileName:指定下载的文件另存为的文件名。blockSize:指定存储读取的文件数据的字节数组的大小,默认值为65000。通常使用第一种方法,如果需要更改文件的内容类型,或者更改下载文件另存为的文件名,或者更改用来存储读取的文件数据的字节数组的大小时,可应用后面的三种方法。2023/9/1735使用jspsmart组件实现文件上传2023/9/1736使用jspsmart组件实现文件上传文件上传的关键代码,参加test6_03FORMENCTYPE="MULTIPART/FORM-DATA"METHOD=“POST”ACTION=“servlet/servletUpload”>或者是jsp文件…SmartUploadmySmartUpload=newSmartUpload();//初始化mySmartUpload.initialize(config,request,response);//上载mySmartUpload.upload();//保存上载文件到指定目录//PATH为form表单提交过来的count=mySmartUpload.save(mySmartUpload.getRequest().getParameter("PATH"));//显示处理结果out.println(count+"fileuploaded.");}2023/9/1737使用jspsmart组件实现文件下载2023/9/1738使用jspsmart组件实现文件下载文件下载的关键代码,参见工程sy04或者实验download.jspSmartUploadsu=newSmartUpload();su.initialize(pageContext);su.setContentDisposition(null);su.downloadFile("e:/upload/计算机工程系电话簿071016.doc");2023/9/1739国际化的问题国际化,又称I18N,因为英文的国家化是Internationalization,它以I开始,以N结束,共18个字母。本地化,又称L10N,英文的意思是Localization。国际化的问题主要包含以下的内容为:日期、时间;数字;货币;其他一些特殊的字符。也就是说,不同的Locale,显示日期、时间的格式是不一样的。当然,不同的语言有自己不同的字符集。HTML中的字符实体和XML的语言保持一致。它定义了用特定的字符序列显示单字符的功能,这种字符序列成为字符实体,它以“&”开头,以“;”结束。例如,©表示字符“©”。比如使用字符实体编写一个西班牙语的“HelloWorld!”2023/9/1740显示为西班牙语packageI18N;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHello1extendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsIOException,ServletException{response.setContentType("text/html;charset=iso-8859-1");response.setHeader("Content-Language","es");PrintWriterout=response.getWriter();out.println("<html><head><title>EnEspañol</title></head>");out.println("<body>");out.println("<h3>Enespañol:</h3>");out.println("¡HolaMundo!");out.println("</body></html>"); }}2023/9/1741Locale(地域)Locale(地域)是指具有相同风俗、文化和语言的区域。如果应用程序没有把I18N作为内嵌的功能,当需要支持新的Locale时,必须对嵌入在源代码中的文本、图片和消息进行修改,然后重新编译源代码。当这个应用需要支持新的Locale时,重复这些步骤,降低了软件开发的效率。java.util.Locale类是Java最重要的I18N类,几乎所有对国际化和本地化的支持都依赖于这个类。Locale类的实例代表一种特定的语言和地区。如果Java类库中的某个类运行时需要根据Locale对象来调整,那么就称这个类为地域敏感的(Locale-Sensitive)。如,Java.text.DateFormat类就是地域敏感的。(在.NET中存在类似Locale的类CultureInfo,被翻译为文化信息)创建Locale对象时,需要明确指定其语言和国家代码。下面的代码分别创建了中国和美国的Locale对象。2023/9/1742LocaleusLocale=newLocale("en","US");LocalechLocale=newLocale("ch","CH");关于Locale的更多介绍,可以查看JDK帮助文档。这里实现一个支持多国语言的HelloWorld。由两个文件组成:一个是用来发送请求的HTML文件,choose.htm。它向Servlet发送关于不同国家语言类型的请求。一个是Hello3.java。Servlet接收请求,然后进行处理,用不同国家的语言显示“你好世界”。2023/9/1743用于MD5算法加密的JavaBeanMD5算法是一种单向加密算法,曾经广泛应用于电子商务中,现在虽然已经被中国人找出了漏洞,可以伪造数字签名。但是,它的应用依然在现实世界中广泛存在着。在JDK中,没有提供实现MD5加密算法的类,这里提供一个实现MD5加密算法的JavaBean,供编程时使用。2023/9/1744使用MD5进行加密
<jsp:useBeanid="md5"class="md5.keyBean"/><% Strings="Howareyou!"; out.print("Beforemd5:"+s+"<br>"); s=md5.getkeyBeanofStr(s); out.print("Aftermd5:"+s);%>2023/9/1745图片添加水印有时候,需要在程序中向图片上面写一些文字,称之为“水印”。经常可以看到许多网站的图片上面写着网站的名称和地址,采用程序可以自动添加。这里使用一个JavaBean,名为WaterMark,来实现这项技术。2023/9/1746图表系统统计分析系统是B/S项目中的一项重要功能,通常需要给用户展示直观的图表。生成基于浏览器的图表方式比较多,常用的有两种方式:1.通过客户端的Applet来产生图表。Applet可以使用AWT等图形接口,服务器端将产生的结果发送给浏览器,将画图数据作为参数传递给Applet,然后启动客户端的JVM进行画图。这种方式也对客户端要求比较高,必须要有JRE,而且通过applet生成的图表在加载过程中会有个Java的Log动画,用户看了可能会感觉不太舒服。2023/9/1747图表系统2.通过服务端直接生成图表的图片。这种方式对客户端几乎没有什么要求,缺点是加重了服务端的负担,对服务端要求就相对高了点。这种方式来开发图表,可以缩短开发周期、节约成本。目前通常选择第二种方案。在服务器直接生成图表,一般需要特定的插件,生成插件的工具很多,有不少是商业项目,需要收取一定的费用。在开源的项目中,JFreeChart(/)比较常用。它是一个免费创建图表的Java工具,它可以生成各式各样的图表。这些图表包括饼图、柱状图、线形图、区域图以及甘特图等等,基本可以满足各种项目的要求。2023/9/1748JFreeChart简介JFreeChart主要用来开发各种各样的图表,可用于Servlet、JSP、Applet和JavaAppication环境中,通过JDBC可动态显示任何数据库数据,可以输出至PDF文件。JFreeChart公司的主要产品包括4类:(1)JFreeReport报表解决工具;(2)JFreeChart图形解决方案;(3)JCommon公共类库;(4)JFreeDesigner报表设计工具。可以从官方网站上获取最新版本和相关资料。2023/9/1749JFreeChart配置安装解压jfreechart-1.0.x.zip.到指定位置,其中source目录是jfreechart的源码,jfreechart-1.0.x-demo.jar是例子程序,需要关注的文件有如下三个:jfreechart-1.0.x.jar、jcommon-1.0.x.jar、gnujaxp.jar。如果是Application开发,要将三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入…如果是WEB开发,比如使用Tomcat作为服务器,需要把上述三个文件拷贝到WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml文件,2023/9/1750JFreeChart配置安装
<servlet> <servlet-name>DisplayChart</servlet-name> <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class> </servlet> <servlet-mapping> <servlet-name>DisplayChart</servlet-name> <url-pattern>/servlet/DisplayChart</url-pattern> </servlet-ma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机电科劳动纪律考核制度
- 办事服务进大厅考核制度
- 单位扫雪考核制度及流程
- 美容业销售绩效考核制度
- 新录用人员跟踪考核制度
- 组织与员工绩效考核制度
- 篮球教练员教学考核制度
- 洒水车及垃圾清理车考核制度
- 织布厂文明生产考核制度
- 财政所年度目标考核制度
- 2025年高中数学第五章《三角函数》综合检测卷(基础A卷)(原卷版)
- 《中国传统文化》教案:中国古代礼仪(4课时)
- 蓬莱市福峰物资有限公司 西南王金矿(扩界、扩能)项目 环境影响报告书
- DB1331T 084-2024雄安新区建筑智能配用电技术标准
- 托管教师聘用合同范本
- 2025山西新华书店集团限公司社会招聘154人易考易错模拟试题(共500题)试卷后附参考答案
- 功能食品设计实验
- 我们为什么要努力学习-励志主题班会(课件)
- 佛吉亚卓越体系知识手册
- 《抖音运营》课件-8.抖音短视频数据分析与运营策略优化
- 每天学点面诊手诊秘诀:一分钟揽镜自测人体异状一看便知
评论
0/150
提交评论