??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一区免费在线观看,婷婷久久久亚洲欧洲日产国码AV,亚洲一区二区影视http://www.tkk7.com/bainian/category/12242.html癑ֹ的酒香,癑ֹ的树诚,癑ֹ的…?/description>zh-cnWed, 28 Feb 2007 07:48:13 GMTWed, 28 Feb 2007 07:48:13 GMT60jspSmartUpload上传下蝲全攻?/title><link>http://www.tkk7.com/bainian/articles/63075.html</link><dc:creator>癑ֹ</dc:creator><author>癑ֹ</author><pubDate>Fri, 11 Aug 2006 10:55:00 GMT</pubDate><guid>http://www.tkk7.com/bainian/articles/63075.html</guid><wfw:comment>http://www.tkk7.com/bainian/comments/63075.html</wfw:comment><comments>http://www.tkk7.com/bainian/articles/63075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/bainian/comments/commentRss/63075.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/bainian/services/trackbacks/63075.html</trackback:ping><description><![CDATA[ <span id="3pn3fbb" class="unnamed3"> <span id="bphxvxp" class="myp11"> <font id="zoom"> <font size="2"> <b>一、安装篇</b> <br /> <br />  jspSmartUpload是由www.jspsmart.com|站开发的一个可免费使用的全功能的文件上传下载组Ӟ适于嵌入执行上传下蝲操作的JSP文g中。该lg有以下几个特点: <br /><br />1、用简单。在JSP文g中仅仅书写三五行JAVA代码可以搞定文件的上传或下载,方便?<br /><br />2、能全程控制上传。利用jspSmartUploadlg提供的对象及其操作方法,可以获得全部上传文g的信息(包括文g名,大小Q类型,扩展名,文g数据{)Q方便存取?<br /><br />3、能对上传的文g在大、类型等斚w做出限制。如此可以o掉不W合要求的文件?<br /><br />4、下载灵zR仅写两行代码,p把Web服务器变成文件服务器。不文件在Web服务器的目录下或在其它Q何目录下Q都可以利用jspSmartUploadq行下蝲?<br /><br />5、能文件上传到数据库中Q也能将数据库中的数据下载下来。这U功能针对的是MYSQL数据库,因ؓ不具有通用性,所以本文不准备举例介绍q种用法?<br /><br />  jspSmartUploadlg可以从www.jspsmart.com|站上自׃载,压羃包的名字是jspSmartUpload.zip。下载后Q用WinZip或WinRAR其解压到Tomcat的webapps目录下(本文以Tomcat服务器ؓ例进行介l)。解压后Q将webapps/jspsmartupload目录下的子目录Web-inf名字改ؓ全大写的WEB-INFQ这样一改jspSmartUploadcL能用。因为TomcatҎ件名大小写敏感,它要求Web应用E序相关的类所在目录ؓWEB-INFQ且必须是大写。接着重新启动TomcatQ这样就可以在JSP文g中用jspSmartUploadlg了?<br /><br />  注意Q按上述Ҏ安装后,只有webapps/jspsmartupload目录下的E序可以使用jspSmartUploadlgQ如果想让Tomcat服务器的所有Web应用E序都能用它Q必d如下工作Q?<br /><br />1Q进入命令行状态,目录切换到Tomcat的webapps/jspsmartupload/WEB-INF目录下?<br /><br />2Q运行JAR打包命oQjar cvf jspSmartUpload.jar com <br /><br />Q也可以打开资源理器,切换到当前目录,用WinZipcom目录下的所有文件压~成jspSmartUpload.zipQ然后将jspSmartUpload.zip换名为jspSmartUpload.jar文g卛_。) <br /><br />3Q将jspSmartUpload.jar拯到Tomcat的shared/lib目录下?<br /><br /><b>二、相关类说明?/b><br /><br /><b>?Filec?/b><br /><br />  q个cd装了一个上传文件的所有信息。通过它,可以得到上传文g的文件名、文件大、扩展名、文件数据等信息?<br /><br />  FilecM要提供以下方法: <br /><br />1、saveAs作用Q将文g换名另存?<br /><br />原型Q?<br /><br />public void saveAs(java.lang.String destFilePathName) <br /><br />?<br /><br />public void saveAs(java.lang.String destFilePathName, int optionSaveAs) <br /><br />其中QdestFilePathName是另存的文g名,optionSaveAs是另存的选项Q该选项有三个|分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUALQSAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系l的根目录ؓ文g根目录另存文ӞSAVEAS_VIRTUAL表明以Web应用E序的根目录为文件根目录另存文gQSAVEAS_AUTO则表Clg军_Q当Web应用E序的根目录存在另存文g的目录时Q它会选择SAVEAS_VIRTUALQ否则会选择SAVEAS_PHYSICAL?<br /><br />例如QsaveAs("/upload/sample.zip",SAVEAS_PHYSICAL)执行后若Web服务器安装在C盘,则另存的文g名实际是c:\upload\sample.zip。而saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)执行后若Web应用E序的根目录是webapps/jspsmartuploadQ则另存的文件名实际是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVEAS_AUTO)执行时若Web应用E序根目录下存在upload目录Q则其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)Q否则同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)?<br /><br />Q对于WebE序的开发来_最好用SAVEAS_VIRTUALQ以便移植?<br /><br />2、isMissing <br /><br />作用Q这个方法用于判断用h否选择了文Ӟ也即对应的表单项是否有倹{选择了文件时Q它q回false。未选文件时Q它q回true?<br /><br />原型Qpublic boolean isMissing() <br /><br />3、getFieldName <br /><br />作用Q取HTML表单中对应于此上传文件的表单的名字?<br /><br />原型Qpublic String getFieldName() <br /><br />4、getFileName <br /><br />作用Q取文g名(不含目录信息Q?<br /><br />原型Qpublic String getFileName() <br /><br />5、getFilePathName <br /><br />作用Q取文g全名Q带目录Q?<br /><br />原型Qpublic String getFilePathName <br /><br />6、getFileExt <br /><br />作用Q取文g扩展名(后缀Q?<br /><br />原型Qpublic String getFileExt() <br /><br />7、getSize <br /><br />作用Q取文g长度Q以字节计) <br /><br />原型Qpublic int getSize() <br /><br />8、getBinaryData <br /><br />作用Q取文g数据中指定位Ud的一个字节,用于文件等处理?<br /><br />原型Qpublic byte getBinaryData(int index)。其中,index表示位移Q其值在0到getSize()-1之间?<br /><br /><b>?Filesc?/b><br /><br />  q个c表C所有上传文件的集合Q通过它可以得C传文件的数目、大等信息。有以下ҎQ?<br /><br />1、getCount <br /><br />作用Q取得上传文件的数目?<br /><br />原型Qpublic int getCount() <br /><br />2、getFile <br /><br />作用Q取得指定位Ud的文件对象FileQ这是com.jspsmart.upload.FileQ不是java.io.FileQ注意区分)?<br /><br />原型Qpublic File getFile(int index)。其中,index为指定位U,其值在0到getCount()-1之间?<br /><br />3、getSize <br /><br />作用Q取得上传文件的总长度,可用于限制一ơ性上传的数据量大?<br /><br />原型Qpublic long getSize() <br /><br />4、getCollection <br /><br />作用Q将所有上传文件对象以Collection的Ş式返回,以便其它应用E序引用Q浏览上传文件信息?<br /><br />原型Qpublic Collection getCollection() <br /><br />5、getEnumeration <br /><br />作用Q将所有上传文件对象以EnumerationQ枚举)的Ş式返回,以便其它应用E序览上传文g信息?<br /><br />原型Qpublic Enumeration getEnumeration() <br /><br /><b>?Requestc?/b><br /><br />  q个cȝ功能{同于JSP内置的对象request。只所以提供这个类Q是因ؓ对于文g上传表单Q通过request对象无法获得表单的|必须通过jspSmartUploadlg提供的Request对象来获取。该cL供如下方法: <br /><br />1、getParameter <br /><br />作用Q获取指定参C倹{当参数不存在时Q返回gؓnull?<br /><br />原型Qpublic String getParameter(String name)。其中,name为参数的名字?<br /><br />2、getParameterValues <br /><br />作用Q当一个参数可以有多个值时Q用此方法来取其倹{它q回的是一个字W串数组。当参数不存在时Q返回gؓnull?<br /><br />原型Qpublic String[] getParameterValues(String name)。其中,name为参数的名字?<br /><br />3、getParameterNames <br /><br />作用Q取得Request对象中所有参数的名字Q用于遍历所有参数。它q回的是一个枚丑֞的对象?<br /><br />原型Qpublic Enumeration getParameterNames() <br /><br /><b>?SmartUploadc?/b>q个cd成上传下载工作?<br /><br /><b>AQ上传与下蝲q的方法:</b><br /><br />只有一个:initialize?<br /><br />作用Q执行上传下载的初始化工作,必须W一个执行?<br /><br />原型Q有多个Q主要用下面这个: <br /><br />public final void initialize(javax.servlet.jsp.PageContext pageContext) <br /><br />其中QpageContext为JSP面内置对象Q页面上下文Q?<br /><br /><b>BQ上传文件用的ҎQ?/b><br /><br />1、upload <br /><br />作用Q上传文件数据。对于上传操作,W一步执行initializeҎQ第二步p执行q个Ҏ?<br /><br />原型Qpublic void upload() <br /><br />2、save <br /><br />作用Q将全部上传文g保存到指定目录下Qƈq回保存的文件个数?<br /><br />原型Qpublic int save(String destPathName) <br /><br />和public int save(String destPathName,int option) <br /><br />其中QdestPathName为文件保存目录,optionZ存选项Q它有三个|分别是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。(同FilecȝsaveAsҎ的选项之值类|SAVE_PHYSICAL指示lg文件保存到以操作系l根目录为文件根目录的目录下QSAVE_VIRTUAL指示lg文件保存到以Web应用E序根目录ؓ文g根目录的目录下,而SAVE_AUTO则表C由lg自动选择?<br /><br />注:save(destPathName)作用{同于save(destPathName,SAVE_AUTO)?<br /><br />3、getSize <br /><br />作用Q取上传文g数据的总长?<br /><br />原型Qpublic int getSize() <br /><br />4、getFiles <br /><br />作用Q取全部上传文gQ以Files对象形式q回Q可以利用Filescȝ操作Ҏ来获得上传文件的数目{信息?<br /><br />原型Qpublic Files getFiles() <br /><br />5、getRequest <br /><br />作用Q取得Request对象Q以便由此对象获得上传表单参C倹{?<br /><br />原型Qpublic Request getRequest() <br /><br />6、setAllowedFilesList <br /><br />作用Q设定允怸传带有指定扩展名的文Ӟ当上传过E中有文件名不允许时Q组件将抛出异常?<br /><br />原型Qpublic void setAllowedFilesList(String allowedFilesList) <br /><br />其中QallowedFilesList为允怸传的文g扩展名列表,各个扩展名之间以逗号分隔。如果想允许上传那些没有扩展名的文gQ可以用两个逗号表示。例如:setAllowedFilesList("doc,txt,,")允怸传带doc和txt扩展名的文g以及没有扩展名的文g?<br /><br />7、setDeniedFilesList <br /><br />作用Q用于限制上传那些带有指定扩展名的文件。若有文件扩展名被限Ӟ则上传时lg抛出异常?<br /><br />原型Qpublic void setDeniedFilesList(String deniedFilesList) <br /><br />其中QdeniedFilesList为禁止上传的文g扩展名列表,各个扩展名之间以逗号分隔。如果想止上传那些没有扩展名的文gQ可以用两个逗号来表C。例如:setDeniedFilesList("exe,bat,,")禁止上传带exe和bat扩展名的文g以及没有扩展名的文g?<br /><br />8、setMaxFileSize <br /><br />作用Q设定每个文件允怸传的最大长度?<br /><br />原型Qpublic void setMaxFileSize(long maxFileSize) <br /><br />其中QmaxFileSizeZؓ每个文g允许上传的最大长度,当文件超出此长度Ӟ不被上传?<br /><br />9、setTotalMaxFileSize <br /><br />作用Q设定允怸传的文g的总长度,用于限制一ơ性上传的数据量大?<br /><br />原型Qpublic void setTotalMaxFileSize(long totalMaxFileSize) <br /><br />其中QtotalMaxFileSize为允怸传的文g的总长度?br /><br /><font size="3"><strong>CQ下载文件常用的Ҏ</strong><br /><br />1、setContentDisposition <br /><br />作用Q将数据q加到MIME文g头的CONTENT-DISPOSITION域。jspSmartUploadlg会在q回下蝲的信息时自动填写MIME文g头的CONTENT-DISPOSITION域,如果用户需要添加额外信息,L此方法?<br /><br />原型Qpublic void setContentDisposition(String contentDisposition) <br /><br />其中QcontentDispositiond的数据。如果contentDisposition为nullQ则lg自动添?attachment;"Q以表明下载的文g作ؓ附gQ结果是IE览器将会提C另存文Ӟ而不是自动打开q个文gQIE览器一般根据下载的文g扩展名决定执行什么操作,扩展名ؓdoc的将用wordE序打开Q扩展名为pdf的将用acrobatE序打开Q等{)?<br /><br />2、downloadFile <br /><br />作用Q下载文件?<br /><br />原型Q共有以下三个原型可用,W一个最常用Q后两个用于Ҏ情况下的文g下蝲Q如更改内容cdQ更改另存的文g名)?<br /><br />?public void downloadFile(String sourceFilePathName) <br /><br />其中QsourceFilePathName下蝲的文件名Q带目录的文件全名) <br /><br />?public void downloadFile(String sourceFilePathName,String contentType) <br /><br />其中QsourceFilePathName下蝲的文件名Q带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被览器识别)?<br /><br />?public void downloadFile(String sourceFilePathName,String contentType,String destFileName) <br /><br />其中QsourceFilePathName下蝲的文件名Q带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被览器识别),destFileNameZ载后默认的另存文件名?<br /><br /><b>三、文件上传篇</b><br /><br /><b>?表单要求</b><br /><br />对于上传文g的FORM表单Q有两个要求Q?<br /><br />1、METHOD应用POSTQ即METHOD="POST"?<br /><br />2、增加属性:ENCTYPE="multipart/form-data" <br /><br />下面是一个用于上传文件的FORM表单的例子: <br /><br /></font><p></p><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code><FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="/jspSmartUpload/upload.jsp"> <INPUT TYPE="FILE" NAME="MYFILE"> <INPUT TYPE="SUBMIT"> </FORM></ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br /><b>?上传的例?/b><br /><br /><b>1、上传页面upload.html</b><br /><br />本页面提供表单,让用户选择要上传的文gQ点?上传"按钮执行上传操作?<br /><br />面源码如下Q?<br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code><!-- 文g名:upload.html ? 者:U|软g制作中心雨亦?zhsoft88@sohu.com) --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>文g上传</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <p>&nbsp;</p> <p align="center">上传文g选择</p> <FORM METHOD="POST" ACTION="jsp/do_upload.jsp" ENCTYPE="multipart/form-data"> <input type="hidden" name="TEST" value="good"> <table width="75%" border="1" align="center"> <tr> <td><div align="center">1? <input type="FILE" name="FILE1" size="30"> </div></td> </tr> <tr> <td><div align="center">2? <input type="FILE" name="FILE2" size="30"> </div></td> </tr> <tr> <td><div align="center">3? <input type="FILE" name="FILE3" size="30"> </div></td> </tr> <tr> <td><div align="center">4? <input type="FILE" name="FILE4" size="30"> </div></td> </tr> <tr> <td><div align="center"> <input type="submit" name="Submit" value="上传它!"> </div></td> </tr> </table> </FORM> </body> </html></ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br /><b>2、上传处理页面do_upload.jsp</b><br /><br />本页面执行文件上传操作。页面源码中详细介绍了上传方法的用法Q在此不赘述了?<br /><br />面源码如下Q?<br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code><%-- 文g名:do_upload.jsp ? 者:U|软g制作中心雨亦?zhsoft88@sohu.com) --%> <%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*,com.jspsmart.upload.*" errorPage="" %> <html> <head> <title>文g上传处理面</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <% // 新徏一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 上传初始? su.initialize(pageContext); // 讑֮上传限制 // 1.限制每个上传文g的最大长度? // su.setMaxFileSize(10000); // 2.限制M传数据的长度? // su.setTotalMaxFileSize(20000); // 3.讑֮允许上传的文Ӟ通过扩展名限Ӟ,仅允许doc,txt文g? // su.setAllowedFilesList("doc,txt"); // 4.讑֮止上传的文Ӟ通过扩展名限Ӟ,止上传带有exe,bat, jsp,htm,html扩展名的文g和没有扩展名的文件? // su.setDeniedFilesList("exe,bat,jsp,htm,html,,"); // 上传文g su.upload(); // 上传文件全部保存到指定目录 int count = su.save("/upload"); out.println(count+"个文件上传成功!<br>"); // 利用Request对象获取参数之? out.println("TEST="+su.getRequest().getParameter("TEST") +"<BR><BR>"); // 逐一提取上传文g信息Q同时可保存文g? for (int i=0;i<su.getFiles().getCount();i++) { com.jspsmart.upload.File file = su.getFiles().getFile(i); // 若文件不存在则l? if (file.isMissing()) continue; // 昄当前文g信息 out.println("<TABLE BORDER=1>"); out.println("<TR><TD>表单名QFieldNameQ?lt;/TD><TD>" + file.getFieldName() + "</TD></TR>"); out.println("<TR><TD>文g长度QSizeQ?lt;/TD><TD>" + file.getSize() + "</TD></TR>"); out.println("<TR><TD>文g名(FileNameQ?lt;/TD><TD>" + file.getFileName() + "</TD></TR>"); out.println("<TR><TD>文g扩展名(FileExtQ?lt;/TD><TD>" + file.getFileExt() + "</TD></TR>"); out.println("<TR><TD>文g全名QFilePathNameQ?lt;/TD><TD>" + file.getFilePathName() + "</TD></TR>"); out.println("</TABLE><BR>"); // 文件另? // file.saveAs("/upload/" + myFile.getFileName()); // 另存CWEB应用E序的根目录为文件根目录的目录下 // file.saveAs("/upload/" + myFile.getFileName(), su.SAVE_VIRTUAL); // 另存到操作系l的根目录ؓ文g根目录的目录? // file.saveAs("c:\\temp\\" + myFile.getFileName(), su.SAVE_PHYSICAL); } %> </body> </html></ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br /><b>四、文件下载篇</b><br /><br /><b>1、下载链接页面download.html</b><br /><br />面源码如下Q?<br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code><!-- 文g名:download.html ? 者:U|软g制作中心雨亦?zhsoft88@sohu.com) --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>下蝲</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <a href="jsp/do_download.jsp">点击下蝲</a> </body> </html></ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br /><b>2、下载处理页面do_download.jsp</b> do_download.jsp展示了如何利用jspSmartUploadlg来下载文Ӟ从下面的源码中就可以看到Q下载何其简单?<br /><br />源码如下Q?<br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code><%@ page contentType="text/html;charset=gb2312" import="com.jspsmart.upload.*" %><% // 新徏一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 初始? su.initialize(pageContext); // 讑֮contentDisposition为null以禁止浏览器自动打开文gQ? //保证点击链接后是下蝲文g。若不设定,则下载的文g扩展名ؓ //docӞ览器将自动用word打开它。扩展名为pdfӞ //览器将用acrobat打开? su.setContentDisposition(null); // 下蝲文g su.downloadFile("/upload/如何赚取我的W一桉.doc"); %></ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br /><ccid_code>注意Q执行下载的面Q在Java脚本范围外(?lt;% ... %>之外Q,不要包含HTML代码、空根{回车或换行{字W,有的话将不能正确下蝲。不信的话,可以在上q源码中%><%之间加入一个换行符Q再下蝲一下,保证出错。因为它影响了返回给览器的数据,D解析出错?/ccid_code><br /><br /><b>3、如何下载中文文?/b><br /><br />jspSmartUpload虽然能下载文Ӟ但对中文支持不。若下蝲的文件名中有汉字Q则览器在提示另存的文件名Ӟ昄的是一堆ؕ码,很扫人兴。上面的例子是q样。(q个问题也是众多下蝲lg所存在的问题,很少有h解决Q搜索不到相兌料,可叹Q) <br /><br />ZljspSmartUploadlg增加下蝲中文文g的支持,我对该组件进行了研究Q发现对q回l浏览器的另存文件名q行UTF-8~码后,览器便能正显CZ文名字了。这是一个o人高兴的发现。于是我对jspSmartUploadlg的SmartUploadcd了升U处理,增加了toUtf8Stringq个ҎQ改动部分源码如下: <br /><br /><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="540" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code>public void downloadFile(String s, String s1, String s2, int i) throws ServletException, IOException, SmartUploadException { if(s == null) throw new IllegalArgumentException("File '" + s + "' not found (1040)."); if(s.equals("")) throw new IllegalArgumentException("File '" + s + "' not found (1040)."); if(!isVirtual(s) && m_denyPhysicalPath) throw new SecurityException("Physical path is denied (1035)."); if(isVirtual(s)) s = m_application.getRealPath(s); java.io.File file = new java.io.File(s); FileInputStream fileinputstream = new FileInputStream(file); long l = file.length(); boolean flag = false; int k = 0; byte abyte0[] = new byte[i]; if(s1 == null) m_response.setContentType("application/x-msdownload"); else if(s1.length() == 0) m_response.setContentType("application/x-msdownload"); else m_response.setContentType(s1); m_response.setContentLength((int)l); m_contentDisposition = m_contentDisposition != null ? m_contentDisposition : "attachment;"; if(s2 == null) m_response.setHeader("Content-Disposition", m_contentDisposition + " filename=" + toUtf8String(getFileName(s))); else if(s2.length() == 0) m_response.setHeader("Content-Disposition", m_contentDisposition); else m_response.setHeader("Content-Disposition", m_contentDisposition + " filename=" + toUtf8String(s2)); while((long)k < l) { int j = fileinputstream.read(abyte0, 0, i); k += j; m_response.getOutputStream().write(abyte0, 0, j); } fileinputstream.close(); } /** * 文件名中的汉字转ؓUTF8~码的串,以便下蝲时能正确昄另存的文件名. * U|软g制作中心雨亦?003.08.01 * @param s 原文件名 * @return 重新~码后的文g? */ public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer(); for (int i=0;i<s.length();i++) { char c = s.charAt(i); if (c >= 0 && c <= 255) { sb.append(c); } else { byte[] b; try { b = Character.toString(c).getBytes("utf-8"); } catch (Exception ex) { System.out.println(ex); b = new byte[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) k += 256; sb.append("%" + Integer.toHexString(k). toUpperCase()); } } } return sb.toString(); }</ccid_code></pre></td></tr></tbody></table></ccid_nobr><br /><br />注意源码中粗体部分,原jspSmartUploadlg对返回的文g未作M处理Q现在做了编码的转换工作Q将文g名{换ؓUTF-8形式的编码Ş式。UTF-8~码对英文未作Q何处理,对中文则需要{换ؓ%XX的Ş式。toUtf8StringҎ中,直接利用Java语言提供的编码{换方法获得汉字字W的UTF-8~码Q之后将其{换ؓ%XX的Ş式?<br /><br />源码编译后打包成jspSmartUpload.jarQ拷贝到Tomcat的shared/lib目录下(可ؓ所有WEB应用E序所׃nQ,然后重启Tomcat服务器就可以正常下蝲含有中文名字的文件了。另QtoUtf8StringҎ也可用于转换含有中文的超U链接,以保证链接的有效Q因为有的WEB服务器不支持中文链接?<br /><br />结QjspSmartUploadlg是应用JSPq行B/SE序开发过E中l常使用的上传下载组Ӟ它用简单,方便。现在我又ؓ其加上了下蝲中文名字的文件的支持Q真个是如虎ȝQ必赢得更多开发者的青睐?br /><br /><br />Source: <a >http://www.tongyi.net/article/20031015/200310153755_1.shtml</a></font> </font> </span> </span> <img src ="http://www.tkk7.com/bainian/aggbug/63075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/bainian/" target="_blank">癑ֹ</a> 2006-08-11 18:55 <a href="http://www.tkk7.com/bainian/articles/63075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp文g操作http://www.tkk7.com/bainian/articles/63009.html癑ֹ癑ֹFri, 11 Aug 2006 07:10:00 GMThttp://www.tkk7.com/bainian/articles/63009.htmlhttp://www.tkk7.com/bainian/comments/63009.htmlhttp://www.tkk7.com/bainian/articles/63009.html#Feedback0http://www.tkk7.com/bainian/comments/commentRss/63009.htmlhttp://www.tkk7.com/bainian/services/trackbacks/63009.html<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文g的徏立、检查与删除</title>
</head>
<body>
<%
String path=request.getRealPath("");
//out.println(path);
File f=new File(path,"File.txt");
//out.println(f);
//out.println(f.exists());

