基于Struts2框架的文件下载 --- Struts2

一、通过链接的方式提供指定类型文件的下载

1、最终功能实现的截图:(点击文件下载链接,下载文件 )

2、核心代码

index.jsp:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 7 <html>
 8   <head>
 9     <base href="<%=basePath%>">
10
11     <title>My JSP ‘index.jsp‘ starting page</title>
12     <meta http-equiv="pragma" content="no-cache">
13     <meta http-equiv="cache-control" content="no-cache">
14     <meta http-equiv="expires" content="0">
15     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
16     <meta http-equiv="description" content="This is my page">
17   </head>
18   <body>
19     <a href="<%=path%>/downloadFile?download=UploadFile/readme.doc">点击链接下载文件</a>
20   </body>
21 </html>

struts.xml:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <package name="default" namespace="/" extends="struts-default">
 7         <action name="downloadFile" class="com.thanlon.action.DownloadFileAction">
 8             <result name="success" type="stream"><!-- result类型是流(stream)类型 -->
 9                 <param name="inputName">inputStream</param><!-- inputName指向被下载文件的来源,对应Action中返回的InputStream -->
10                 <param name="contentType">${contentType}</param><!-- 下载的内容类型,如图片类型、文档类型等…… -->
11                 <param name="contentDisposition">
12                     <!-- 指定文件下载的处理方式,内联(inline)和附件(attachment)两种方式,attachment会弹出文件保存对话框 -->
13                     attachment;filename=${filename}
14                 </param>
15             </result>
16         </action>
17     </package>
18 </struts>

DownloadFileAction.java:

 1 package com.thanlon.action;
 2
 3 import java.io.InputStream;
 4
 5 import org.apache.struts2.ServletActionContext;
 6
 7 import com.opensymphony.xwork2.Action;
 8
 9 public class DownloadFileAction implements Action {
10
11     private String downloadPath;// 下载的路径
12     private String contentType;// 下载文件的类型
13     private String fileName;// 文件类型
14
15     public String getDownloadPath() {
16         return downloadPath;
17     }
18
19     public void setDownloadPath(String downloadPath) {
20         this.downloadPath = downloadPath;
21     }
22
23     public String getContentType() {
24         return contentType;
25     }
26
27     public void setContentType(String contentType) {
28         this.contentType = contentType;
29     }
30
31     public String getFileName() {
32         return fileName;
33     }
34
35     public void setFileName(String fileName) {
36         this.fileName = fileName;
37     }
38
39     @Override
40     public String execute() throws Exception {
41         // TODO Auto-generated method stub
42         downloadPath = ServletActionContext.getRequest().getParameter(
43                 "download");
44         System.out.println(downloadPath);// downloadPath为相对路径,打印出“/UploadFile/readme.doc”
45         int position = downloadPath.lastIndexOf("/");// 借助lastIndexOf函数,从右向左查找第一个/
46         System.out.println(position);// 打印"/"所造的坐标
47         if (position > 0) {
48             fileName = downloadPath.substring(position + 1);// 得到文件的名字(全名,带后缀)
49             System.out.println(fileName);// 輸出文件名,本例輸出readme.doc
50         } else {
51             fileName = downloadPath;
52         }
53         contentType = "application/msword";// 指定下载问文件的类型
54         return SUCCESS;
55     }
56
57     /**
58      * 返回InputStream
59      *
60      * @return
61      */
62     public InputStream getInputStream() {
63         InputStream inputStream = ServletActionContext.getServletContext()
64                 .getResourceAsStream(downloadPath);
65         // System.out.println(inputStream);输出inputStream,如果为null表示路径出错
66         return inputStream;
67     }
68 }

附:个人网站www.nxl123.cn(后台采用Python Flask框架搭建,2019年1月1日将升级完成并正式启用。哎,本人是学生狗呢!网站做的不好希望大家多多提意见或建议吧!?别骂我、打我就好,嘿嘿!……以后SEO什么的还得多向大家学习……)

原文地址:https://www.cnblogs.com/qikeyishu/p/9155415.html

时间: 2024-10-18 16:50:17

基于Struts2框架的文件下载 --- Struts2的相关文章

第3章 Struts2框架--1、Struts2环境搭建

搭建步骤: 1.从下载http://struts.apache.org 没找到Struts2.3.16版,就下载了2.3.29 2.拷贝后解压到本地文件夹,在eclipse(Juno Release)的菜单Windows-->Preferences,添加Struts2用户库 3.新建一个Dynamic Web Project,在Java Build Path 里面的Libraries添加Struts2用户库 4.给jar添加源码

Struts2框架概述

