知道如何上去?也得知道如何下来--Struts 2 下载文件(13)

C盘根目录文件解析——必须清楚的20个文件.txt 你对C盘中的系统文件是否有足够的了解咧!通过学习你可以进一步的了解你的系统. 立即下载

11.3  Struts 2控制文件下载

文件下载相对于文件上传要简单得多,最简单的方式就是直接在页面上给出一个下载文件的链接,使用Struts 2框架来控制文件的下载,关键是需要配置一个stream类型的结果,需要指定下面4个属性。

— contentType属性:指定被下载文件的文件类型。

— inputName属性:指定被下载文件的入口输入流。

— contentDisposition属性:指定下文件的文件名称。

— bufferSize属性:指定下载文件时的缓冲区大小。

配置上面4个属性,既可以在配置文件中配置,也可以在Action中设置该属性来完成配置。

11.3.1   在配置文件中指定下载资源

下面给出在配置文件中指定下载资源的示例,如代码11.9所示。

代码11.9  文件下载业务控制器

package ch11;

import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;

public class FileDownloadAction implements Action {

    private String inputPath;

    public void setInputPath(String value) {

        inputPath = value;

    }

    //返回一个InputStream类型值

    public InputStream getInputStream() throws Exception {

        return ServletActionContext.getServletContext().getResourceAsStream (inputPath);

    }

    public String execute() throws Exception {

        return SUCCESS;

    }

}

该Action非常简单,并没有其他特殊之处,关键在于配置文件中关于该Action的配置,其内容如下所示:

<!--配置文件定义文件下载-->

        <action name="download" class="ch11.FileDownloadAction">

            <!--指定下载资源位置-->

            <param name="inputPath">/upload/struts-power.gif</param>

            <!--指定success逻辑视图为一个stream类型,即流视图-->

            <result name="success" type="stream">

                <!--下载文件的类型-->

                <param name="contentType">image/gif</param>

                <!--下载文件位置-->

                <param name="inputName">inputStream</param>

                <param name="contentDisposition">

                    filename="struts.gif"

                </param>

                <!--缓冲区大小-->

                <param name="bufferSize">4096</param>

            </result>

</action>

读者可以看到,该Action指定了一个success返回逻辑视图,该视图类型为stream,即一个流类型,即需要下载的资源流。本示例中,在该success逻辑视图中增加了4个参数,参数contentType指定了下载资源的类型;inputName参数和contentDisposition参数指定了下载资源的位置;bufferSize参数指定了下载资源的缓冲区大小。

在Action配置中,初始化了一个inputPath参数,即指定了下载资源的Web相对位置。读者可以运行该示例,在浏览器中输入http://localhost:8080/bookcode/ch11/download.action,结果如图11.11所示。

图11.11  Struts 2控制文件下载界面

11.3.2   在Action中指定下载资源

前面的示例在配置文件中指定了下载资源的相关信息,但是这样指定资源是静态的,一般的应用要求系统根据用户不同的需要来动态下载资源。Struts 2框架还允许在Action中动态设置相关的资源下载配置信息,如代码11.10所示。

代码11.10  动态指定下载资源的业务控制器

package ch11;

import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionSupport;

public class Filedownload extends ActionSupport {

    private String inputPath;

    private String contentType;

    private String filename;

    //返回一个InputStream类型值

    public InputStream getInputStream() throws Exception {

        return ServletActionContext.getServletContext().getResourceAsStream(

                inputPath);

    }

//execute方法

    public String execute() throws Exception {

        //调用相关业务逻辑方法,动态设置相关下载信息

        inputPath = "/upload/struts-power.gif";

        filename = "test.gif";

        contentType = "image/gif";

        return SUCCESS;

    }

    public String getContentType() {

        return contentType;

    }

    public void setContentType(String contentType) {

        this.contentType = contentType;

    }

    public String getFilename() {

        return filename;

    }

    public void setFilename(String filename) {

        this.filename = filename;

    }

}

读者可以看到,该Action可以根据用户的不同请求,动态指定不同的下载资源信息,下面的代码是对应的配置文件内容:

<action name="filedownload" class="ch11.Filedownload">

            <result name="success" type="stream">

                <!--  定义相关参数值-->

                <param name="contentType">${contentType}</param>

                <param name="inputName">inputStream</param>

                <param name="bufferSize">4096</param>

                <param name="contentDisposition">

                    filename="${filename}"

                </param>

            </result>

</action>

读者可以同前面的示例相比较,在浏览器中输入http://localhost:8080/bookcode/ch11/ filedownload.action,返回界面如图11.11所示,同前面示例的结果完全一致。