if(f.exists()){//查File.txt是否存在
f.delete();//删除File.txt文g
out.println(path + "\\File.txt 存在Q已删除?);
}else{
f.createNewFile();//在当前目录下建立一个名为File.txt的文?br />out.println(path + "\\File.txt 不存在,已徏立?);//输出目前所在的目录路径
}
%>

目录的徏?查与删除
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>目录的徏?查与删除</title>
</head>
<body>
<%
String path=request.getRealPath("");//此步获得当前路径。如果要获得其他的\径。如:
                                     // String path=request.getRealPath("../qqq/www/");
                                     //则\径名"../qqq/www/"必须真实存在Q否则以?br />                                     //代码不会创徏指定的\径,管不报?br />path=path + "\\Sub";//要建立的目录\?br />File d=new File(path);//建立代表Sub目录的File对象Qƈ得到它的一个引?br />if(d.exists()){//查Sub目录是否存在
d.delete();
out.println("Sub目录存在Q已删除");
}else{
d.mkdir();//建立Sub目录
out.println("Sub目录不存在,已徏?);
}
%>
</body>
</html>


如何在JSP中处理虚拟目?br /><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>JSP中如何处理虚拟目?lt;/title>
</head>
<body>
取得虚拟目录对应的磁盘\?lt;br>
Web站点ȝ录的位置?lt;font color=#ff0000><%=request.getRealPath("/")%></font><br>
JSP|页所在的目录位置<font color=#ff0000><%=request.getRealPath("./")%></font><br>
JSP|页所在目录上一层目录的位置<font color=#ff0000><%=request.getRealPath("../")%></font><br>
</body>
</html>


文g属性的取得
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date,java.io.*"%>
<html>
<head>
<title>文g属性的取得</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File f=new File(path,"ReadData.txt");
if(f.exists()){
%>
<%=f.getName()%>的属性如下:<br><br>
文g长度为:<%=f.length()%>
<%=f.isFile()?"是文?:"不是文g"%><br>
<%=f.isDirectory()?"是目?:"不是目录"%><br>
<%=f.canRead()?"可读?:"不可d"%><br>
<%=f.canWrite()?"可写?:"不可写入"%><br>
<%=f.isHidden()?"是隐藏文?:"不是隐藏文g"%><br>
文g的最后修Ҏ期ؓQ?lt;%=new Date(f.lastModified())%><br>
<%
}else{
f.createNewFile();//在当前目录下建立一个名为ReaData.txt的文?br />%>
<%=f.getName()%>的属性如下:<br><br>
文g长度为:<%=f.length()%>
<%=f.isFile()?"是文?:"不是文g"%><br>
<%=f.isDirectory()?"是目?:"不是目录"%><br>
<%=f.canRead()?"可读?:"不可d"%><br>
<%=f.canWrite()?"可写?:"不可写入"%><br>
<%=f.isHidden()?"是隐藏文?:"不是隐藏文g"%><br>
文g的最后修Ҏ期ؓQ?lt;%=new Date(f.lastModified())%><br>
<%
}
%>
</body>
</html>


取出目录中文件的Ҏ
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>取出目录中文件的Ҏ--列出目录中的文g</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File d=new File(path);//建立当前目录中文件的File对象
File list[]=d.listFiles();//取得代表目录中所有文件的File对象数组
out.println("<font color=#ff0000>" + path + "目录下的文gQ?lt;/font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isFile()){
out.println(list<I>.getName() + "<br>");
}
}
out.println("<br><font color=#ff0000>" + path + "目录下的目录Q?lt;/font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isDirectory()){
out.println(list<I>.getName() + "<br>");
}
}
%>
</body>
</html>


