文件上传(Servlet/Struts2/SpringMVC)的链接:http://www.cnblogs.com/ghq120/p/8312944.html

文件下载

Servlet实现

目录结构

DownLoadServlet.java

package com.ghq.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DownLoadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { String imageRP = this.getServletContext().getRealPath("/images");
//获取被下载的文件的名字
String oldfileName = request.getParameter("fn"); //代表要下载的文件
File sourceFile = new File(imageRP, oldfileName);
//被下载文件对应的输入流
FileInputStream fin = new FileInputStream(sourceFile);
//将文件名进行重新编码,解决下载中文文件名时,出现乱码的情况
oldfileName = new String(oldfileName.getBytes(),"ISO8859-1");
//设置响应头,表示是下载文件,不是给浏览器输出
response.addHeader("Content-Disposition", "attachment;filename="+oldfileName); OutputStream out = response.getOutputStream(); byte[] bs = new byte[1024];
int count = 0;
while((count = fin.read(bs))!= -1){
out.write(bs, 0, count);
}
if (out != null) {
out.close();
}
if (fin != null) {
fin.close();
} } }

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>DownLoadFile</display-name>
<servlet>
<servlet-name>DownLoadServlet</servlet-name>
<servlet-class>com.ghq.controller.DownLoadServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>DownLoadServlet</servlet-name>
<url-pattern>/DownLoadServlet</url-pattern>
</servlet-mapping>
</web-app>

jsp页面

<body>
<a href="<%=path%>/DownLoadServlet?fn=测试.png">测试.png </a>
</body>

Struts2的文件下载

项目的目录结构

DownLoadAction.java

package com.ghq.action;

import java.io.InputStream;
import java.io.UnsupportedEncodingException; import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class DownLoadAction extends ActionSupport {
private String filename; public String getFilename() {
//解决被下载文件的名字是中文时乱码的情况
try {
filename=new String(filename.getBytes(),"ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return filename;
} public void setFilename(String filename) {
this.filename = filename;
} public InputStream getTargetFile() throws Exception{
//获取ServletContext的对象
ServletContext application = ServletActionContext.getServletContext();
InputStream fin = application.getResourceAsStream("/images/"+filename);
return fin;
} }

struts.xml

  tatgetFile和DownLoadAction.java中的下载文件的方法名getTargetFile()对应

<?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" />
<constant name="struts.action.extension" value="action"/> <package name="default" namespace="/" extends="struts-default">
<action name="DownLoadAction_*" class="com.ghq.action.DownLoadAction" method="{1}">
<result type="stream">
<param name="inputName">targetFile</param>
<!-- attachment用于指定是下载文件,而不是解析文件 -->
<param name="contentDisposition">attachment;filename=${filename}</param>
</result>
</action>
</package>
</struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>struts2_DownLoadFile</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping> </web-app>

jsp页面

<body>
JavaEE项目开发实践.jpg&nbsp;&nbsp;<a href="<%=path %>/DownLoadAction.action?filename=JavaEE项目开发实践.jpg">下载</a><br>
1.jpg&nbsp;&nbsp;<a href="<%=path %>/DownLoadAction.action?filename=1.jpg">下载</a>
</body>

文件下载(Servlet/Struts2)的更多相关文章

  1. 文件上传(Servlet/Struts2/SpringMVC)

    文件下载(Servlet/Struts2)的链接:http://www.cnblogs.com/ghq120/p/8328093.html 文件上传 Servlet实现 要实现文件上传的功能,必须在f ...

  2. 微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决

    微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.securi ...

  3. Servlet, Struts2和SpringMVC 并发访问线程安全问题

    第一部分: Servlet不是线程安全的. 要解释Servlet为什么不是线程安全的,需要了解Servlet容器(即Tomcat)使如何响应HTTP请求的. 当Tomcat接收到Client的HTTP ...

  4. Servlet Struts2 SpringMVC 获取参数与导出数据 方法比较

    servlet中通过request.getParameter()从网页获取参数 通过request session servletContext几个域对象的setAttribute(String ,O ...

  5. 控制层技术:Servlet+reflection、Struts2、Spring MVC三者之间的比较学习

    Servlet Struts2 Spring MVC 处理用户提交的数据 基于MVC设计模式的Web应用程序 是一个框架 是MVC框架 导入servlet包,配置web.xml文件 web.xml & ...

  6. Struts2 文件上传,下载,删除

    本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...

  7. Struts2第四天

    Struts2第四天 昨天: 自定义的拦截器:继续methodFilterInterceptor,可以指定哪些方法需要拦截或者不拦截. Intercepters(配置拦截器),intercepter( ...

  8. ssh框架-Struts2(一)

    Struts2 概述 用我们自己的话来说: struts是web层框架, 相当于Servlet 作用: 1. 获得请求参数 2. 调用业务 3. 分发转向 常用的WEB层框架 Struts2入门 1. ...

  9. servlet上传下载(任何格式的都可以)

    jar不能低于此版本,JDK1.6以上,否则户报错 <dependency> <groupId>commons-fileupload</groupId> <a ...

随机推荐

  1. 表格Table宽度设置无效的解决方法

    表格Table宽度设置无效的解决方法 bootstrap中使用table时发现不管用width赋值方式都无法改变table>td的宽度 解决方法: 设置table:table-layout:fi ...

  2. Struts2运行原理

    一个请求在Struts2框架中的处理大概分为以下几个步骤: 1 客户端发送请求:2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤 ...

  3. 技巧方法 - CentOS6将Python2.6.6升级到Python2.7.6

    1.首先使用“python -V”命令查看python版本,我们测试主机显示的是2.6.6版,于是下面就着手将python2.6.6升级到Python2.7.6.python -V #查看python ...

  4. [BZOJ 5072][Lydsy1710月赛]小A的树

    传送门 \(\color{green}{solution}\) 嗯...其实我也不太会,所以大胆猜个结论吧(后来证了一下,然后放弃了...). 我们发现如果要使一个联通块的黑点数量为\(k\)的方案最 ...

  5. 01背包-记忆化搜索到成型的DP

    记忆化搜索 #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,W; int dp[105][ ...

  6. [转] Maven 直接下载依赖项 artifact, dependency:get

    [From]http://dnotes.wikidot.com/dependency:get-example To download an artifact into local repository ...

  7. [转] Linux History(历史)命令用法 15 例

    [From]https://linuxtoy.org/archives/history-command-usage-examples.html 如果你经常使用 Linux 命令行,那么使用 histo ...

  8. 【实战】JBOSS反序列化Getshell

    一.JBOSS4.0.5_GA,5.x,6.x 需要JavaDeserH2HC(https://github.com/joaomatosf/JavaDeserH2HC) 操作起来 javac -cp ...

  9. servlet的url-pattern规则

    https://www.cnblogs.com/canger/p/6084846.html

  10. Mac 10.12安装Office 2011

    说明:由于WPS没有Mac版的,所以只能装这个,这个版本是2011的,基本够用了. 下载: (链接: https://pan.baidu.com/s/1pKGvXBP 密码: irw9)