除了標准的org
一
可能有時需要在Web程序中加入下載功能
雖然我們可以直接在Action子類中來處理下載文件
DownloadAction類有一個抽象方法getStreamInfo
protected abstract StreamInfo getStreamInfo(ActionMapping mapping
ActionForm form
HttpServletResponse response) throws Exception;
getStreamInfo方法返回一個StreamInfo對象
public static interface StreamInfo
{
public abstract String getContentType();
public abstract InputStream getInputStream() throws IOException;
}
從上面的代碼可以看出
為了方便起見
public FileStreamInfo(String contentType
public ResourceStreamInfo(String contentType
我們可以使用FileStreamInfo類來下載靜態的文件
二
在本節中將使用DownloadAction類實現一個統計文件下載次數的Web程序
為了實現這個Web程序
【第
在本例中我們使用名為struts數據庫
CREATE TABLE struts
id INT NOT NULL
count INT NOT NULL
filename VARCHAR(
PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET=gbk;
【第
這個Struts動作類負責完成文件的下載工作
在<samples工程目錄>\src\action目錄中建立一個FileDownloadAction
package chapter
import javax
import org
import org
import java
import java
public class FileDownloadAction extends DownloadAction
{
private Connection conn;
private String path;
private String filename;
// 獲得了Connection對象
private void openConnection() throws Exception
{
if (conn == null)
{
Class
conn = DriverManager
}
}
// 獲得某個文件的下載次數
private int getDownloadCount(int id) throws Exception
{
openConnection();
PreparedStatement pstmt = conn
ResultSet rs = pstmt
while (rs
{
return rs
}
return
}
// 在文件完成下載後
private void incDownloadCount() throws Exception
{
openConnection();
int id = filename
PreparedStatement pstmt = conn
+ String
if (pstmt
{
pstmt
+ String
}
}
// 下載文件時調用getStreamInfo方法
protected StreamInfo getStreamInfo(ActionMapping mapping
HttpServletRequest request
throws Exception
{
final FileInputStream fis = new FileInputStream(path + filename);
final String contentType =
// 建議設置content
// 無法在保存文件對話框中顯示正確的文件名
response
+ filename);
incDownloadCount();
return new DownloadAction
{
public String getContentType()
{
return contentType;
}
public InputStream getInputStream() throws IOException
{
return fis;
}
};
}
// 如果Struts動作不加file請求參數
public ActionForward execute(ActionMapping mapping
HttpServletRequest request
throws Exception
{
path = this
filename = request
if (filename == null)
{
File file = new File(path);
File[] files = file
response
PrintWriter out = response
out
for (File f : files) // 開始向客戶端浏覽器輸出文件列表
{
if (f
{
out
+
+
+ String
+
}
}
out
return null;
}
else
{
// 當file參數存在時
// 實際上
// 這條語句就相當於調用了getStreamInfo方法
return super
}
}
}
【第
在struts
<action path=
【第
在web
<init
<param
<param
</init
讀取可以設置自已的下載目錄
啟動Tomcat後
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28413.html