判断是否为空白文?br /><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>判断是否为空白文?lt;/title>
</head>
<body>
<%
String path=request.getRealPath("/");
out.println(path);
FileReader fr=new FileReader(path + "\\AtEnd.txt");//建立FileReader对象Qƈ实例化ؓfr
//对FileReadercȝ成的对象使用read()ҎQ可以从字符中d下一个字W?br />if(fr.read()==-1)//判断是否已读到文件的l尾
{
out.print("AtEnd.txt文g中没有数?lt;br>");
}else{
out.println("AtEnd.txt文g中有数据");
}
fr.close();
%>
</body>
</html>


d所有的文g数据
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*,java.lang.*"%>
<html>
<head>
<title>d所有的文g数据</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
//关键在于dq程中,要判断所d的字W是否已l到了文件的末尾Qƈ且这个字W是不是文g中的断行W,卛_断该字符值是否ؓ13?br />int c=fr.read();//从文件中d一个字W?br />//判断是否已读到文件结?br />while(c!=-1){
out.print((char)c);//输出d的数?br />c=fr.read();//从文件中l箋d数据
if(c==13){//判断是否为断行字W?br />out.print("<br>");//输出分行标签
fr.skip(1);//略过一个字W?br />//c=fr.read();//d一个字W?br />}
}
fr.close();
%>
</body>
</html>


