仓酷云

标题: JAVA网页编程之jspSmartUpload上传下载全攻略(四) [打印本页]

作者: 仓酷云    时间: 2015-1-18 11:20
标题: JAVA网页编程之jspSmartUpload上传下载全攻略(四)
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。js|攻略|上传|下载4、文件下载篇
1、下载链接页面download.html
页面源码以下:
<!--
文件名:download.html
纵横软件制造中央雨亦奇(zhsoft88@sohu.com)
-->
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>下载</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
</head>
<body>
<ahref="jsp/do_download.jsp">点击下载</a>
</body>
</html>
2、下载处置页面do_download.jspdo_download.jsp展现了怎样使用jspSmartUpload组件来下载文件,从上面的源码中就能够看到,下载何其复杂。
源码以下:
<%@pagecontentType="text/html;charset=gb2312"
import="com.jspsmart.upload.*"%><%
//新建一个SmartUpload对象
SmartUploadsu=newSmartUpload();
//初始化
su.initialize(pageContext);
//设定contentDisposition为null以克制扫瞄器主动翻开文件,
//包管点击链接后是下载文件。若不设定,则下载的文件扩大名为
//doc时,扫瞄器将主动用word翻开它。扩大名为pdf时,
//扫瞄器将用acrobat翻开。
su.setContentDisposition(null);
//下载文件
su.downloadFile("/upload/怎样赚取我的第一桶金.doc");
%>
注重,实行下载的页面,在Java剧本局限外(即<%...%>以外),不要包括HTML代码、空格、回车或换行等字符,有的话将不克不及准确下载。不信的话,能够在上述源码中%><%之间到场一个换行符,再下载一下,包管堕落。由于它影响了前往给扫瞄器的数据流,招致剖析堕落。
3、怎样下载中文文件
jspSmartUpload固然能下载文件,但对中文撑持不敷。若下载的文件名中有汉字,则扫瞄器在提醒另存的文件名时,显现的是一堆乱码,很扫人兴。下面的例子就是如许。(这个成绩也是浩瀚下载组件所存在的成绩,很少有人办理,搜刮不到相干材料,可叹!)
为了给jspSmartUpload组件增添下载中文文件的撑持,我对该组件举行了研讨,发明对前往给扫瞄器的另存文件名举行UTF-8编码后,扫瞄器便能准确显现中文名字了。这是一个使人乐意的发明。因而我对jspSmartUpload组件的SmartUpload类做了晋级处置,增添了toUtf8String这个办法,修改部分源码以下:
publicvoiddownloadFile(Strings,Strings1,Strings2,inti)
throwsServletException,IOException,SmartUploadException
{
if(s==null)
thrownewIllegalArgumentException("File"+s+
"notfound(1040).");
if(s.equals(""))
thrownewIllegalArgumentException("File"+s+
"notfound(1040).");
if(!isVirtual(s)&&m_denyPhysicalPath)
thrownewSecurityException("Physicalpathis
denied(1035).");
if(isVirtual(s))
s=m_application.getRealPath(s);
java.io.Filefile=newjava.io.File(s);
FileInputStreamfileinputstream=newFileInputStream(file);
longl=file.length();
booleanflag=false;
intk=0;
byteabyte0[]=newbyte[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)
{
intj=fileinputstream.read(abyte0,0,i);
k+=j;
m_response.getOutputStream().write(abyte0,0,j);
}
fileinputstream.close();
}
/**
*将文件名中的汉字转为UTF8编码的串,以便下载时能准确显现另存的文件名.
*纵横软件制造中央雨亦奇2003.08.01
*@params原文件名
*@return从头编码后的文件名
*/
publicstaticStringtoUtf8String(Strings){
StringBuffersb=newStringBuffer();
for(inti=0;i<s.length();i++){
charc=s.charAt(i);
if(c>=0&&c<=255){
sb.append(c);
}else{
byte[]b;
try{
b=Character.toString(c).getBytes("utf-8");
}catch(Exceptionex){
System.out.println(ex);
b=newbyte[0];
}
for(intj=0;j<b.length;j++){
intk=b[j];
if(k<0)k+=256;
sb.append("%"+Integer.toHexString(k).
toUpperCase());
}
}
}
returnsb.toString();
}
注重源码中粗体部分,原jspSmartUpload组件对前往的文件未作任那边理,如今做了编码的转换事情,将文件名转换为UTF-8情势的编码情势。UTF-8编码对英文未作任那边理,对中文则必要转换为%XX的情势。toUtf8String办法中,间接使用Java言语供应的编码转换办法取得汉字字符的UTF-8编码,以后将其转换为%XX的情势。
将源码编译后打包成jspSmartUpload.jar,拷贝到Tomcat的shared/lib目次下(可为一切WEB使用程序所共享),然后重启Tomcat服务器就能够一般下载含有中文名字的文件了。另,toUtf8String办法也可用于转换含有中文的超等链接,以包管链接的无效,由于有的WEB服务器不撑持中文链接。
小结:jspSmartUpload组件是使用JSP举行B/S程序开辟过程当中常常利用的上传下载组件,它利用复杂,便利。如今我又为其加上了下载中文名字的文件的撑持,端的是为虎傅翼,势必博得更多开辟者的喜爱。


java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的。可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏。
作者: 金色的骷髅    时间: 2015-1-20 18:32
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者: 爱飞    时间: 2015-1-29 14:28
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者: 再见西城    时间: 2015-2-4 21:56
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者: 第二个灵魂    时间: 2015-2-5 12:32
是一种突破用户端机器环境和CPU
作者: 愤怒的大鸟    时间: 2015-2-6 13:04
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 谁可相欹    时间: 2015-2-7 05:57
是一种为 Internet发展的计算机语言
作者: admin    时间: 2015-2-10 00:26
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 莫相离    时间: 2015-2-28 09:09
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者: 分手快乐    时间: 2015-3-9 22:02
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 柔情似水    时间: 2015-3-17 02:07
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者: 柔情似水    时间: 2015-3-17 02:08
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者: 仓酷云    时间: 2015-3-23 13:31
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2