一.配置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图片