Struts2控制文件下载,可以在文件下载之前做一些操作。这里就以权限控制为例,简单实现一下Struts2的文件下载。

一、Struts2文件下载的Action配置,是提供了一个能返回InputStream流的方法,这个方法是被下载文件的入口。方法名在struts的配置文件里面配置。

DownloadAction.java

package actions;

import java.io.InputStream;
import java.util.Map; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class DownloadAction extends ActionSupport {
private String inputPath; public void setInputPath(String inputPath) {
this.inputPath = inputPath;
} public InputStream getTargetFile() throws Exception {
return ServletActionContext.getServletContext().getResourceAsStream(
"/测试.jpg");
} // 下载文件前的权限控制
// 取出session中的用户名判断是否允许下载,如不允许,跳转到登录页面登录。
@Override
public String execute() throws Exception {
System.out.println(ServletActionContext.getServletContext()
.getRealPath("/测试.jpg"));
ActionContext ctx = ActionContext.getContext();
Map session = ctx.getSession();
String user = (String) session.get("user");
if (user != null && user.equals("yangys")) {
return SUCCESS;
}
ctx.put("tip", "您还没有登录系统!");
return LOGIN;
}
}

二、配置下载文件的Action

配置下载文件的Action需要将result类型配置为stream,如下粗体部分,一般指定4个参数

  • contentType 下载文件的类型
  • inputName 下载文件的InputStream入口方法名去掉get,首字母小写
  • contentDisposition 下载文件的文件名
  • bufferSize 下载文件时缓冲大小,单位字节

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="yang" extends="struts-default">
<action name="login" class="actions.LoginAction">
<result name="success">index.jsp</result>
</action>
<action name="download" class="actions.DownloadAction">
<param name="inputPath">"/测试.jpg"</param>
<result type="stream">
<param name="contentType">image/jpg</param>
<param name="inputName">targetFile</param>
<param name="contentDisposition">filename="测试.jpg"</param>
<param name="bufferSize">4096</param>
</result>

<result name="login">login.jsp</result>
</action>
</package>
</struts>

在这里,为了实现权限控制,配置了一个login的Action,是为了实现登录后可以下载文件的效果。同时,也提供了一个简单的LoginAction.java

package actions;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport {
private String username;
private String password; 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;
} //登录成功后,将用户信息保存在session中
@Override
public String execute() throws Exception {
ActionContext ctx = ActionContext.getContext();
if (username != null && username.equals("yangys")) {
ctx.getSession().put("user", username);
return SUCCESS;
}
ctx.put("tip", "用户名或密码错误!");
return LOGIN;
} }

三、两个jsp页面代码如下:

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!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><s:text name="文件下载测试"/></title>
</head>
<body>
<s:form action="download">
<s:submit value="下载" />
</s:form>
</body>
</html>

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!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><s:text name="loginPage" /></title>
</head>
<body>
<s:form action="login">
<s:textfield name="username" key="user" />
<s:submit name="login"/>
</s:form>
</body>
</html>

注:本示例是为了演示,下载文件时检查是否已经登录,如没有登录,则需要登录,登录成功后即可下载。故将下载文件表单放在了index.jsp中

