`
esffor
  • 浏览: 1370590 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

《struts2权威指南》学习笔记之struts2之文件下载

阅读更多

对于服务器上的英文名的文件,可以方便的使用<a href=""/></a>进行下载,但如果是中文文件名的文件,如果使用<a href="中.jpg"></a> 就会出现连接上的乱码(如%4e%54%79),为了解决这个问题,struts2通过一个文件下载拦截器支持中文命名文件的下载

首先编写web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns
="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
>
    
<filter>
      
<filter-name>struts2</filter-name>
      
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    
</filter>
    
<filter-mapping>
      
<filter-name>struts2</filter-name>
      
<url-pattern>/*</url-pattern>
    
</filter-mapping>
 
 
    
<filter>
      
<filter-name>struts-cleanup</filter-name>
      
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
    
</filter>
    
<filter-mapping>
      
<filter-name>struts-cleanup</filter-name>
      
<url-pattern>/*</url-pattern>
    
</filter-mapping>
</web-app>

 文件下载Action

struts2的文件下载Action与普通的Action并没有太大不同,仅仅是该action需要提供一个返回InputStream流的方法
,该输入流代表了被下载文件的入口,该Action类代码如下:

package lee;

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;
    }


    
/**//*
     下载用的Action应该返回一个InputStream实例,
     该方法对应在result里的inputName属性值为targetFile
    
*/

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


    
public String execute() throws Exception
    
...{
        
return SUCCESS;
    }


}

配置Action

contentType:指定被下载文件的文件类型
inputName:指定被下载文件的入口输入流
contentDisposition:指定下载文件的文件名
bufferSize:指定下载文件时的缓冲大小

因为stream结果类型的逻辑视图是返回给客户端一个输入流,因此无需指定location属性

 

<?xml version="1.0" encoding="GBK"?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>

<struts>

    
<constant name="struts.custom.i18n.resources" value="globalMessages"/>
    
<constant name="struts.i18n.encoding" value="GBK"/>
    
<package name="lee" extends="struts-default">

        
<default-action-ref name="download"/>

        
<action name="download" class="lee.FileDownloadAction">
            
<param name="inputPath">images中.gif</param>
                
<result name="success" type="stream">
                
<param name="contentType">image/gif</param>
                
<param name="inputName">targetFile</param>
                
<param name="contentDisposition">filename="struts.gif"</param>
                
<param name="bufferSize">4096</param>
            
</result>
        
</action>

        
        
<action name="login" class="lee.LoginAction">
            
<result>/stuts2Down.html</result>
        
</action>

    
</package>
</struts>

登陆Action:

 

package lee;

import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

public class LoginAction implements Action 
...{
    
private String user;
    
private String pass;

    
    
public void setUser(String user)
    
...{
        
this.user = user; 
    }

    
public String getUser() 
    
...{
        
return (this.user); 
    }

    
    
public void setPass(String pass)
    
...{
        
this.pass = pass; 
    }


    
public String getPass()
    
...{
        
return (this.pass); 
    }


    
public String execute()
    
...{
        ActionContext.getContext().getSession().put(
"user" , getUser());
        
return SUCCESS;
    }

}

 

资源文件:globalMessages.properties 内容为空

登陆页面:input..jsp

 

<%...@ page contentType="text/html;charset=GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 
<HEAD>
  
<TITLE> 下载前的登陆页面 </TITLE>
 
</HEAD>
 
<BODY>
 
<h3>下载前的登陆页面</h3>
 ${requestScope.tip}
  
<FORM METHOD="POST" ACTION="login.action">
    用户名:
<INPUT TYPE="text" NAME="user"/><br>
    密码:
<INPUT TYPE="text" NAME="pass"/><br>
    
<INPUT TYPE="submit" value="登陆"/><br>
  
</FORM>
 
</BODY>
</HTML>

下载页面:struts2Down.html

 

<html>
<head>
    
<title>Struts2的文件下载</title>
</head>

<body>
    
<h1>Struts2的文件下载</h1>

    
<ul>
    
<li>
        下载Struts2的Logo:
<href="download.action">下载图形文件</a> 
    
</li>
    
<li>
        下载Struts2的Logo的压缩文件:
<href="download2.action">下载压缩文件</a>          
    
</li>
    
</ul>
</body>
</html>

在images文件夹下copy一个图片命名为中.gif,运行input.jsp. 随便输入用户名密码登陆后即可下载struts2的logo

下面说说下载的权限控制,我们希望只有当scott用户登陆时候,才可以下载struts2的logo压缩文件,该怎样处理呢?

下面就是我们的权限控制下载Action

 

package lee;

import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import java.util.Map;

public class AuthorityDownAction implements Action 
...{
    
private String inputPath;
    
public&nbs
分享到:
评论

相关推荐

    Struts2权威指南完整版

    改为使用Convention插件提供“零配置”,Struts 2.1新增了Portlet支持……为了让众多Struts学习者、工作者快速从Struts 2.0的开发升级到Struts 2.1,笔者升级了《Struts 2权威指南》,第二版改写了第一版中所有程序...

    Struts2权威指南-带目录索引完整版.pdf

    Struts2权威指南 带目录索引完整版

    Struts2权威指南 加源码

    本《Struts2权威指南》结合了源码分析,旨在帮助读者深入理解Struts2的工作原理以及如何在实际项目中有效利用它。 首先,Struts2的核心功能包括动作映射、结果类型、拦截器等。动作映射允许开发者将URL请求与特定的...

    struts2权威指南源代码

    Struts2是Apache软件基金会旗下的一个开源框架,用于构建企业级...通过深入研究《Struts2权威指南》的源代码,读者不仅可以学习到Struts2的基本用法,还能掌握其高级特性和最佳实践,从而更好地应用于实际项目开发中。

    [Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版) 1/12

    第1章 Struts 2概述,第2章 Struts 2下的HelloWorld,第3章 Struts 2基础,第4章 深入Struts 2,第5章 Struts 2的类型转换,第6章 文件的上传和下载.,第7章 Struts 2的拦截器,第8章 Struts 2的输入校验,9.2 ...

    Struts2权威指南.pdf 清晰中文完整版

    这本书《Struts2权威指南》显然是针对想要学习或深入理解Struts2框架的开发者设计的。下面我们将详细探讨Struts2的一些核心知识点。 1. **Struts2框架概述**:Struts2是Apache软件基金会的开源项目,它是Struts1的...

    Struts2权威指南完整版PDF

    Struts2权威指南完整版PDFStruts2权威指南完整版PDF

    struts2 权威指南完整版PDF

    这本书《Struts2权威指南》全面深入地介绍了这个框架的核心概念、配置、最佳实践以及常见问题的解决方案。以下是基于该书和Struts2框架的一些主要知识点: 1. **Struts2框架基础**:Struts2是Struts1的升级版,解决...

    Struts2权威指南完整版.pdf

    Struts2权威指南完整版.pdf 不错的Struts入门教程 也可以当工具书

    struts2四天的学习笔记

    5. **结果类型(Result Types)**:Struts2支持多种结果类型,如dispatcher(转发到JSP页面),stream(下载文件),redirect(重定向)等,可以根据不同需求选择合适的结果类型。 6. **OGNL(Object-Graph ...

    Struts2权威指南(完整版)含源码part13

    Struts2权威指南(完整版)含源码 Struts2权威指南(完整版)含源码

    Struts2权威指南全部源码

    总的来说,"Struts2权威指南全部源码"是一份宝贵的资源,通过深入学习和实践,你可以提升对Struts2的理解,掌握Web应用开发的关键技能。但同时,也要准备好面对可能的挑战,因为学习过程中遇到错误是正常的,关键...

    Struts 2权威指南源码.rar

    这个"Struts 2权威指南源码.rar"压缩包文件包含了《Struts 2权威指南》一书中的示例代码,这些源码对于学习和理解Struts 2框架的工作原理非常有帮助。 在深入探讨源码之前,让我们先了解Struts 2的核心特性: 1. *...

    Struts2.1权威指南——基于WebWork核心的MVC开发.zip

    书中通过大量的示范性实例(全书范例近百个),逐一、详细地讲解了Struts2各知识点的用法,并细致地讲解每个用法的各种参数、选项,可以帮助读者入门到精通。 3.配合案例,快速提高 《Struts 2.1权威指南》最后配备...

    struts2权威指南源码

    总的来说,Struts2源码的学习涵盖了Java Web开发中的许多重要概念和技术,包括MVC模式、拦截器、依赖注入、表达式语言等。虽然提供的源码没有包含所有依赖,但仍然能为开发者提供深入学习和研究的机会,尤其是在框架...

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    struts2权威指南 电子书 配套源码-1

    struts2权威指南 电子书 配套源码 文件大小153mb 分为8个压缩包,每分卷1分,每分卷20兆(最多只让上传20兆,没有办法) struts2权威指南电子书连接:http://sdan250.download.csdn.net/user/sdan250/all/3

    Struts2.1权威指南2

    Struts2.1权威指南 李刚的著作 共四个部分 用7-zip解压

    Struts2权威指南

    Struts2权威指南Struts2权威指南Struts2权威指南

Global site tag (gtag.js) - Google Analytics