`
shuaigg.babysky
  • 浏览: 571510 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

struts2下载

阅读更多

xml中配置

        <action name="download" class="com.test.DownloadTest">
            <param name="inputPath">/备忘.txt</param>
            <result name="success" type="stream">
                <param name="contentType">text/plain</param>
                <param name="inputName">targetFile</param>
                <param name="contentDisposition">attachment;filename="备忘文件.txt"</param>
                <param name="bufferSize">4096</param>
            </result>
        </action>

 

Action中代码

package com.test;

import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DownloadTest extends ActionSupport {

	private static final long serialVersionUID = -2459892982073583733L;
	
	private String inputPath;

	public String execute() throws Exception {
		return SUCCESS;
	}
	
	public InputStream getTargetFile() throws Exception {
		return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
	}
	public String getInputPath() {
		return inputPath;
	}

	public void setInputPath(String inputPath) {
		this.inputPath = inputPath;
	}

}

 但是这样没有解决下载时候的保存文件名不是正确的文件名的问题。

而且每一个中文文件需要对应一个文件。很不方便。我自己设计了一个标签和一个servlet,专门处理这个问题,并且所有的文件不管在tomcat的web.xml中如何设置mime类型,都会弹出下载对话框,而不是应用相应的程序进行打开。

 

下面是标签库处理类

package com.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MyJspTag extends SimpleTagSupport{

	private String url;
	
	private String display;
	
	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
	
	public String getDisplay() {
		return display;
	}

	public void setDisplay(String display) {
		this.display = display;
	}

	@Override
	public void doTag() throws JspException, IOException {
		this.getJspContext().getOut().println("<a href=\"downloadServlet?path=" + url + "\">" + display + "</a>");
	}
	
}

 下面是标签的tld文件

 

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <tlib-version>1.0</tlib-version>
    <short-name>mytaglib</short-name>
	<uri>my-tag</uri>
	<tag>
		<name>downloadLink</name>
		<tag-class>com.tag.MyJspTag</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<name>url</name>
			<required>true</required>
			<fragment>true</fragment>
		</attribute>
		
		<attribute>
			<name>display</name>
			<required>true</required>
			<fragment>true</fragment>
		</attribute>
	</tag>
</taglib>

 下面是web.xml中对servlet的配置 , 需要将上述tld文件放置在web-inf文件夹下面

<servlet>
  	<servlet-name>downloadServlet</servlet-name>
  	<servlet-class>com.test.DownloadServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>downloadServlet</servlet-name>
  	<url-pattern>/downloadServlet</url-pattern>
  </servlet-mapping>

 下面是Servlet的处理

package com.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

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

import org.apache.commons.io.IOUtils;



public class DownloadServlet extends HttpServlet {

	private static final long serialVersionUID = 8438995458642112537L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String path = request.getParameter("path");
		if(path != null && !path.trim().equals("")) {
			path = new String(path.getBytes("iso-8859-1") , "utf-8");
			String realPath = request.getSession().getServletContext().getRealPath(path);
			File file = new File(realPath);
			if(file.exists() && file.isFile()) {
				InputStream in = null;
				try{
					in = new FileInputStream(realPath);
				}catch (Exception e) {
					PrintWriter pw = response.getWriter();
					pw.println("您请求的资源 " + path + " 不存在");
					pw.close();
					return;
				}
				String fileName = "";
				if(realPath.indexOf("\\") == -1) {
					fileName = realPath; 
				} else {
					fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
				}
				response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes() , "iso-8859-1"));
				OutputStream out = response.getOutputStream();
				IOUtils.copy(in, out);
				IOUtils.closeQuietly(in);
				IOUtils.closeQuietly(out);
			} else {
				PrintWriter pw = response.getWriter();
				pw.println("您请求的资源 " + path + " 不是文件或文件不存在");
				pw.close();
				return;
			}
		} else {
			PrintWriter pw = response.getWriter();
			pw.println("错误的空资源");
			pw.close();
		}
	}
	
}

 下面是jsp中怎样应用标签

 <%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="mytag" uri="/WEB-INF/mytag.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
    <mytag:downloadLink url="中文1.rar" display="中文1"/>
    <mytag:downloadLink url="中文2.txt" display="中文2"/>
</body>
</html>

显示的超链接是这样的。经测试在firefox和ie上基本能够正确处理下载问题。

<a
 href
="downloadServlet?path=%E4%B8%AD%E6%96%871.rar"
>中文1</a
>

	<a
 href
="downloadServlet?path=%E4%B8%AD%E6%96%872.txt"
>中文2</a
>
分享到:
评论

相关推荐

    struts2下载地址

    ### Struts2下载地址及相关知识点 #### 一、Struts2简介 Struts2是一个开源的Web应用框架,它继承了Struts1的设计理念,并在此基础上进行了大量的改进和完善。Struts2是Apache软件基金会下的一个顶级项目,它采用...

    struts2下载功能实现

    在Struts2中实现下载功能是一项常见的需求,这通常涉及到处理文件流并将其发送到客户端。以下是如何在Struts2中实现下载功能的详细步骤: 1. **Struts2配置**: 在Struts2的配置文件(例如struts.xml或类似的配置...

    Struts2 下载取消报异常最终解决办法

    本篇将深入探讨Struts2下载取消报异常的解决方法,以及相关的知识点。 1. **Struts2 文件下载原理** - Struts2提供了方便的Action类和结果类型,如`StreamResult`,来处理文件下载。通过设置HTTP响应头,如`...

    Jxls结合Struts2下载

    标题 "Jxls结合Struts2下载" 暗示了一个教程或示例项目,它展示了如何在基于Struts2的Web应用中使用Jxls库来实现动态Excel文件的下载功能。Jxls是一个Java库,它扩展了Apache POI库,使得在Java中处理Excel模板变得...

    解决struts2下载异常的jar包 struts2-sunspoter-stream-1.0.jar

    有关struts2下载组件的具体介绍我就在此略过了,看此文的同志想必大多是碰到这样让人很是不爽的问题。 下面就将该问题的最终解决办法介绍如下。 问题概要: 在struts2中使用result里type="stream"的结果类型时,...

    struts2,struts2下载

    struts-2.0.6-lib.zip下载,struts下载,struts2下载,Apache Struts 2即是之前大家所熟知的WebWork 2。在经历了几年的各自发展后,WebWork和Struts社区决定合二为一,也即是Struts 2。

    struts2实现文件下载功能

    在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...

    K8 Struts2 Exp 20160516(Struts2综合漏洞利用工具)

    **Struts2漏洞详解** Struts2是一款广泛应用于企业级Java Web开发的开源框架,它为构建MVC(Model-View-Controller)架构的应用程序提供了强大的支持。然而,随着其广泛应用,安全问题也逐渐凸显,其中最为知名的便...

    struts2简单下载功能

    至此,一个基本的Struts2下载功能就实现了。用户点击下载链接,Struts2会通过`DownloadAction`处理请求,读取并返回指定文件,浏览器接收到响应后,会自动弹出文件保存对话框供用户选择保存位置。 请注意,这只是一...

    struts2 最新版 不用去官网上下载了

    在标题和描述中提到的"struts2 最新版"指的是Struts2框架的最新稳定版本,这里提供了一个无需到官方网站下载的途径。 Struts2的核心特性包括: 1. **Action和Result**: Struts2中的Action是业务逻辑的载体,它负责...

    struts2的各种jar包

    Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用程序。它在Java社区中广泛使用,因其灵活性、可扩展性和丰富的插件库而受到赞誉。Struts2的核心是Action类,它处理HTTP...

    struts2资源下载,struts2资源下载

    在"struts2资源下载"中,我们可以获取到与Struts2相关的各种资料,包括但不限于教程、示例代码、API文档、安全补丁以及社区提供的插件等,这些都对学习和使用Struts2框架极其有益。 Struts2的核心功能包括: 1. **...

    struts2实现文件上传下载

    本篇文章将详细探讨如何在Struts2框架下实现文件的上传与下载。 首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在...

    ajax_struts2_上传与下载_无刷新

    3. 在struts2的Action通过2种不同的实现方法返回json格式的字符串。 4. 针对商品实现简单无刷新上传与下载 4. 批量导入数据采用的是导入test文件夹下的测试压缩包upload.rar上传到服务器的临时目录,然后利用WinRar....

    struts2 PDF

    Struts2是一款强大的Java web开发框架,由Apache软件基金会维护,是MVC(Model-View-Controller)设计模式的一种实现。这款框架的核心在于提供了一种结构化的应用开发方式,简化了开发过程,提高了代码的可复用性...

    jxl+struts2下载execl创建多个sheet

    jxl+struts2下载execl创建多个sheet

    struts2下载上传

    struts下载上传 包括对中文处理 文件大小 扩展名 类型 处理等

    Struts2下载文件点击取消出现的异常解决办法(含demo)

    在我们做struts2文件下载的时候,经常会遇到这种问题:点“打开/保存”一切正常,但当我们点击“取消”时,却报一堆的异常(其中包括ClientAbortException异常),非常让人头疼,如何彻底解决呢?附件中使用struts2-...

    struts2.2.3需要11个基本包

    在Java Web开发中,Struts2被广泛用于构建企业级应用,提供了强大的控制层,使得开发者能够更有效地管理请求和响应流程。Struts2.2.3的"需要11个基本包"是指为了成功地配置和运行Struts2框架,开发者通常需要引入一...

Global site tag (gtag.js) - Google Analytics