Strut2文件下载的更多相关文章

  1. struts2文件下载的编写步骤(文件导出)和输入流转换的方法

    strut2文件下载三部曲:一个流.两个头信息 说明: ①一个流,在Action中需要一个getInputStream()的方法来获取下载的内容,其中inputStream是默认的,他会指示Strea ...

  2. Struts2 文件下载(中文处理方法以及控制下载文件名称和扩展名)

    Struts2的框架提供了现成的文件下载方式,大大简化了开发下载功能的便利性.网上的例子有很多,我把一些大家普遍比较关注的点,集中一下,给出一个整体方案. 一般我们照着书本或者网上的列子写出了一个De ...

  3. Android 浏览器 —— 使用 WebView 实现文件下载

    对当前的WebView设置下载监听 mCurrentWebView.setDownloadListener(new DownloadListener() { @Override public void ...

  4. C# 文件下载 : WinINet

    在 C# 中,除了 WebClient 我们还可以使用一组 WindowsAPI 来完成下载任务.这就是 Windows Internet,简称 WinINet.本文通过一个 demo 来介绍 Win ...

  5. ASP.net MVC 文件下载的几种方法(欢迎讨论)

    在ASP.net MVC 中有几种下载文件的方法 前提:要下载的文件必须是在服务器目录中的,至于不在web项目server目录中的文件下载我不知道,但是还挺想了解的. 第一种:最简单的超链接方法,&l ...

  6. 让IIS7.0.0.0支持 .iso .7z .torrent .apk等文件下载的设置方法

    IIS默认支持哪些MIME类型呢,我们可以这样查看:打开IIS管理器(计算机--管理--服务和应用程序--Internet信息服务(IIS)管理器:或者Win+R,输入inetmgr,Enter),在 ...

  7. Android中使用AsyncTask实现文件下载以及进度更新提示

    Android提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单.相对Handler来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和 ...

  8. 利用Tomcat内置的servlet实现文件下载功能

    起因 最近博客所在的VPS挂了又要重装系统,又要重装各种软件. 以前我也经常更换VPS,每次更换都是各种坑爹事情..比如要下载java.下载tomcat.下载mysql..........以前每次我都 ...

  9. 多个文件下载打包生成zip格式下载

    这个多个文件下载生成zip格式必须先引用一个ICSharpCode.SharpZipLib.dll. 代码如下  //将多个文件打包成压缩文件zip格式下载         protected voi ...

随机推荐

  1. API功能测试如何实施(转载自测试之道 微信公众号)

    什么是API 关于定义什么的,直接维基可得: API(Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定.由于近 ...

  2. 可学习的多人人脸识别程序(基于Emgu CV)

    源代码下载(需要安装Emgu CV,安装方法请百度) 很多朋友使用Emgu CV遇到CvInvoke()的报错,我找到一种解决方法. 把EmguCV目录下bin里面的所有dll复制到C:\WINDOW ...

  3. spring利用javamail,quartz定时发送邮件 <转>

    原文地址:spring利用javamail,quartz定时发送邮件 <转>作者:物是人非 spring提供的定时发送邮件功能,下面是一个简单的例子以供大家参考,首先从spring配置文件 ...

  4. mysql数据库全局只读和会话只读问题解析

    对于系统的发布是经常有的事情,有些时候需要隔绝外界对数据库的更改但是还要求可以读取数据,对于mss sql 这个就是很简单,直接属性—>选项—>只读 ,但是对于mysql这是不同的,今天仔 ...

  5. 学习 MFC之 工具栏(二)

    对于InitToolBar()函数进行进一步解析: 1.首先声明一个全局对象:  CToolBar m_toolbar; 2.然后用create()创建toolbar: //创建ToolBar工具条 ...

  6. 分析Model2系统心得

    分析Model2系统心得 前言:观摩他人的项目,学到一些新的.实践经验呀!!! 1.  怎样使用字符串处理类?从页面获取的Form类或者字段取值时使用. 2.在验证用户身份时,先推断username, ...

  7. net.ipv4.tcp_tw_recycle

    原创 2016-03-07 CFC4N 运维帮 本文为翻译英文BLOG<Coping with the TCP TIME-WAIT state on busy Linux servers> ...

  8. Linux下用dump实现备份和还原 ux下用dump实现备份和还原

    对于系统而言,我们可以有很多种办法去备份(还原)系统或文件,之所以要去做备份,就是为了在系统或文件遭到损害时,能及时恢复,把损失减小到最小.当然,对于企业服务器而言,备份的重要性是举足轻重.咱们今天就 ...

  9. 将项目添加到Finder侧边栏和工具栏

    转: http://www.cnblogs.com/wormday/archive/2011/05/08/2039468.html 1.在侧边栏和工具栏右键,有相应的设置选项 2.可以将项目拖到侧边栏 ...

  10. 导入MyEclipse项目乱码

    1.右键项目属性→text file encoding →修改为UTF-8,即可自动变成正常的.