package com.jshop.action;
import java.io.FileInputStream;
import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.json.annotations.JSON;
import org.springframework.stereotype.Controller;
import com.jshop.action.tools.BaseTools;
import com.jshop.action.tools.Validate;
import com.jshop.dao.sqlite.SQLiteDBHelper;
import com.jshop.entity.ArticleT;
import com.jshop.service.ArticleTService;
import com.opensymphony.xwork2.ActionSupport;
@ParentPackage("jshop")
@Controller("fileDownloadAction")
@Action(value="download",results={@Result(name = "success", type = "stream", params = { "contentType",
"application/octet-stream;charset=ISO8859-1", "inputName",
"inputStream", "contentDisposition",
"attachment;filename=${downloadFileName}", "bufferSize", "4096" })})
public class FileDownloadAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private final static String DOWNLOADPATH="PDF";
// private String fileName;// 初始的通过param指定的文件名属性
private ArticleTService articleTService;
private String articleid;
private String contentvalue;
private String dbmanagemernt;
private ArticleT bean = new ArticleT();
private SQLiteDBHelper db=new SQLiteDBHelper();
private String fileName;
public String getContentvalue() {
return contentvalue;
}
public void setContentvalue(String contentvalue) {
this.contentvalue = contentvalue;
}
@JSON(serialize = false)
public ArticleTService getArticleTService() {
return articleTService;
}
public void setArticleTService(ArticleTService articleTService) {
this.articleTService = articleTService;
}
public String getArticleid() {
return articleid;
}
public void setArticleid(String articleid) {
this.articleid = articleid;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getDbmanagemernt() {
return dbmanagemernt;
}
public void setDbmanagemernt(String dbmanagemernt) {
this.dbmanagemernt = dbmanagemernt;
}
public InputStream getInputStream() throws Exception {
try {
if(Validate.StrNotNull(this.getArticleid())){
bean=this.getArticleTService().findArticleByarticleid(this.getArticleid().trim());
fileName=bean.getTitle()+".PDF";//文件名
return new FileInputStream(ServletActionContext.getServletContext().getRealPath("")+"/PDF/"+fileName);
}else if(Validate.StrNotNull(this.getDbmanagemernt())){
fileName="general.sql";
return new FileInputStream(ServletActionContext.getServletContext().getRealPath("")+"/backupDatabase/"+fileName);
}else{
try {
fileName="jshopmactive.db";
// String path=ServletActionContext.getServletContext().getRealPath("")+"/sqliteDB/"+fileName;
// File f= new File(path);
// if(!f.exists()){
return new FileInputStream(ServletActionContext.getServletContext().getRealPath("")+"/sqliteDB/"+fileName);
// }else{
// return new FileInputStream(path);
// }
} catch (Exception e) {
throw e;
}
}
} catch (Exception e) {
throw e;
}
// return null;
}
public String execute() throws Exception {
return SUCCESS;
}
/** 提供转换编码后的供下载用的文件名 */
public String getDownloadFileName() {
String downFileName = fileName;
try {
downFileName = new String(downFileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return downFileName;
}
}
这里调用的是struts2 内部的下载机制,运用的是struts2 注解方式。注解方式,是将整个class 作为一个Action 供前台调用。
分享到:
相关推荐
在本资源中,我们将探讨如何利用Struts2的注解方式来实现文件的上传和下载功能,这对于任何Web应用来说都是至关重要的特性。 首先,我们来看“注解”在Struts2中的作用。Struts2允许开发者使用注解来配置Action类,...
Struts2注解登录是Java Web开发中一种简化配置的方式,它允许开发者在代码中直接定义控制器、动作和结果页面的映射,从而避免了传统方式下需要在`struts.xml`配置文件中的繁琐设置。这种做法提高了代码的可读性和可...
下面将详细介绍这个“struts2文件上传下载(注解版)”项目的关键知识点。 1. **注解配置**: 在传统的Struts2配置中,我们需要在struts.xml文件中手动配置Action类与结果页面的映射。然而,使用注解可以在Action...
本文将详细介绍如何使用Struts2框架结合注解(Annotation)的方式实现文件下载功能。 #### 一、Struts2框架简介 Struts2是一个基于MVC架构的Java Web应用框架,它继承了Struts1的优点,并在此基础上进行了改进。...
首先,Struts2的注解允许我们避免传统的XML配置,从而实现更加简洁、直观的编程方式。在`Struts2Demo`项目中,我们可以看到Action类是如何通过注解进行声明的。例如,`@Action`注解用于定义一个方法作为处理HTTP请求...
在Struts2框架中,注解开发是一种简化配置的方式,它允许开发者在类或方法级别直接标注,以定义动作、结果、参数等信息,从而减少XML配置文件的使用。本知识点将详细介绍Struts2中的注解开发及其核心组件。 标题...
Struts2是一个非常流行的Java Web框架,用于构建企业级应用。它的强大之处在于提供了一种模型-视图-控制器(MVC)架构,使得开发者能够更有效地管理应用程序的业务逻辑、用户界面和数据流。在Struts2中,文件上传和...
在处理文件上传和下载这类常见任务时,Struts2提供了一种简洁的方法,尤其是通过注解进行配置,可以实现“零XML”配置,使得开发过程更加高效。本文将深入探讨如何使用Struts2的注解来实现文件的上传与下载。 首先...
<constant name="struts.objectFactory" value="struts注解工厂类全限定名,比如:org.apache.struts2.spring.StrutsSpringObjectFactory" /> <package name="default" extends="struts-default"> ...
### Struts2注解详细说明 #### 一、概述 Struts2框架是Apache软件基金会下的一个开源项目,它提供了一种构建企业级Java Web应用的解决方案。自Struts2.1版本开始,引入了一个重要的插件——Convention Plugin,该...
### Struts2 注解详解 #### 一、Struts2 Convention 插件介绍与使用 在 Struts2 框架的发展过程中,随着版本的更新和技术的演进,其配置方式也发生了变化。从 Struts2.1 版本开始,官方不再推荐使用 Codebehind ...
在Struts2中,注解(Annotation)是开发者常用的一种元数据表示方式,它允许我们在代码中直接标注信息,简化配置文件。"struts2注解必须包"指的是Struts2提供的一系列注解,它们对于简化Struts2应用的配置和增强其...
然而,随着Java注解的广泛应用,Struts 2也引入了注解配置的方式来简化开发过程,避免了XML配置的繁琐。 在"Struts 2使用注解配置Action"中,我们不再需要在struts.xml中为每个Action类手动添加配置。相反,我们...
"Struts2 注解配置 Action 及拦截器几种不同方式写法对应的路径指向" Struts2 注解配置 Action 及拦截器是 Struts2 框架中的核心组件之一,负责处理用户请求并返回响应结果。下面,我们将通过详细的解释和示例代码...
为了解决这一问题,Struts2提供了两种简化配置的方式:一种是按照约定来自动配置,另一种是使用Java注解来替代struts.xml文件中的配置。 通过使用注解,可以将一些基础配置信息从struts.xml文件中移除,让应用不...
Struts2 提供了一种使用注解替代 XML 配置的方式,使得开发者无需编写繁琐的 struts.xml 文件,即可完成Action的配置。 **Struts2 注解配置** 1. **Action 注解** - `@Action` 用于标记一个类或方法作为 Struts2 ...
在Java Struts2框架中实现文件上传进度条显示,主要涉及到的技术点包括Struts2的文件上传、Ajax异步通信以及前端进度条组件的使用。下面将详细讲解这些知识点。 首先,Struts2的文件上传功能是通过Struts2提供的`...
通过这些注解,我们可以在不编写XML配置文件的情况下,构建完整的Struts2应用。这种方式不仅使代码更加清晰,而且更易于维护。在提供的压缩包中,你可能看到类似以上示例的代码结构,它们展示了如何在实际项目中运用...
Struts2注解配置是Java Web开发中一种高效、简洁的框架配置方式,它允许开发者在类或方法级别上直接定义Action、结果类型、参数映射等信息,从而避免了传统XML配置文件的繁琐。本资料集合了关于Struts2注解配置的...
随着Struts2框架的不断更新和发展,很多开发者在尝试使用注解方式进行配置时往往会遇到不少难题。尤其是在使用Struts2.1及以上版本时,由于大部分教程和资料仍然基于早期版本(如2.0版),这使得学习者难以找到适合...