struts.xml
<?xml version="1.0" encoding="utf-8" ?>
<!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.multipart.maxsize" value="10701096"/>
<constant name="struts.devmode" value="true" />
<package name="lhy" namespace="/lhy" extends="struts-default">
<action name="download" class="action.filedownload" method="download">
<!--
(1) <param name="contentdisposition">attachment;filename="${filename}"</param>
contentdisposition默认是 inline(内联的), 比如说下载的文件是文本类型的,
就直接在网页上打开,不能直接打开的才会打开下载框自己选择
(2)<param name="contentdisposition">attachment;filename="${filename}"</param>
attachment :下载时会打开下载框
filename="${filename}" :在这定义的名字是一个动态的,在value stack中
(3) <param name="inputname">lhydownload</param>,这个downloadfile名字要和
filedownload.java类中的getlhydownload()方法名去掉get 一致
(4)buffersize
下载缓冲区的大小
-->
<result type="stream" name="download">
<param name="contenttype">application/octet-stream</param>
<!-- 要有相对应的getdownloadfile()方法返回值是 inputstream -->
<param name="inputname">lhydownload</param>
<param name="contentdisposition">attachment;filename="${filename}"</param>
<param name="buffersize">4096</param>
</result>
</action>
</package>
</struts>
filedownload.java
package action;
import java.io.fileinputstream;
import java.io.filenotfoundexception;
import java.io.inputstream;
import org.apache.struts2.servletactioncontext;
import com.opensymphony.xwork2.actionsupport;
public class filedownload extends actionsupport{
private string filename;
public string download()
{
//此方法不尽兴任何操作,只有返回值
return "download";
}
public inputstream getlhydownload()
//声明输入流
inputstream is = null;
string filepath=servletactioncontext.getservletcontext().getrealpath("/upload");
system.out.println(filepath);
system.out.println(filename);
try {
is = new fileinputstream(filepath+"/"+filename);
} catch (filenotfoundexception e) {
e.printstacktrace();
system.out.println(is);
return is;
public string getfilename() {
return filename;
public void setfilename(string filename) {
this.filename = filename;
jsp
<a