一行一行读取数?br /><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文gd</title>
</head>
<body>
<%
String path=request.getRealPath("");//取得当前目录的\?br />FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader对象Qƈ实例化ؓfr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象Qƈ实例化ؓbr
String Line=br.readLine();//从文件读取一行字W串
//判断d到的字符串是否不为空
while(Line!=null){
out.println(Line + "<br>");//输出从文件中d的数?br />Line=br.readLine();//从文件中l箋d一行数?br />}
br.close();//关闭BufferedReader对象
fr.close();//关闭文g
%>
</body>
</html>


略过文g中的字符不读?br /><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>略过字节不读?lt;/title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
fr.skip(2);//跌2个字?br />int c=fr.read();//d一个字?br />while(c!=-1){
out.print((char)c);
c=fr.read();
}
fr.close();
%>
</body>
</html>


数据写入文?br /><%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>数据写入文?lt;/title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");//建立FileWriter对象Qƈ实例化fw
//字W串写入文g
fw.write("大家好!");
fw.write("本书是《JSP~程技巧?);
fw.write("请多多指教!");
fw.write("email:stride@sina.com");
fw.close();

FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象Qƈ实例化ؓbr
String Line=br.readLine();
//d一行数?br />out.println(Line + "<br>");
br.close();//关闭BufferedReader对象
fr.close();
%>
</body>
</html>


写入文件的数据分行
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>写入文件的数据分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好!");
bw.write("本书是《JSP~程技巧》?);
bw.newLine();//断行
bw.write("请多多指教!");
bw.newLine();//断行
bw.write("email: [email]stride@sina.com[/email]");
bw.flush();//数据更新至文g
fw.close();//关闭文g?br />out.println("写入文g内容为:<br>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);
String Line=br.readLine();//d一行数?br />while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();
%>
</body>
</html>


如何数据追加写入到文g
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>如何数据追加写入到文g</title>
</head>
<body>
<%
String path=request.getRealPath(".");
RandomAccessFile rf=new RandomAccessFile(path + "\\WriteData.txt","rw");//定义一个类RandomAccessFile的对象,q实例化
rf.seek(rf.length());//指针移动到文g末尾
rf.writeBytes("\nAppend a line to the file!");
rf.close();//关闭文g?br />out.println("写入文g内容为:<br>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//d文g的BufferedRead对象
String Line=br.readLine();
while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();//关闭文g
%>
</body>
</html>

癑ֹ 2006-08-11 15:10 发表评论
]]>
在jsp下,一个实现将动态页面{为静态的Ҏhttp://www.tkk7.com/bainian/articles/54429.html癑ֹ癑ֹThu, 22 Jun 2006 02:26:00 GMThttp://www.tkk7.com/bainian/articles/54429.htmlhttp://www.tkk7.com/bainian/comments/54429.htmlhttp://www.tkk7.com/bainian/articles/54429.html#Feedback0http://www.tkk7.com/bainian/comments/commentRss/54429.htmlhttp://www.tkk7.com/bainian/services/trackbacks/54429.html阅读全文

癑ֹ 2006-06-22 10:26 发表评论
]]>
Jsp生成验证码源E序http://www.tkk7.com/bainian/articles/53452.html癑ֹ癑ֹSat, 17 Jun 2006 01:58:00 GMThttp://www.tkk7.com/bainian/articles/53452.htmlhttp://www.tkk7.com/bainian/comments/53452.htmlhttp://www.tkk7.com/bainian/articles/53452.html#Feedback0http://www.tkk7.com/bainian/comments/commentRss/53452.htmlhttp://www.tkk7.com/bainian/services/trackbacks/53452.html <%@ page contentType="image/jpeg" import="java.awt.*, 
java.awt.image.*,java.util.*,javax.imageio.*" %> 
<% 
// 在内存中创徏图象 
int width=60, height=20; 
BufferedImage image = new BufferedImage(width, height, 
BufferedImage.TYPE_INT_RGB); 

