Java Servlet实现下载文件

一.配置servlet

在WebContent(以前的eclipse版本是WebRoot)文件夹下,有一个web.xml

修改web.xml ,加入以下代码

 <servlet>
     <servlet-name>helloservlet</servlet-name>
     <servlet-class>my.helloservlet</servlet-class>
   </servlet>    
  <servlet-mapping>
     <servlet-name>helloservlet</servlet-name>
     <url-pattern>/download</url-pattern>
  </servlet-mapping>

格式就是这样的:

<servlet>  
    <servlet-name>Servlet的名称(自己起的,不要重复)</servlet-name>  
    <servlet-class>Servlet的类路径(xx.xx.xx.xxservlet)</servlet-class>  
</servlet>  
<servlet-mapping>  
    <servlet-name>Servlet的名称(与上面的一样)</servlet-name>  
    <url-pattern>/url名字(自己起的,不要重复,注意/,不能丢)</url-pattern>  
</servlet-mapping>   

这个配置是为了把输入的/url和创建的servlet绑定到一起,意思是我们访问 /url名字 实际上就是在访问这个helloservlet类

PS:MyEclipse(收费的)会在servlet创建好时自动帮你在web.xml中配置好,但是Eclipse并不会,所以需要我们自己配置


二.实现输入QQ号,查询头像的功能

index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.text.*"  %>
    <%@ page import="java.util.*"  %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
   <form method="get" action="download">
       输入QQ号
       <input type="text" name="qq"/><br/>  
       <input type="submit" value="查询">
   </form>
</body>
</html>

这里action因为之前配置了web.xml,所以download就代表指向helloservlet.java这个文件

这里也可以写成action=helloservlet,是一样的

helloservlet.java ——doGet方法:

在D盘image文件夹下存放头像图片,通过获取参数,然后找到本地图片文件,循环输出给浏览器

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		String qq=request.getParameter("qq");//取得参数
		String filename=qq+".png";
		
		//以文件格式下载
		/*response.setHeader("Content-Disposition", "attachment;filename="+filename);
		response.setContentType("application/octet-stream");*/ 
		
		//图片png形式下载
		response.setContentType("image/png");
		
		response.setCharacterEncoding("UTF-8");
		
		File DirFile=new File("d:/image");
		File imageFile=new File(DirFile,filename);
		FileInputStream filestream=new FileInputStream(imageFile);
		
	    OutputStream streamOut=response.getOutputStream();
	    byte[] buf=new byte[4096];
	    while(true)   //循环输出
	    {
	    	int n=filestream.read(buf);
	    	if(n<=0)
	    		break;
	    	
	    	streamOut.write(buf,0,n);
	    	streamOut.flush();
	    }
	    
	    filestream.close();
	    streamOut.close();
	}


效果如图所示:

输入111,点击查询,返回一个png图片




猜你喜欢

转载自blog.csdn.net/wcc27857285/article/details/80219637