网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > JSP技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.如何将网页数据输出为Excel或Wor.
.用JSP下载word文件(不会直接用I.
.JSP标签库介绍.
.jsp插入mysql数据库后乱码的解决.
.JSP和JSF合并 共同打造完美的Web.
.关于JSP中文问题的解决方法.
.在jsp环境中配置使用fckeditor.
.JSP自定义标签试验.
.JSP中tomcat的SQL Server2000数据.
.深入讲解提升JSP应用程序的七个实.
.新手看招:JSP中表单数据存储的通.
.JSP实现浏览器关闭cookies情况下.
.JSP实现论坛树型结构的具体算法.
.如何使用JSP访问MySQL数据库.
.在jsp中运用ajax(简单入门) .
.Java 中对文件的读写操作之比较.
.Oracle数据库和JSP连接要注意问题.
.关于JSP中基于Session的在线用户.
.让JSP页面过期, 保证每次JSP页面.
.数据库的相关操作:如连接、查询.

JSP文件下载的几种方式

发表日期:2007-2-15


1。最直接最简单的,方式是把文件地址直接放到html页面的一个链接中。这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。这个就不写示例了。
2。在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。(示例如下)
<%
 response.setContentType(fileminitype);
 response.setHeader("Location",filename);
 response.setHeader("Cache-Control", "max-age=" + cacheTime);
 response.setHeader("Content-Disposition", "attachment; filename=" + filename); //filename应该是编码后的(utf-8)
 response.setContentLength(filelength);
 OutputStream outputStream = response.getOutputStream();
 InputStream inputStream = new FileInputStream(filepath);
 byte[] buffer = new byte[1024];
 int i = -1;
 while ((i = inputStream.read(buffer)) != -1) {
  outputStream.write(buffer, 0, i);
  }
 outputStream.flush();
 outputStream.close();
 inputStream.close();
 outputStream = null;

%>
3。既然是JSP的话,还有一种方式就是用Applet来实现文件的下载。不过客户首先得信任你的这个Applet小程序,由这个程序来接受由servlet发送来的数据流,并写入到本地。
servlet端示例
    public void service(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        res.setContentType(" text/plain ");
        OutputStream outputStream = null;
        try {
            outputStream = res.getOutputStream();
            popFile(srcFile, outputStream)) ;//把文件路径为srcFile的文件写入到outputStream中。
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
JApplet端示例
   URLConnection con;
        try {
            con = url.openConnection();//url是被调用的SERVLET的网址 如http://localhost:8080/sendDateSevlet.do 
            con.setUseCaches(false);
            con.setDoInput(true);
            con.setDoOutput(true);
            con.setRequestProperty("Content-Type",
                "application/octet-stream");
            InputStream in = con.getInputStream();
            ProgressMonitorInputStream pmInputStream = new ProgressMonitorInputStream(
                    pane, "正在从服务器下载文件内容", in);
            ProgressMonitor pMonitor = pmInputStream
                    .getProgressMonitor();
            pMonitor.setMillisToDecideToPopup(3);
            pMonitor.setMillisToPopup(3);
            String localfilepath = localstr + filename ;//localfilepath本地路径,localstr文件文件夹,filename本地文件名
     if(saveFilsaveFilee(localfilepath,pmInputStream)){ //方法saveFilsaveFilee是把输入流pmInputStream写到文件localfilepath中。                   
     openLocalFile(localfilepath);
            }


4。顺便把JApplet上传文件的代码也贴上来.
JApplet端示例

URLConnection con;
        try {
            con = url.openConnection();//url是被调用的SERVLET的网址 如http://localhost:8080/sendDateSevlet.do        
     con.setUseCaches(false);
            con.setDoInput(true);
            con.setDoOutput(true);
            con.setRequestProperty("Content-Type",
                "application/octet-stream");
           
            OutputStream out = con.getOutputStream();
            String localfilepath = localstr + filename; //localfilepath本地路径,localstr文件文件夹,filename本地文件名
            getOutputStream(localfilepath,out);//文件getOutputStream是把文件localfilepath写到输出流out中。
            InputStream in = con.getInputStream();
            return true;
        }catch (IOException e) {
               System.out.println("文件上传出错!");
            e.printStackTrace();
        }

servlet端代码示例
    public void service(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        res.setContentType(" text/plain ");
        InputStream inputStream = null;
        try {
            inputStream = res.getInputStream();
            writefile(srcFile, inputStream);//把输入流inputStream保存到文件路径为srcFile的文件中
        } catch (IOException e) {
            e.printStackTrace();
        }
    } // end service

 总结:在文件的传输中是流的形式存在的,在硬盘上是文件的形式存在的。我们要做的只是通过HttpServletRequest和HttpServletResponse,或者是response和request来发送流和读取流。以及把文件转换成流或把流转换成文件的操作。

上一篇:JSP生成静态页实践及其设计思想[2] 人气:5375
下一篇:Tomcat配置技巧 人气:5549
浏览全部JSP的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