// 获取囑Ş上下文?br />Graphics g = image.getGraphics(); 

// 讑֮背景色?br />g.setColor(new Color(0xDCDCDC)); 
g.fillRect(0, 0, width, height); 

//画边框?br />g.setColor(Color.black); 
g.drawRect(0,0,width-1,height-1); 

// 取随Z生的认证?4位数? 
String rand = request.getParameter("rand"); 
rand = rand.substring(0,rand.indexOf(".")); 
switch(rand.length()) 

case 1: rand = "000"+rand; break; 
case 2: rand = "00"+rand; break; 
case 3: rand = "0"+rand; break; 
default: rand = rand.substring(0,4); break; 


// 认证码存入SESSION 
session.setAttribute("rand",rand); 

// 认证码昄到图象中 
g.setColor(Color.black); 
Integer tempNumber = new Integer(rand); 
String numberStr = tempNumber.toString(); 

g.setFont(new Font("Atlantic Inline",Font.PLAIN,18)); 
String Str = numberStr.substring(0,1); 
g.drawString(Str,8,17); 

Str = numberStr.substring(1,2); 
g.drawString(Str,20,15); 
Str = numberStr.substring(2,3); 
g.drawString(Str,35,18); 

Str = numberStr.substring(3,4); 
g.drawString(Str,45,15); 