Struts2-day01 一. 框架概述 什么是框架,为什么使用框架,框架优点 框架(framework)是一个基本概念上的结构,用于去解决或者处理复杂的问题 框架,即framework.其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统.简单说就是使用别人搭好的舞台,你来做表演. 框架是在特定的领域内解决问题. 优点 重用代码大大增加,软件生产效率和质量也得到了提高 使用框架开发,它提供统一的标准,大大降低了我们的后期维护. 学习框架重点:了解框架做了什么,我们要在这个基础上在

和Struts2框架的初体验

Struts2的基础知识 问题一:什么是框架 框架是一个基本概念上的结构用于解决复杂的问题,应用在特定的领域内.使用框架可以使代码的复用大大提高,开发效率和质量也得到提高;他提供统一的标准,使后期维护的时间大大降低.归根到底框架就是用来提高开发效率的一种工具. 问题二:什么是Struts2框架 简单来说Struts2框架是基于MVC设计模式的Web应用框架,他本质相当于一个Servlet,所以他在MVC设计模式中相当于一个控制器,用来建立模型和视图的数据交互. 问题三:为什么使用Struts2而

Struts2框架起源

曾经也用过S2SH框架做过几个项目,都不是工作中的,学习WEB开发的时候接触的第一套框架也是S2SH,可是工作之后一直没实用到S2SH 框架进行开发. 感觉曾经用这个框架的时候根本没有深入去了解这个框架,仅仅是照着人家搭建好的模式去开发,所以打算近一两个月工作业余时间每天 整理点关于S2SH框架的知识,基本的方式还是看书.写代码.整理笔记.(世界杯? 不耽误,我每天回家还能看一场晚上12点的) 2001年Struts1框架诞生.它是全世界第一个MVC框架,也曾一度是MVC领域最流行的一个框架.经

MVC模式-----struts2框架(2)

MVC模式-----struts2框架 第一个struts2程序 struts2框架是通过一个过滤器将struts2集成到Web应用程序中的,这个过滤器的对象是StrutsprepareAndExecuteFilter.struts2框架通过过滤器对象,获取web应用中的Http请求,并将http请求转发到的指定Action进行处理,Action根据处理结果返回给用户相应的页面. 创建一个简单的struts项目,需要创建于用户进行交互并获取输入信息的jsp页面:呈现最终信息的页面:创建一个用于业

基于struts2框架开发的学生管理系统

学生管理系统采用struts2框架作为后台开发框架,jsp实现页面数据的展示,数据库采用mysql.功能介绍:包含学生信息管理,班级信息管理,年级信息管理,系统信息管理等功能.数据库模型设置如下:CREATE TABLE t_class (classId int(11) NOT NULL auto_increment,className varchar(20) default NULL,gradeId int(11) default NULL,classDesc text,PRIMARY KEY

JAVAWEB开发之Struts2详解(一)——Struts2框架介绍与快速入门、流程分析与工具配置以及Struts2的配置以及Action和Result的详细使用

Struts2框架介绍 三大框架:是企业主流JavaEE开发的一套架构.Struts2 + Spring + Hibernate 什么是框架?为什么要学习框架? 框架是实现部分功能的代码(半成品),使用框架简化企业级软件开发. Struts2与MVC? Struts是一款优秀的MVC框架 MVC:是一种思想,是一种模式,将软件分为Model模型.View视图.Controller控制器 JAVAEE软件三层架构:web层(表现层).业务逻辑层.数据持久层(Sun提供javaEE开发规范) Jav

自定义验证器——用Struts2框架以框架师的思维灵活做好该事情

面对的问题:自定义一个18位身份验证器,编写验证器,在validators.xml文件中进行注册.在验证配置文件中使用? 第一部分:理解Struts2中自带的验证器 第二部分:怎样通过服务器(后台),再次对前台的数据进行验证 第三部分:用Struts2来自定义验证器(问题解决方案) 第一部分:理解Struts2中自带的验证器 Struts2框架中自带的后台服务器验证分为两种:声明式验证和编程式验证 u  声明式验证(重点) ?  对哪个 Action 或 Model 的那个字段进行验证 ?  使

Struts2框架具体解释

在Struts2的Model-View-Controller模式实现下面五个核心组件: 动作-Actions 拦截器-Interceptors 值栈/OGNL 结果/结果类型 视图技术 Struts 2和传统的MVC框架有些不同,在该框架中的作用的模式,而不是控制器的作用略有不同.尽管有一些重叠. 这是Struts的MVC模式的体系结构概述. 上图描写叙述了Struts2的高层体系结构模型.视图和控制器. 一个Struts2的调度Servlet过滤器和拦截器与控制器实现.该模型实现的动作和视图的