请注意。需要先下载servlet驱动Jar文件
jst1.jar
servlet-api.jar
standard.jar
服务器:tomcat 6.0
jsp文件:download.jsp
<%@ page contentType="text/html; charset=GBK" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<form >
<a href="/download/download.do?file=a.rmvb">a.rmvb</a>
</form>
web.xml:
<?xml version="1.0" encoding="GBK"?>
<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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>cn.edu.nwpu.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>server</servlet-name>
<servlet-class>cn.edu.nwpu.DownLoadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>server</servlet-name>
<url-pattern>/download.do</url-pattern>
</servlet-mapping>
</web-app>
java源文件:(包名:cn.edu.nwpu)
格式过滤器:EncodingFilter.java
package cn.edu.nwpu;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* 将request以及response数据格式转换为统一的GBK格式
*/
public class EncodingFilter implements Filter {
private FilterConfig config;
//实现init接口
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
//实现doFilter接口
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding("GBK");//设置request数据格式GBK
resp.setCharacterEncoding("GBK");//设置response数据格式GBK
chain.doFilter(req, resp);
}
//实现destroy接口
public void destroy() {
}
}
控制器:DownLoadServlet.java
package cn.edu.nwpu;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownLoadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String fileName = req.getParameter("file");
OutputStream o = resp.getOutputStream();
byte[] b = new byte[1024];
File file = new File("E://Media//"+fileName);
resp.reset();
resp.setHeader("Content-Disposition", "attachment; filename=" +fileName);
FileInputStream in = new FileInputStream(file);
int n = 0;
while((n = in.read(b)) != -1) {
o.write(b, 0, n);
}
in.close();
o.close();
}
}