// 随机产生88个干扰点Q图象中的认证码不易被其它E序探测刊W?br />Random random = new Random(); 
for (int i=0;i<20;i++) 

int x = random.nextInt(width); 
int y = random.nextInt(height); 
g.drawOval(x,y,0,0); 


// 图象生效 
g.dispose(); 

// 输出图象到页面?br />ImageIO.write(image, "JPEG", response.getOutputStream()); 
%>
code source http://jspcn.net/htmlnews/13004003160.html

癑ֹ 2006-06-17 09:58 发表评论
]]>
վ֩ģ壺 ëƬѹۿ| **һһëƬѹۿ| ûվɫƵѹۿ| Ƶ߹ۿ| ߿վ| AVһɫ| ձѾƷһ | ߹ۿ| bbbbbbƵ| www޾Ʒþþ| 98Ƶ| AVӰ߹ۿ| | Ļ뾫ƷԴ| ձĻ| Ƭѿҹa| þþþþAŷAV| þþƷav18 | 91Ʒѹۿ| ɫ͵Ʒһ| Ʒ鶹Ѱ| 72paoƵ| պ| ŷպ| Թ24| ҹ18ѿ| ŮƵѿһ| ձ߹ۿ| þþþþAVվ | ձĻ| Ѹ߹ۿ| ɫѹۿ| ˵߲| ëƬaëƬѹۿƷ| ۺϾƷ| һƷ˾þ| 2019Ļֱ| ˵avһ2| ձƵ| èѹۿ˳վ| þþþ޾ƷС˵|