11.3.3   文件下载的权限控制

读者明白了Struts 2框架文件下载的原理后,就很容易实现文件下载的权限控制,可以在Action的execute方法中加入用户合法身份的验证,如果不合法,则返回一个input逻辑视图,即返回给用户一个登录界面;如果是一个合法用户,则可以返回success逻辑视图,即返回用户想要下载的资源。

(1)增加了权限控制的Action如代码11.11所示。

代码11.11  增加权限检查的业务控制器

package ch11;

import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;

public class FileDownloadAction implements Action {

    private String username;

    private String password;

     private String inputPath;

     public void setInputPath(String value) {

        inputPath = value;

    }

    public InputStream getInputStream() throws Exception {

        return ServletActionContext.getServletContext().getResourceAsStream (inputPath);

    }

    public String execute() throws Exception {

    //权限检查

    if(username.equals("pla")&&password.equals("mypassword")){

          return SUCCESS;

    }else{

         return INPUT;      

    }

    }

    //属性的getter和setter方法

   public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

}

(2)同时修改配置文件,增加一个input逻辑视图,修改后的配置文件内容如下所示:

<!--配置文件定义文件下载-->

        <action name="download" class="ch11.FileDownloadAction">

            <!--指定下载资源位置-->

            <param name="inputPath">/upload/struts-power.gif</param>

            <!--指定success逻辑视图为一个stream类型,即流视图-->

            <result name="success" type="stream">

                <!--下载文件的类型-->

                <param name="contentType">image/gif</param>

                <!--下载文件位置-->

                <param name="inputName">inputStream</param>

                <param name="contentDisposition">

                    filename="struts.gif"

                </param>

                <!--缓冲区大小-->

                <param name="bufferSize">4096</param>

            </result>

            <result name="input">/ch11/login.jsp</result>

</action>

(3)重新运行该示例,在浏览器中输入http://localhost:8080/bookcode/ch11/download. action,返回界面如图11.12所示。

(4)由于加入了文件下载权限控制功能,用户直接下载文件就会转到用户登录界面,在该界面中用户可以输入“pla”和“mypassword”,单击“登录”按钮,返回界面如图11.11所示,即通过了权限验证,可以正常下载文件。

图11.12  控制文件下载登录界面

使用Struts 2框架的文件下载,会给开发者带来很多便利:

— 可以文件下载的用户权限进行验证;

— 支持中文文件名称的下载(例如:…/图片.gif);

— 加强了文件下载的安全性,使用Struts 2的文件现在,在如图11.11所示的界面中,右键单击图片文件,单击“属性”菜单,会发现显示的不是常规的图片地址,而是指向了action,这样防止了用户获得服务器相关路径的信息,如图11.13所示。

图11.13  使用Struts 2文件下载的图片地址

 
杂货店商品数据集挖掘关联规则实验 (2)选择事务集中前100条事务,选择合适的支持度阈值,使用Apriori算法和FP-growth算法挖掘频繁项集(推荐使用mlxtend包的apriori和fpgrowth函数),并对比apriori算法和fpgrowth算法的时间复杂度;(比如用户1000在2015年3月15日对应的事务为{‘sausage’,’whole milk’,’semi-finished bread’,’yogurt’}),然后按照用户ID递增,时间递增的方式对事务进行排序;7. 排版工整自洽,图表标题准确(10分) 阅读详情

相关推荐

从零开始解析N-CMAPSS数据集:航空发动机健康管理的入门指南

本文详细解析了N-CMAPSS数据集在航空发动机健康管理中的应用,从数据集的构成、关键变量到实际数据分析方法,为初学者提供了全面的入门指南。通过Python代码示例,展示了如何加载、探索和建模这一复杂数据集,帮助读者掌握航空发动机性能预测的核心技术。

weixin_29063979的博客 319

Struts2 框架入门

Struts2 JAVA基础学完,肯定是要面临三大框架的学习的,作为初学者,了解三大框架的原理,设计目的是首要任务,只有在把握了框架的设计目的以后,才能有针对性的取学习使用框架,这里从strue2框架开始,介绍三大框架,让新手能有一个总的了解跟思维导图。 1、什么是Struts2? Struts2 是一个非常优秀的MVC框架,基于Model2 设计模型,由传统Struts1和WebWork...

热心网友 1388

从零开始的机械臂yolov5抓取gazebo仿真(一)

本文介绍了如何将机械臂模型导出为URDF

qq_48427527的博客 1万+

windows版的turn/stun服务器安装文件下载地址

