|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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[length];
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开发主要占据大部分的中小型和中型的的桌面开发,原因是它封装了很多工具 |
|