文件下载jspServlet

原创 2013年12月02日 00:11:12

下载
承接以前的上傳
列出文件:

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  String real=getServletContext().getRealPath("/WEB-INF/Files");
  Map<String,String> map=new HashMap<String, String>();
  File file=new File(real);
  listfiles(file,map);
  request.setAttribute("map", map);
  request.getRequestDispatcher("/ListFiles.jsp").forward(request, response);
 }

 private void listfiles(File file, Map<String, String> map) {
  // TODO Auto-generated method stub
  if(file.isFile()){
   String uuidn=file.getName();
   String oldname=uuidn.substring(uuidn.indexOf("_")+1);
   map.put(uuidn, oldname);
  }
  else{
   File[] fis=file.listFiles();
   for(File f:fis){
    listfiles(f, map);
   }
  }
 }


 

jsp:

    <h1>本站资源</h1>
    <c:forEach items="${map}" var="me">
    <c:url value="/servlet/Download" var="url">
     <c:param name="filename" value="${me.key}"></c:param>
    </c:url>
    <a href="${url }"> ${me.value }<br /></a>
    </c:forEach>


 

处理下载:

 

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  String real=getServletContext().getRealPath("/WEB-INF/Files");
  Map<String,String> map=new HashMap<String, String>();
  File file=new File(real);
  listfiles(file,map);
  request.setAttribute("map", map);
  request.getRequestDispatcher("/ListFiles.jsp").forward(request, response);
 }

 private void listfiles(File file, Map<String, String> map) {
  // TODO Auto-generated method stub
  if(file.isFile()){
   String uuidn=file.getName();
   String oldname=uuidn.substring(uuidn.indexOf("_")+1);
   map.put(uuidn, oldname);
  }
  else{
   File[] fis=file.listFiles();
   for(File f:fis){
    listfiles(f, map);
   }
  }
 }


 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  OutputStream out = response.getOutputStream();
  
  String filename = request.getParameter("filename");// get请求方式
  filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");// 中文编码
  
  // 截取老文件名
  String oldFileName = filename.substring(filename.indexOf("_")+1);
  // 得到存储路径
  String storePath = getServletContext().getRealPath("/WEB-INF/files");
  // 得到文件的全部路径
  String filePath = makeStorePath(storePath, filename)+"\\"+filename;
  
  // 判断文件是否存在
  File file = new File(filePath);
  if(!file.exists()){
   out.write("对比起!你要下载的文件可能已经不存在了".getBytes("UTF-8"));
   return;
  }
  
  InputStream in = new FileInputStream(file);
  // 通知客户端以下载的方式打开
  response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(oldFileName, "UTF-8"));
  
  byte[] b = new byte[1024];
  int len = -1;
  while((len=in.read(b))!=-1){
   out.write(b, 0, len);
  }
  in.close();
  out.write("下载成功".getBytes("UTF-8"));
 }
 private String makeStorePath(String storePath, String fileName) {
  int hashCode = fileName.hashCode();
  int dir1 = hashCode & 0xf;// 0000~1111:整数0~15共16个
  int dir2 = (hashCode & 0xf0) >> 4;// 0000~1111:整数0~15共16个

  String path = storePath + "\\" + dir1 + "\\" + dir2; // WEB-INF/files/1/12
  File file = new File(path);
  if (!file.exists())
   file.mkdirs();

  return path;
 }


处理Get方式的异常:

filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");// 中文编码
处理Post方式的乱码:

 request.setCharacterEncoding("utf-8")

JSPSERVLET

MVC模式中的控制器,在ECLIPSE 中可以使用新建SERVLET方法去建造一个. 长用于接收前段JSP的代码,进行逻辑处理。 这种设计模式是为了安全,以及设计模块化,比方说相同的SERVLET...
  • wy358509
  • wy358509
  • 2017年04月18日 20:28
  • 57

JSPServlet面试题

1、jsp有哪些内置对象作用分别是什么 答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):  request      用户端请求,此请求会包含来自GET/POST请求的参数...
  • hxw_506
  • hxw_506
  • 2011年11月07日 19:02
  • 260

DefaultServlet和JspServlet

tomcat中经常要用到: DefaultServlet 处理Servlet, JspServlet编译Jsp文件。 DefaultServlet         default         ...
  • bingmeng
  • bingmeng
  • 2010年06月11日 19:58
  • 1011

JSPServlet精华笔记—新手必备

一、     JSP (Java Server Pages) JSP是指: ▶    在HTML中嵌入Java脚本代码 ▶    由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码 ...
  • a125138
  • a125138
  • 2012年09月27日 19:29
  • 3633

jsp在Servlet下载图片和远程加载Servlet上的图片

下载图片要使用form,也可以用ajax生成form访问。 到入图片是实现的 在下载图片时候Servlet要设置:  //一定要设置:attachment表示内容以附件的形式打开 response.s...
  • liangwenmail
  • liangwenmail
  • 2016年07月24日 18:36
  • 516

JspServlet防止二次提交

@每次请求时产生一个token(一般为时间戳),存于session中并随之用hidden提交,在servlet中判断接收到的token和session中的是否一致来判断是否重复提交,如果不是则重新产生...
  • lhy03188
  • lhy03188
  • 2013年08月30日 21:00
  • 502

jsp&Servlet-单表信息操作

1.建立数据库中的book表 2.将book表中的属性封装在model文件夹下 package com.oracle.book.model; import java.io.Serializable;...
  • fightingcoder419
  • fightingcoder419
  • 2016年08月03日 19:46
  • 870

【J2EE十三个规范】Web应用层之JSP和Servlet

【学习概要】     本篇博客开始将会开始总结J2EE十三个规范的内容,在学习完十三个规范之后,宏观梳理了一遍,将其进行归类和联系,十三个规范是什么是必须要知道的。下面我们就从Web应用层开始。 ...
  • u013034223
  • u013034223
  • 2016年03月02日 00:21
  • 1147

JSPServlet编码问题总结

设置编码的方式分为: pageEncoding="UTF-8"、contentType="text/html;charset=UTF-8"、request.setCharacterEncoding(...
  • yunyun1886358
  • yunyun1886358
  • 2013年10月30日 23:07
  • 586

JavaWeb---DefaultServlet和JspServlet

在tomcat文件夹中,${CATALINA}\conf\web.xml文件就是javaee项目中的web.xml文件。该文件中包含一个优先级最低的默认的Servlet,即DefaultServlet...
  • u011573551
  • u011573551
  • 2016年08月09日 15:40
  • 236
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文件下载jspServlet
举报原因:
原因补充:

(最多只允许输入30个字)