windows版的turn/stun服务器安装文件下载地址:

hmwz0001的博客 1202

西门子RS485自由口通信Modbus RTU 通信协议

部分西门子的RS485模块不能使用西门子自带的Modbus RTU通信指令,需要通过自己拼接、发送、接收和解析报文完成Modbus RTU通信。通过多次尝试完成该功能: #R_TRIG_Instance(CLK := #触发, Q => #触发上升沿); IF #触发上升沿 THEN // 触发后先将读取完成复位 #读写完成 := 0; END_IF; CASE #功能码 OF 1: // 线圈状态读取 ; 2:

qq_20792765的博客 1万+

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

A20802013的博客 2万+

struts2 的详细介绍

struts2 的详细介绍 一、准备工作及实例;1.解压struts-2.1.6-all.zip;apps目录:struts2自带的例子程序;docs目录:官方文档;lib目录:存放所有jar文件;Src目录:源文件存放地;2.六个基本包的;struts2-core-2.1.6.jar:开;freemarker-2.3.13.jar:st;

阿文 1843

PPPoe的抓包分析(详细)

PPPoe的报文结构 可以看出PPPoe的报文结构其实很简单,只不过是将PPPoe的报文塞到以太网的载荷中,而且它的头部字段也十分的简单,TLV就不说了,code字段表示了PPPoe不同的报文类型,比较常见的就是上面的五个报文了,PPPoe的报文类型其实还蛮多的。session ID主要的作用就是标识一段会话,因为使用PPPoe的最主要作用就是使得多台设备可以借助以太网多点接入多点访问的特点去和一台设备做上网认证请求,这样运营商一台认证设备就可以满足多个用户的认证请求,这和PPP相比起来好的不止一点。

qq_47529104的博客 7867

STUN协议简要介绍

参考:https://www.rfc-editor.org/rfc/rfc5766.html STUN/TURN https://www.rfc-editor.org/rfc/rfc5389.html STUN协议在RFC5389中被重新命名为Session Traversal Utilities for NAT,即NAT会话穿透工具。在这里,NAT会话穿透工具被定位为一个...

infi 5204

【YoloV11改进策略】基于流形约束超连接(mHC)增强YoloV11全局特征提取能力|独家复现|梁文峰署名论文

论文标题:流形约束超连接 (Manifold-Constrained Hyper-Connections, mHC)核心问题:针对超连接 (Hyper-Connections, HC) 扩展残差流宽度时破坏恒等映射、引发训练不稳定性和高内存开销的问题,提出一种约束性框架。目标:恢复残差连接的稳定性与可扩展性,同时保持HC的性能增益。基准模型:基于DeepSeek-V3的MoE架构,进行了3B、9B、27B模型的实验验证。论文图示mHC 是一个通用的HC扩展框架。

m0_47867638的博客 1346

YOLO创新点改进点的消融实验设计规范

