`
zz130jj
  • 浏览: 3213 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于在Struts中文件下载功能实现的关键代码

阅读更多
与文件上传相比,Struts中的文件下载相对要简单的多。今天只做一个简单的例子,在这个例子上稍加修改便可做到灵活应用。

首先要做的仍然是新建一个web工程,如果是MyEclipse 则导入Struts支持,Eclips则导入Struts相应jar包

下面进入正题,文件下载的关键代码如下:

Action中的文件下载代码


package com.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

public class DownloadAction extends DispatchAction {
public ActionForward down(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
   //设置字符编码格式
   response.setCharacterEncoding("utf-8");
   try {
    request.setCharacterEncoding("utf-8");
   } catch (UnsupportedEncodingException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   }
   //从页面得到传入的要下载文件的名称
   String filename = request.getParameter("filename");
   try {
    //将文件名从utf-8转化为iso-8859-1
    filename = new String(filename.getBytes("iso-8859-1"), "utf-8");
    //得到要下载文件的具体路径
    String path = request.getRealPath("vadio") + "\\" + filename;
    //实例化出要下载文件
    File file = new File(path);
    //得到要下载文件的文件读取流
    InputStream is = new FileInputStream(file);
    //定义文件输入流,用于下载文件
    OutputStream os = response.getOutputStream();
    //设置响应体属性,文件下载操作的关键就在这儿
    response.addHeader("Content-Disposition",
      "attachment;filename="+ new String(file.getName().getBytes("iso-8859-1"),"utf-8"));
    //文件头属性设置
    response.addHeader("Content-length", file.length() + "");
    //响应体内容设置
    response.setContentType("application/octet-stream");
    //下载文件大小记数器
    int count = 0;
    //实例化一个byte数组用于写入一次写入文件的大小
    byte[] buffer = new byte[1024 * 1024];
    //如果读取文件成功
    while ((count = is.read(buffer)) != -1) {
     //下载文件
     os.write(buffer, 0, count);
    }
   } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return null;
}
}

Struts配置文件:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
<data-sources />
<form-beans />
<global-exceptions />
<global-forwards />
<action-mappings >
<action path="/down" type="com.action.DownloadAction" parameter="method"></action>
</action-mappings>
<message-resources parameter="com.yourcompany.struts.ApplicationResources" />
</struts-config>

web.xml配置文件:


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

前端测试页面:


<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
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>My JSP 'index.jsp' starting page</title>
   <meta http-equiv="pragma" content="no-cache">
   <meta http-equiv="cache-control" content="no-cache">
   <meta http-equiv="expires" content="0">
   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
   <meta http-equiv="description" content="This is my page">
   <!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>
   <a href="down.do?method=down&filename=daomei-33.rmvb">倒霉熊-33.rmvb下载</a>
   <a href="down.do?method=down&filename=倒霉熊-34.rmvb">倒霉熊-34.rmvb下载</a>
</body>
</html>
1
1
分享到:
评论

相关推荐

    配置Struts 2开发环境,了解和熟悉Struts 2的开发流程、了解和熟悉Struts2标签的使用方法.rar

    1.正确创建Action类; 2.配置struts.xml文件; 3.掌握在视图中访问Action的方法. 4. 掌握在视图中多方法调用同一个...在做的过程中需要截图,以及关键代码或者截图,截图需要全屏截图。运行结果截图需要带IP地址那种形式

    struts2带进度条文件上传

    1.struts2 带进度条文件上传 源码 2.源码中有lib 下载后部署马上就能用 3.代码中有详细的注释信息 4.对关键点有详细的解释说明 5.如果谁用起来觉得有问题可在评论留言,留联系方式,我会联系你的 6.非常感谢原创作者...

    struts2多文件上传

    struts2多文件上传,写的一个比较简单的例子,主要就是些关键代码

    struts2中action接收参数的方式

    程序参考源代码 博文链接:https://honly-java.iteye.com/blog/1605764

    Struts原理、开发及项目实施

    Struts原理、开发及项目实施 Holen 2002-9-12 &lt;br/&gt;1... Servlet的演变:在常规的 JSP,Servlet,JavaBean三层结构中,JSP实现View的功能,Servlet实现Controller的功能,JavaBean实现Model的实现...

    struts2的总结,适合初学者

    2、不用再写任何的servlet,这样在web.xml中写的代码就很少了。 3、原来需要写serlvet,现在改写action。 4、在action中把HttpServletRequest参数和HttpServletResponse参数传递过去。 5、在过滤器中通过java的反射...

    图书管理系统(struts+hibernate+spring).rar

    通过这个资料包,用户可以深入了解和学习如何在Web应用程序中实现一个图书管理系统,掌握如何将Struts、Hibernate和Spring框架整合在一起,实现分层架构、MVC设计模式以及ORM映射等关键技术。Struts作为一款优秀的...

    源码基于JSP的博客系统(struts+hibernate+spring).rar

    这个名为“基于JSP的博客系统(struts+...通过分析和使用这些源码,开发者可以学习到如何在现实项目中实现安全的用户认证、内容管理、数据持久化和多层架构设计等关键功能。无论是作为教育工具还是作为实际项目

    JAVA上百实例源码以及开源项目

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    MyEclipse 6 Java EE 开发中文手册 第九章完整

    第九章 开发Struts 1.x应用 145 9.1 介绍 145 9.2 创建Struts项目 147 9.2.1 创建Web项目 148 9.2.2 加入 Struts开发功能 148 9.3 使用Struts工具 150 9.3.1 Struts配置文件编辑器 150 9.3.2 ...

    信息办公电信计费系统完整代码-netctossconformity.rar

    在内容上,该资料包可能包括了前端用户界面和后端服务器逻辑的源代码,使用JSP(Java Server Pages)技术实现。前端可能会涵盖用户注册、登录、查看账单和支付历史等操作的用户界面,而后端则包含数据库交互、计费...

    《MyEclipse 6 Java 开发中文教程》前10章

    9.5.7 练习:如何用Hibernate+Struts实现修改用户信息功能? 196 9.6 小结 197 9.7 参考资料 197 第十章 开发Spring应用 198 10.1 简介 198 10.1.1 Spring简介 198 10.1.2 MyEclipse的Spring开发功能简介 200 10.2 ...

    Spring中文帮助文档

    在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. checkboxes标签 13.9.6. radiobutton标签 13.9.7. radiobuttons...

    最新课程在线教学平台设计与实现+jsp.zip

    2. **技术文档**: 详细介绍如何使用JSP技术和可能的后端框架(如Spring或Struts)进行开发,涵盖页面渲染、表单处理和服务器端逻辑等方面。 3. **前端页面**: 利用JSP和其他前端技术(如HTML, CSS, JavaScript)实现...

    java面试宝典

    140、如何中SERVLET或JSP下载一个文件(如:binary,text,executable)? 36 141、使用useBean标志初始化BEAN时如何接受初始化参数 36 142、使用JSP如何获得客户浏览器的信息? 36 143、能象调用子程序一样调用JSP吗?...

    Spring面试题

    在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。 9. 说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm...

    Java语言基础下载

    文档对象功能及其作用 538 document中三个主要的对象 539 文档对象的基本元素 541 窗口及输入输出 544 输出流及文档对象 546 简单的输入、输出例子 547 内容总结 551 独立实践 552 第二十八章: Servlet 553 学习...

Global site tag (gtag.js) - Google Analytics