JAVA教程之servlet 文件下载及注重事项
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发servlet|下载起首转贴注重事项: 在论坛里,已有先辈申明过怎样在Servlet/JSP中,使用HTTPProtocol实作静态的档案下载服务。这一项功效团体在体系开辟中,用的良多,也碰到过几个成绩,想将这些履历分享给人人,但愿对人人能有匡助。1.MSIE版本的成绩
if(request.getHeader("User-Agent").indexOf("MSIE5.5")!=-1){
//MSIE5.5有要作出格处置
response.setHeader("Content-Disposition","filename="
+newString(f_name.getBytes("Big5"),"ISO8859_1"));
}
else{
//非IE5.5的Header设定体例
response.addHeader("Content-Disposition","attachment;filename="
+newString(f_name.getBytes("Big5"),"ISO8859_1"));
}
IE5.5不克不及加上attachment这个关头词,这是很奇异的一个版本。
2.下载中文文件名,如出息序区块中的语法,实在很复杂就能够作到,只需将档名改成"ISO8859_1"的编码就能够,我测过Tomcat,Oracle9ias,SunOne都能够一般的下载中文档名,并且,如许写法,优点是无需外加任何的package。
3.档案下载终了以后,最好加上以下这二行指令:
response.setStatus(response.SC_OK);
response.flushBuffer();
之前没有加这二行,经常能够在error.log里看到"Connectionrestbypeer"如许的毛病讯息,并且,更严峻的是实行下载的servlet/jsp不会停止,要等相称长的工夫才会Timeout,假如下载的次数一多,APServer就惨了,以是,有作静态下载档案的程序,最好仍是加上这二行指令。
4.平安性思索,偶然候写程序偷懒,会接纳dumpfile.jsp?f_name=attach/a.txt如许的体例来处置档案下载。假如,在程序中没有过滤失落上传文件称号参数中,不成同化".."的话,试想,假如有人存心将参数改成如许呢?dumpfile.jsp?f_name=../../../a.txt,嘿嘿嘿,全部体系的一切档案就职人下载啦。
以上,都是团体已经犯过的毛病,给人人参考。
之前没有加这二行,经常能够在error.log里看到"Connectionrestbypeer"如许的毛病讯息,并且,更严峻的是实行下载的servlet/jsp不会停止,要等相称长的工夫才会Timeout,假如下载的次数一多,APServer就惨了,以是,有作静态下载档案的程序,最好仍是加上这二行指令。
5.平安性思索,偶然候写程序偷懒,会接纳dumpfile.jsp?f_name=attach/a.txt如许的体例来处置档案下载。假如,在程序中没有过滤失落上传文件称号参数中,不成同化".."的话,试想,假如有人存心将参数改成如许呢?dumpfile.jsp?f_name=../../../a.txt,嘿嘿嘿,全部体系的一切档案就职人下载啦。
以上,都是团体已经犯过的毛病,给人人参考。
网址是:http://www.javaworld.com.tw/jute/post/view?bid=6&id=44580&sty=1&tpg=1&age=-1
别的一片参考文章:http://www.chinaitpower.com/A/2005-04-06/113085.html
importjava.io.*;
importjava.util.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclassDownloadextendsHttpServlet
{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException
{
try
{
//这里你能够做些其他的事变
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment;filename="你要在保留窗口中显现的保留文件名"");
ServletOutputStreamout=response.getOutputStream();
BufferedReaderbr=newBufferedReader(newFileReader(要下载的的文件名));
Stringline=br.readLine();
while(line!=null)
{
out.write(line.getBytes());
out.println();
line=br.readLine();
}
out.close();
br.close();
}
catch(Exceptione)
{
System.out.println(e);
}
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException
{
doGet(request,response);
}
}
注重:中文文件名办理举措,将第一个援用中的BIG5改成GBK便可:
newString(name.getBytes("GBK"),"ISO8859_1")
下面下载代码中有个成绩,只能下载字符类文件,关于二进制的文件会堕落,应改用上面代码
BufferedInputStreamin=null;
ServletOutputStreamout=null;
FileInputStreamstream=null;
try{
out=response.getOutputStream();
stream=newFileInputStream(file);
intbytesRead=0;
finalintlength=8192;
byte[]buffer=newbyte;
while((bytesRead=stream.read(buffer,0,length))!=-1){
//writeatserverside
out.write(buffer,0,bytesRead);
}
}catch(IOExceptione){
thrownewBPDBusiException(
ResourceConst.SCORECARD_ERR_DOWNLOADATTACHMENT_DOWNLOAD);
}finally{
if(in!=null){
in.close();
}
if(out!=null){
out.close();
}
}
唉!都是钱闹的1.Swing和.net开发比较------从市场份额看.net开发主要占据大部分的中小型和中型的的桌面开发,原因是它封装了很多工具 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 是一种语言,用以产生「小应用程序(Applet(s)) 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
页:
[1]