目录

1 jsp分页

1.1 定义

1.2 Servlet控制器方法

2 文件上传下载

2.1 定义

2.2 SmartUpload

2.2.1 介绍

2.2.2 SmartUpload组件-Request类

2.3 上传

2.3.1 前台上传页面

2.3.2 Apache fileUpload

2.3.3 ServletFileUpload

2.3.4 Commons FileUpLoad

2.3.5 java自带api FTPClient

2.4 下载

2.4.1 页面下载

2.4.2 java代码示例


1 jsp分页

1.1 定义

如果查询出的数据量过大,将这些数据在一个页面全部显示的话,就会花更多的时间将这些大量数据从服务器传递到客户端,从而导致客户端页面打开速度变慢,当多个用户同时访问服务器时,每个用户都查询出大量的数据,而这些数据都必须在服务器端的内存中存放,这势必造成服务器的内存资源紧张甚至崩溃,降低服务器的运行效率 
除了需要所必须的数据之外,还显示了记录的总条数、当前页码和总页数;并且图示表明每页显示4条数据,这个数值可以人为设定

public class PageBean {private int pagesize;//每页显示的条数private int pagetotal;//总页数private int p;//当前第p页private int count;//记录总条数private List data;//存放本页数据的集合
}

List类型的对象data如果不实例化,在使用时会报出NullException异常。所以给该类设计一个无参数的构造函数,其主要目的是对List对象进行实例化,同时可以设定默认每页显示的记录条数

         public PageBean(){pagesize=4;//默认设置每页显示4条记录data=new ArrayList();}

每页显示的条数已经在构造函数中确定为4,为灵活起见,假如某些页面需要每页显示10条记录,可以在PageBean中设计一个public setPagesize(int)方法
页面显示的总页数应该是由记录总条数除以每页显示的条数后,向上取整得到。换言之,变量pagetotal是依赖于变量count和pagesize的,所以设计变量count的set方法为

         public void setCount(int count) {this.count = count;pagetotal=(int)(Math.ceil(count*1.0/pagesize));}

当前显示的页码值p的取值范围必然是[1,pagetotal]。考虑到用户在页面显示第一页时,也可能再次点击“上一页”链接,或者在页面处于最后一页时点击“下一页”,
            从而导致用户要显示的页码在此取值范围之外。所以此时必须对用户传递过来的待显示的页码p值做一判断

      public void setP(int up) {if(up<1)p=1;else if(up>pagetotal)p=pagetotal;else p=up;}

1.2 Servlet控制器方法

调用该方法的Servlet控制器的方法中,需要对待显示页码进行判断,如果用户没有输入页码时,比如第一次访问分页页面,就默认显示第一页
单表查询分页

 public void allContact(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {DBC dbc=new DBC();int up=1;//默认显示第一页String ps=request.getParameter("p");//获取传递过来的页码if(ps!=null)up=Integer.parseInt(ps);PageBean pb=dbc.allContact(up);request.setAttribute("pb",pb);request.getRequestDispatcher("allcontact.jsp").forward(……);} 

登陆者查询联系人并分页

public void myContact(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {DBC dbc=new DBC();int up=1;//默认显示第一页String ps=request.getParameter("p");//传递过来的页码if(ps!=null)up=Integer.parseInt(ps);Users u=(Users)request.getSession().getAttribute("u");PageBean pb=dbc.myContact(u.getUid(),up);request.setAttribute("pb",pb);request.getRequestDispatcher("mycontact.jsp").forward(…);} 

2 文件上传下载

2.1 定义

服务器组件:编写控制器Servlet时,必须要继承HttpServlet类;而在创建编码过滤器时,需要实现Filter接口。 这些HttpServlet类和Filter接口都是Tomcat服务器的lib目录下的jar包中所存在的,这些由服务器提供的类或接口,称为服务器组件

自定义组件:在项目中,我们编写了DAO持久化层连接数据库,其中包括连接工厂类、DAO接口、DAO接口实现类和封装数据的JavaBean, 这些自定义的类或接口,称为自定义组件

第三方组件:有时候一个项目中的某些功能既不能使用服务器组件来实现,也无法或不容易使用自定义组件来实现, 此时就需要借助第三方组织或个人编写的、用于实现特定功能的类或接口,这些类或接口通常封装成为一个jar包, 直接放置于自己项目的lib目录下就可以使用,这些jar包就称为第三方组件。

2.2 SmartUpload

2.2.1 介绍

SmartUpload.jar是从网络上下载的一个第三方组件,使用前只需将其复制到web项目的lib目录下即可 
SmartUpload组件-File类
这个类封装了一个上传文件的所有信息。通过它,可以得到上传文件的文件名、文件大小、扩展名、文件数据等信息。主要方法有:

public void saveAs(String) 将文件换名另存。参数是以/开头的文件路径,文件将被存放于当前项目的根目录下
public String getFieldName() 获取HTML表单中此上传文件的组件的名字
public String getFileName() 获取上传的“文件名.扩展名”
public String getFilePathName() 获取上传的文件全名称(带路径)
public String getFileExt() 获取文件的扩展名
public int getSize() 获取文件长度,单位字节

这个类表示所有上传文件的集合,通过它可以得到上传文件的数目、大小等信息。其中的主要方法有:

public int getCount() 获取此次文件上传的总数目
public File getFile(int) 获取指定索引处的文件
public long getSize() 获取此次文件上传的总字节数

2.2.2 SmartUpload组件-Request类

这个类的功能等同于JSP内置的对象request。之所以提供这个类,是因为对于文件上传表单,通过JSP内置的request对象无法获得表单项的值,必须通过jspSmartUpload组件提供的Request对象来获取。
其主要方法有 :

public final void initialize(PageContext) 初始化方法
public void upload() 文件上传。并检测文件大小和文件类型是否符合要求
public void setAllowedFilesList(String) 设置允许上传的文件类型,参数可以使用“,”号隔开
public void setMaxFileSize(long) 设置每个文件允许的最大字节数
public void setTotalMaxFileSize(long) 设置允许上传的文件总字节数
public Request getRequest() 取得Request对象,用于取得表单组件的值
public void setDeniedFilesList(String) 限制那些类型的文件不允许上传。参数是文件的扩展名列表,可以使用“,”号隔开
public void setContentDisposition(null) 在下载前调用。若不设定,下载的文件如果是doc文档,浏览器将调用word打开,如果是pdf文档,浏览器将调用Acrobat打开 

文件上传-页面设计

以下案例使用Servlet作为控制器,接收客户端的上传文件并保存在upload目录下。upload目录在执行前必须先创建。
上传文件的表单必须设置以下两个属性:
method=“post”:文件上传必须使用post,因为使用get能够传送的数据大小有限制(2K字节或255个字符)
enctype=“multipart/form-data”:表明当前表单提交的数据有多个部分组成

文件上传-Servlet控制器
如果使用JSP作为文件上传处理器,SmartUpload类的实例化和初始化方式为:

                SmartUpload su = new SmartUpload();su.initialize(pageContext);

文件下载-文件列表页面

<table width=300 cellspacing=0><%//读取upload下所有文件列表准备下载File f=new File(request.getRealPath("/upload"));File[] fs=f.listFiles();for(int i=0;i<fs.length;i++){%><tr><td style="text-align:left;"><a href="download?fname=<%=fs[i].getName()%>"><%=fs[i].getName()%></a></td></tr><%} %></table>

文件下载-Servlet控制器
点击某个文件链接后跳转到Servlet访问地址download中,同时将文件名也发送过去。
运行前注意将server.xml中的<Connector>元素加入属性URIEncoding="gbk",和页面编码一致。
使用SmartUpload注意事项
注意:如果使用JSP页面替代DownloadFile.java文件的话,在Java脚本范围外(即<% ... %>之外),
不要包含HTML代码、空格、回车或换行等字符,有的话将不能正确下载。因为它影响了返回给浏览器的数据流,导致解析出错 

2.3 上传

2.3.1 前台上传页面

前台页面使用 JQuery Uploadify 无刷新上传

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Upload</title><!--装载文件-->
<link href="css/default.css" rel="stylesheet" type="text/css" />
<link href="css/uploadify.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="scripts/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="scripts/swfobject.js"></script>
<script type="text/javascript" src="scripts/jquery.uploadify.v2.1.4.min.js"></script><!--ready事件-->
<script type="text/javascript">$(document).ready(function() {$("#uploadify").uploadify({'uploader' : 'scripts/uploadify.swf','script' : 'servlet/Upload',//后台处理的请求'cancelImg' : 'images/cancel.png','folder' : 'uploads',//您想将文件保存到的路径'queueID' : 'fileQueue',//与下面的id对应'queueSizeLimit' : 5,'fileDesc' : 'rar文件或zip文件','fileExt' : '*.rar;*.zip', //控制可上传文件的扩展名,启用本项时需同时声明fileDesc'auto' : false,'multi' : true,'simUploadLimit' : 2,'buttonText' : 'BROWSE'});});
</script>
</head><body><div id="fileQueue"></div><input type="file" name="uploadify" id="uploadify" /><p><a href="javascript:jQuery('#uploadify').uploadifyUpload()">开始上传</a>&nbsp;<a href="javascript:jQuery('#uploadify').uploadifyClearQueue()">取消所有上传</a></p>
</body>
</html>

或者只使用html

<html>
<body>    <form action="upload.jsp" id="form1" name="form1" encType="multipart/form-data"  method="post" target="hidden_frame" >    <input type="file" id="file" name="file" style="width:450">    <INPUT type="submit" value="上传文件"><span id="msg"></span>    <br>    <font color="red">支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传</font>                  <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
</form>    </body>
</html>    <script type="text/javascript">
function callback(msg)
{    document.getElementById("file").outerHTML = document.getElementById("file").outerHTML;    document.getElementById("msg").innerHTML = "<font color=red>"+msg+"</font>";
}
</script>

ajaxFileUpload是一个异步上传文件的jQuery插件。

语法:$.ajaxFileUpload([options])

options参数说明:

  • url:上传处理程序地址。  
  • fileElementId:需要上传的文件域的ID,即的ID。
  • secureuri:是否启用安全提交,默认为false。
  • dataType:服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。
  • success:提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
  • error:提交失败自动执行的处理函数。
  • data:自定义参数。这个东西比较有用,当有数据是与上传的图片相关的时候,这个东西就要用到了。
  • type:当要提交自定义参数时,这个参数要设置成post

2.3.2 Apache fileUpload

使用apache fileUpload上传示例:

public class UploadServlet extends javax.servlet.http.HttpServlet implements  javax.servlet.Servlet {  /** 初始化上传文件的临时存放目录 */  File tmpDir = null;  /** 初始化上传文件后的保存目录 */  File saveDir = null;  public UploadServlet() {  super();  }  protected void doGet(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException {  doPost(request, response);  }  protected void doPost(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException {  request.setCharacterEncoding("utf-8");  try {  // 检查是否是文件上传类型的请求 enctype="multipart/form-data"  if (ServletFileUpload.isMultipartContent(request)) {  // 创建一个基于磁盘的文件项目  DiskFileItemFactory factory = new DiskFileItemFactory();  factory.setRepository(tmpDir);// 指定上传文件的临时目录  factory.setSizeThreshold(1024000);// 指定在内存中缓存数据大小,单位为byte  // 创建一个新的文件上传处理程序  ServletFileUpload upload = new ServletFileUpload(factory);  upload.setFileSizeMax(5000000);// 指定单个上传文件的最大尺寸  upload.setSizeMax(10000000);// 指定一次请求上传多个文件的总尺寸  // 解析request请求,并执行相应操作  FileItemIterator fileItems = upload.getItemIterator(request);  while (fileItems.hasNext()) {  // 从集合中获得一个文件流  FileItemStream fileItemStream = fileItems.next();  String name = fileItemStream.getFieldName();// 界面document的name值  InputStream stream = fileItemStream.openStream();  // 过滤掉表单中的非文件域  if (!fileItemStream.isFormField() && fileItemStream.getName().length() > 0) {  // 获得上传文件的文件名  String fileName = fileItemStream.getName();  // 获得文件输入流  BufferedInputStream in = new BufferedInputStream(stream);  // 获得文件输出流  BufferedOutputStream out = new BufferedOutputStream(  new FileOutputStream(new File(saveDir  + System.getProperty("file.separator")  + fileName)));  // 开始把文件写到指定的上传文件夹  Streams.copy(in, out, true);  response.getWriter().println("File upload successfully!!!");// 成功,到上传文件夹中看看,上传的东西齐了吗  } else {  System.out.println("Form field " + name + " with value "  + Streams.asString(stream) + " detected.");  }  }  }  } catch (Exception e) {  e.printStackTrace();  }  }  public void init() throws ServletException {  /* * 对上传文件夹和临时文件夹进行初始化 */  super.init();  String tmpPath = "d:" + System.getProperty("file.separator") + "tmpdir";  String savePath = "d:" + System.getProperty("file.separator") + "updir";  tmpDir = new File(tmpPath);  saveDir = new File(savePath);  if (!tmpDir.isDirectory())  tmpDir.mkdir();  if (!saveDir.isDirectory())  saveDir.mkdir();  }
}  

2.3.3 ServletFileUpload

此种方法需要临时文件路径

//上传路径File file = new File("C:/upload");
//临时文件路径File tempFile = new File("C:/uploadtemp");if(!file.exists()) {file.mkdir();
}if(!tempFile.exists()) {tempFile.mkdir();
}
//判断 request 是一个文件上传的 request//通过 ServletFileUpload 类的静态方法 isMultipartContent 来判断if(ServletFileUpload.isMultipartContent(request)) {//用 DiskFileItemFactory 创建新的 file items (只是临时的)//DiskFileItemFactory 创建FileItem 实例,并保存其内容在<b>内存</b>或者<b>硬盘中</b>//通过一个阀值来决定这个 FileItem 实例是存放在<b>内存</b>或者<b>硬盘中</b>DiskFileItemFactory factory = new DiskFileItemFactory();//设置阀值大小//不设置的话,默认10k//超过这个阀值,FileItem将直接写入到磁盘factory.setSizeThreshold(1024*10);//设置临时文件夹//不设置,默认为系统默认Temp文件路径,调用 System.getProperty("java.io.tmpdir") 获取//超过阀值的 FileItem 实例将存放在这个目录中factory.setRepository(tempFile);//构造servletFileUpload 的实例,该实例提供工厂模式创建FileItem的DiskFileItemFactory实例ServletFileUpload fileUpload = new ServletFileUpload(factory);//设置一个<b>完整的请求</b>允许的最大大小(注意是完整请求,包括非file类型的表单,比如Text类型)fileUpload.setSizeMax(10*1024*1024);//设置所允许的最大的单个上传文件大小(对应一个FileItem对象)//fileUpload.setFileSizeMax(10*1024*1024);try {//每一个FileItem 对应一个 request 请求中from表单中的 input 元素//解析 request 请求,将request中提交的值存入List数组List<FileItem> items = fileUpload.parseRequest(request);for(FileItem item : items) {//是不是一个文件上传组件if(!item.isFormField()) {String name = item.getName();System.out.println("name:" + name);System.out.println("length:" + item.getSize());item.write(new File("C:/upload/"+name));} else {String desc = item.getString("UTF-8");System.out.println("文件描述:" + desc);}}} catch (Exception e) {e.printStackTrace();}
} else {throw new RuntimeException("请设置form表单的enctype属性");
}

2.3.4 Commons FileUpLoad

//设置文件上传路径
String UploadFilePath = "d:/upload";
//限制文件大小//通过 request.getHeader("Content-Length") 获取request 请求内容长度来限制if(ServletFileUpload.isMultipartContent(request)) {//创建ServletFileUpload实例ServletFileUpload upload = new ServletFileUpload();try {//解析request 请求 并返回FileItemStream 的iterator 实例FileItemIterator iter = upload.getItemIterator(req);while (iter.hasNext()) {FileItemStream item = iter.next();String name = item.getFieldName();InputStream stream = item.openStream();if (item.isFormField()) {System.out.println("Form field " + name + " with value "+ Streams.asString(stream) + " detected.");} else {System.out.println("File field " + name + " with file name "+ item.getName() + " detected.");// Process the input stream//System.out.println(Streams.asString(stream));System.out.println("shuru:");String filename = new Scanner(System.in).next();BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(new File("e:/upload"),"ez.zip")));BufferedInputStream bis = new BufferedInputStream(stream);byte[] buffer = new byte[1024];int len = -1;while (-1 != (len = bis.read(buffer))){bos.write(buffer,0,len);}bis.close();bos.flush();bos.close();PrintWriter out = resp.getWriter();out.write("完成");System.out.println("wanchengle ");}}} catch (FileUploadException e) {e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.}
} else {throw new RuntimeException("请设置form表单的enctype属性");
}

2.3.5 java自带api FTPClient

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;  import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;  /** * Java自带的API对FTP的操作 */
public class Ftp {  /** * 本地文件名 */  private String localfilename;  /** * 远程文件名 */  private String remotefilename;  /** * FTP客户端 */  private FtpClient ftpClient;  public void connectServer(String ip, int port, String user,  String password, String path) {  try {  /* ******连接服务器的两种方法*******/  //第一种方法
//            ftpClient = new FtpClient();
//            ftpClient.openServer(ip, port);  //第二种方法  ftpClient = new FtpClient(ip);  ftpClient.login(user, password);  // 设置成2进制传输  ftpClient.binary();  System.out.println("login success!");  if (path.length() != 0){  //把远程系统上的目录切换到参数path所指定的目录  ftpClient.cd(path);  }  ftpClient.binary();  } catch (IOException ex) {  ex.printStackTrace();  throw new RuntimeException(ex);  }  }  public void closeConnect() {  try {  ftpClient.closeServer();  System.out.println("disconnect success");  } catch (IOException ex) {  System.out.println("not disconnect");  ex.printStackTrace();  throw new RuntimeException(ex);  }  }  public void upload(String localFile, String remoteFile) {  this.localfilename = localFile;  this.remotefilename = remoteFile;  TelnetOutputStream os = null;  FileInputStream is = null;  try {  //将远程文件加入输出流中  os = ftpClient.put(this.remotefilename);  //获取本地文件的输入流  File file_in = new File(this.localfilename);  is = new FileInputStream(file_in);  //创建一个缓冲区  byte[] bytes = new byte[1024];  int c;  while ((c = is.read(bytes)) != -1) {  os.write(bytes, 0, c);  }  System.out.println("upload success");  } catch (IOException ex) {  System.out.println("not upload");  ex.printStackTrace();  throw new RuntimeException(ex);  } finally{  try {  if(is != null){  is.close();  }  } catch (IOException e) {  e.printStackTrace();  } finally {  try {  if(os != null){  os.close();  }  } catch (IOException e) {  e.printStackTrace();  }  }  }  }public void download(String remoteFile, String localFile) {  TelnetInputStream is = null;  FileOutputStream os = null;  try {  //获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。  is = ftpClient.get(remoteFile);  File file_in = new File(localFile);  os = new FileOutputStream(file_in);  byte[] bytes = new byte[1024];  int c;  while ((c = is.read(bytes)) != -1) {  os.write(bytes, 0, c);  }  System.out.println("download success");  } catch (IOException ex) {  System.out.println("not download");  ex.printStackTrace();  throw new RuntimeException(ex);  } finally{  try {  if(is != null){  is.close();  }  } catch (IOException e) {  e.printStackTrace();  } finally {  try {  if(os != null){  os.close();  }  } catch (IOException e) {  e.printStackTrace();  }  }  }  }    

2.4 下载

2.4.1 页面下载

<h1>通过链接下载文件</h1>
<a href="/day06/download/cors.zip">压缩包</a>
<a href="/day06/download/1.png">图片</a> 

这是因为通过超链接下载文件时,如果浏览器可以识别该文件格式,浏览器就会直接打开。只有浏览器不能识别该文件格式的时候,才会实现下载

2.4.2 java代码示例

response,setContentType()

内容类型

文件扩展名

描述

application/msword

doc dot rtf  wiz

Microsoft Word

application/octet-stream bin

dms lha lzh exe class

可执行程序

application/pdf

pdf

Adobe Acrobat

application/postscript

ai eps ps

PostScript

appication/powerpoint

ppt

Microsoft Powerpoint

application/vnd.ms-powerpoint pot ppa pps ppt pwz 
application/vnd.visio vsw vsx vtx vdx vsd vss vst 

appication/rtf

rtf

rtf 格式

application/x-rtf rtf
application/x-javascript mocha js ls 

application/x-compress

z

unix 压缩文件

application/x-msdownload exe dll 

application/x-gzip

gz

gzip

application/x-gtar

gtar

tar 文档 (gnu 格式 )

application/x-shockwave-flash

swf mfp

MacroMedia Flash

application/x-tar

tar

tar(4.3BSD)

application/zip

zip

winzip

audio/basic

au snd

sun/next 声音文件

audio/mpeg

mpeg mp2 mp2v

Mpeg 声音文件

video/x-mpeg m1v m2v mpe mps
audio/rn-mpeg mpga 
video/mpg mpv mpeg
video/mpeg mpv2

audio/x-aiff

mid midi rmf

Midi 格式

audio/aiff aif aifc aiff

audio/x-pn-realaudio

ram ra rmm

Real Audio 声音

audio/x-pn-realaudio-plugin

rpm

Real Audio 插件

audio/x-wav

wav

Microsoft Windows 声音

application/x-x509-ca-cert crt der cer

image/cgm

cgm

计算机图形元文件

image/gif

gif

COMPUSERVE GIF 图像

image/tiff tif tiff 

image/jpeg

jpeg jpg jpe jfif

JPEG 图像

image/png

png

PNG 图像

java/* class

text/html

html stm xhtml htm htx jsp plg

text/plain

txt sol sor

text/xml

xml vml vxml wsdl xdr sq xql xquery xsd xsl xslt biz cml dcd dtd ent fo math mml mtx rdf spp svg tld tsd mtx

text/json

json字符串

text/css css

方式一:

public HttpServletResponse download(String path, HttpServletResponse response) {try {// path是指欲下载的文件的路径。File file = new File(path);// 取得文件名。String filename = file.getName();// 取得文件的后缀名。String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();// 以流的形式下载文件。InputStream fis = new BufferedInputStream(new FileInputStream(path));byte[] buffer = new byte[fis.available()];fis.read(buffer);fis.close();// 清空responseresponse.reset();// 设置response的Headerresponse.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));response.addHeader("Content-Length", "" + file.length());OutputStream toClient = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");toClient.write(buffer);toClient.flush();toClient.close();} catch (IOException ex) {ex.printStackTrace();}return response;}

方式二:

 public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {// 下载本地文件String fileName = "Operator.doc".toString(); // 文件的默认保存名// 读到流中InputStream inStream = new FileInputStream("c:/Operator.doc");// 文件的存放路径// 设置输出的格式response.reset();response.setContentType("bin");response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");// 循环取出流中的数据byte[] b = new byte[100];int len;try {while ((len = inStream.read(b)) > 0)response.getOutputStream().write(b, 0, len);inStream.close();} catch (IOException e) {e.printStackTrace();}

方式三

public void downloadNet(HttpServletResponse response) throws MalformedURLException {// 下载网络文件int bytesum = 0;int byteread = 0;URL url = new URL("windine.blogdriver.com/logo.gif");try {URLConnection conn = url.openConnection();InputStream inStream = conn.getInputStream();FileOutputStream fs = new FileOutputStream("c:/abc.gif");byte[] buffer = new byte[1204];int length;while ((byteread = inStream.read(buffer)) != -1) {bytesum += byteread;System.out.println(bytesum);fs.write(buffer, 0, byteread);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

方式四(支持在线打开文件的一种方式)

 public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {File f = new File(filePath);if (!f.exists()) {response.sendError(404, "File not found!");return;}BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));byte[] buf = new byte[1024];int len = 0;response.reset(); // 非常重要if (isOnLine) { // 在线打开方式URL u = new URL("file:///" + filePath);response.setContentType(u.openConnection().getContentType());response.setHeader("Content-Disposition", "inline; filename=" + f.getName());// 文件名应该编码成UTF-8} else { // 纯下载方式response.setContentType("application/x-msdownload");response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());}OutputStream out = response.getOutputStream();while ((len = br.read(buf)) > 0)out.write(buf, 0, len);br.close();out.close();}

JSP基础:(7)jsp分页与文件上传下载相关推荐

  1. 基于华为云obs实现文件上传下载(技术栈mysql+springboot+Maven+jsp+java)的技术分享

    基于华为云obs实现文件上传下载(技术栈mysql+springboot+jsp+java)的技术分享 obs实现文件上传下载 前言 一.OBS是什么? 二.使用步骤 1.1 前期准备 2 工具的内容 ...

  2. spring boot基础教程之文件上传下载

    一文件上传 文件上传主要分以下几个步骤: (1)新建maven java project: (2)在pom.xml加入相应依赖: (3)新建一个文件上传表单页面; (4)编写controller; ( ...

  3. SB_5_瑞吉外卖_4_文件上传下载_菜品新增_菜品分页查询_菜品修改

    瑞吉外卖-Day04 课程内容 文件上传下载 菜品新增 菜品分页查询 菜品修改 1. 文件上传下载 1.1 上传介绍 1.1.1 概述 文件上传,也称为upload,是指将本地图片.视频.音频等文件上 ...

  4. 前后端分离 -- 深入浅出 Spring Boot + Vue + ElementUI 实现相册管理系统【文件上传 分页 】 文件上传也不过如此~

    前后端分离 – 深入浅出系列 Spring Boot + Vue + ElementUI 实现相册管理系统[文件上传 分页 ] 文件上传也不过如此~ 引言 Hello,我是Bug终结者,一名热爱后端J ...

  5. java 瑞吉外卖day4及补全功能 文件上传下载 菜品分页查询 Dto类 菜品状态修改 菜品停售以及菜品删除

    文件上传下载 文件下载介绍 文件上传代码实现 服务端上传: @RestController @RequestMapping("/common") @Slf4j public cla ...

  6. salesforce 零基础学习(四十二)简单文件上传下载

    项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文 ...

  7. 渗透测试-文件上传/下载/包含

    渗透测试-文件上传/下载/包含 概述 一.常见校验上传文件的方法 客户端校验 服务器端校验 1.校验请求头 content-type字段 2. 正则匹配来判断文件幻数(文件头)内容是否符合要求 3. ...

  8. Java实现FTP批量大文件上传下载

    用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px ...

  9. SpringMVC之拦截器和文件上传下载

    过滤器与拦截器的区别:拦截器是AOP思想的具体应用. 过滤器 : servlet规范中的一部分,任何java web工程都可以使用 在url-pattern中配置了/*之后,可以对所有要访问的资源进行 ...

最新文章

  1. 蘑菇模拟器TV版 for Android,安卓NES模拟器TV版下载
  2. C++实现输入两个字符串,从第一字符串中删除第二个字符串中所有的字符
  3. javascript回调函数(模式)原理和示例深入分析
  4. LOJ #6358 前夕 (组合计数、容斥原理)
  5. docker部署项目,对镜像,容器的操作
  6. php k线 形态识别,趋势追踪,从设计交易系统开始(七)——形态识别,不只有K线...
  7. Java中sum和Sum相同吗,Java认为变量Sum 和sum相同。
  8. python接口测试第二期_Python接口测试实战2 - 使用Python发送请求
  9. 获取activemq 队列所有数据_ActiveMQ的应用
  10. python 批量重命名文件_Python批量重命名文件的方法
  11. Inside the Linux Operating System[1]
  12. c#类似跑马灯抽签小程序
  13. 测试用例入门(二) - 使用等价类划分法编写测试用例
  14. solidworks工程图剖视图没有从默认的A开始解决办法
  15. 基于大数据的数据仓库-数据仓库的概念
  16. python调用webservice服务
  17. windows10常见故障排查
  18. div 自定义拉宽_纯Css实现Div高度根据自适应宽度(百分比)调整
  19. (二)WebService之调用soap服务
  20. Tossing Bad Mupd Msg Pid In The Alert.Log

热门文章

  1. 命运交响曲计算机弹奏,贝多芬命运交响曲弹奏方法和介绍-雅马哈电子琴排行榜...
  2. Unity 使用贝塞尔曲线实现抛物线运动
  3. 改变水平线hr的颜色
  4. 阿里工作9年,熬到技术总监的我,选择离职:想给还在努力的你提个醒……
  5. OSI网络模型,IO模型,BIO模型,NIO模型,AIO模型,TCP/IP协议
  6. 林肯公园跑步歌单:摇滚助力跑出一道光
  7. 细胞生物学8-第八章-细胞骨架
  8. Unity Google VR Cardboard 后台挂起时陀螺仪仍然占用问题解决
  9. xls和xlsx的区别
  10. 怎样在知网下载PDF版本的硕博士论文