YOLO改进的消融实验是一种重要的方法,用于评估和验证模型中不同组件的影响。在进行YOLO改进的消融实验时,我们可以选择一些可能的改进点,比如Backbone网络、Anchor框设计和损失函数设计,然后通过实验来分析它们对模型性能的影响。首先,我们需要确定实验设计。对于每个改进点,我们将设计多个实验组,并针对每个实验组训练模型并进行性能评估。这里以三个改进点为例进行说明:改进点1:Backbone网络 (改进点2:Anchor框设计 (改进点3:损失函数设计 (

crasher123的博客 2909

Struts2文件上传下载

Struts2文件上传下载(一) 要想将文件从客户端上传到服务器,首先要将form的enctype属性设置为” multipart/form-data”,method属性设置为post。然后在服务端获取上传的二进制流,解析出二进制流中所包含的全部表单域。表单域中包含的信息可能是文本信息,也可能是二进制的字节码,文本和字节码混合在一起。要想将一个文件中包含的二进制信息从一个二进制流中“

congcongsuiyue的专栏 1304

激光除草技术原理与应用全解析

激光除草技术通过光热、光化学等效应精准破坏杂草组织,核心参数包括功率(20-6000W)、波长(400nm-10.6μm)和脉冲宽度。主要应用于大田作物(如玉米、棉花)、经济作物(烟草、果树)及城市绿化,具有环保(无化学污染)、高效(识别率≥95%)和非接触等优势,但存在设备成本高(20-50万元)、技术门槛高等局限。当前技术融合AI识别、多光谱协同等创新,国产设备如华工智耘已实现95.3%识别精度。虽短期投入较高,但长期可降低30%除草成本,并带来环境效益(每亩减排1.2吨CO₂)

start_up_go的博客 556

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

一、Struts2指定类型文件的下载 1、最终功能实现的截图:(点击文件下载链接,下载文件 ) 2、核心代码 index.jsp: 1 <%@ page language="java" import=...

QDY5945的博客 176

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java struts2下载文件_java struts2入门学习---文件下载的二种方式

一.关于文件下载:文件下载的核心思想即是将文件从一个地方拷贝到另一个地方.1.传统方式:在Action中加入大量servlet api 操作.优点是好理解,缺点是耦合度高。2.stream方式:使用struts2中的stream拦截器进行操作二.实例:我这里用的是maven,贴出pom.xml:4.0.0com.amosstruts2_learnwar0.0.1-SNAPSHOTstruts2_l...

weixin_30744857的博客 299

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

struts1、 struts2所有版本jar包下载地址大全

http://shop63873662.taobao.com本人淘宝充值店已入驻淘宝充值平台,已签署消费者保障协议  (*各位友友们觉得这篇文章对你有用就给我小店增加点人气,也可以来小店充值哦*) Parent Directory                                      -   jakarta-struts-1.2.2.tar.gz      30-A

zwchunk的专栏 6万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

基于struts2的文件上传下载

1.struts.xml 1 struts> 2 constant name="struts.multipart.maxSize" value="209715200" /> 设置文件上传大小,2097152=2M --> 3 package name="action" extends="struts-default" namespace="/"> 4

南广一瓮的博客 313

struts实现文件下载

今天学习了如何用struts实现文件下载的功能,可以将服务器的文件下载到客户端。   其实不用struts也可以实现下载,可以直接用一个链接,href里面写文件的目录。如: 1 123.rar   这种方法简单,不过它只能下载压缩文件,而其他一些文件如文本文件、图片等都会直接在页面上面显示出来而不会下载到客户端,所以此方法不可取。   下面介绍另一种方法,也就是用struts实现文

a476777389的专栏 511

理解和灵活应用 Struts2 的文件下载功能

文件下载给我们最直接的概念就是,给个文件链接点击就下载。似乎太简单,然而 Struts2 却把它作为一个独立的学问来对待,理由有四:1. 文件名为中文时,直接点击下载,链接可能会走样(某些浏览器,URL 编码的问题),致使无法下载。2. 不总是从下载实际的文件,文件内容有时候是动态生成的,如数据库中的内容。3. 对于知名的文件类型不让浏览器直接打开,而是出现下载对话框保存文件。例如

技术永远致力于应用 1963

java ee文件下载_JavaEE基础 Struts2实现下载各种文件

本篇JavaEE基础教程将为大家讲解JavaEE基础编程的知识点,看完这篇文章会让你对JavaEE基础编程的知识点有更加清晰的理解和运用。struts2实现下载各种文件1、struts.xml1.2.strutsPUBLIC3."-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//E...

weixin_28918553的博客 218

struts2文件上传下载

Struts2下多文件的上传与下载 Googel 标签: 多文件 ;上传 ;下载 ;随意文件 ;java ;Struts2 ;单例 ;配置 ;动态读取 ;李顺利 Struts2下多文件的上传与下载 目录 关键词... 1 写在前面... 1 需求... 1 环境... 2 目录结构... 3 重要文件的看点... 3 web.xml. 3 stru

lk519186921的专栏 1万+

Struts2控制文件的上传与下载

Struts2控制文件上传与下载的几个注意事项: (1)必须将表单的method设置为post,将enctype设置为multipart/from-data。只有这样,浏览器才会把用户选择文件的二进制数据发送给数据。 (2)Struts2默认使用的是Jakarta的Common-FileUpload的文件上传框架,因此,如果需要使用Struts2的文件上传功能,则需要在web应用中增加两...

dianwenxian7208的博客 171

struts2-20-下载文件及授权控制

下载文件:用<result-type>stream 而非拦截器 根目录=WebContent 一:下载文件主页面 downLoad.jsp 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncodi...

a1346231的专栏 161

struts2的文件上传和文件下载

struts2的文件上传和文件下载 实现使用Struts2文件上传和文件下载:   注意点:      (1)对应表单的file1和私有成员变量的名称必须一致         <input type="file" name="file1"/>       private File file1;      ...

HiterCoder 154
上一篇: 我最想要的多文件上传...上传越多越好----Struts 2多文件上传(12)
下一篇: 你能下载,他能下载吗?-----Struts2文件下载的权限控制(14)
Struts2BBS
博客等级 码龄19年 19粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值