1 下载概念
一个超链接 客户端点击 就把服务器端提供的资源 下载到客户端的硬盘中
2 下载对jsp的要求
提供一个超链接 指定要下载的文件的名字即可
<a href="<c:url value='/imgs/1.jpeg'/>">下载1.jpeg</a><br/>
<a href="<c:url value='/imgs/1.png'/>">下载1.png</a><br/>
<a href="<c:url value='/imgs/3.jpeg'/>">下载3.jpeg</a><br/>
<a href="<c:url value='/imgs/4.jpeg'/>">下载4.jpeg</a><br/>
<a href="<c:url value='/imgs/5.jpeg'/>">下载5.jpeg</a><br/>
<a href="<c:url value='/imgs/6.jpeg'/>">下载6.jpeg</a><br/>
<a href="<c:url value='/imgs/7.jpeg'/>">下载7.jpeg</a><br/>
<a href="<c:url value='/imgs/8.jpeg'/>">下载8.jpeg</a><br/>
<a href="<c:url value='/imgs/呵呵呵.jpeg'/>">下载呵呵呵.jpeg</a><br/>
3 对servlet的要求
提供response的输出流把服务器端目的资源的信息 传递给客户端::注意不是响应给客户端的页面 而是以附件的形式让客户端下载
req.setCharacterEncoding("UTF-8");
String fileName=req.getParameter("fileName");
String type=req.getServletContext().getMimeType(fileName);
resp.setHeader("Content-Type", type);
resp.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode("下载"+fileName, "utf-8"));
String path=req.getServletContext().getRealPath("/imgs/"+fileName);
FileInputStream fin=new FileInputStream(path);
OutputStream out=resp.getOutputStream();
IOUtils.copy(fin, out);
fin.close();
4 java验证码
java画图:属于GUI:
String str="123456789一二三四区六七八九十男女老少上下多少春夏秋冬东西南北张王李赵";
BufferedImage bin=new BufferedImage(200, 40, BufferedImage.TYPE_INT_RGB);
Graphics2D g=bin.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(1, 1, 198, 38);
String yzm="";
for (int i = 0; i < 4; i++) {
yzm+=str.charAt((int)(Math.random()*str.length()));
}
g.setFont(new Font(null, Font.BOLD, 30));
for (int i = 0; i < yzm.length(); i++) {
g.setColor(new Color(100+(int)(Math.random()*150), 50+(int)(Math.random()*200), 150+(int)(Math.random()*100)));
g.drawString(yzm.charAt(i)+"", 10+i*45, 34);
}
FileOutputStream fout=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\yzm\\"+System.currentTimeMillis()+".jpg");
ImageIO.write(bin, "JPEG", fout);
5 验证码的使用
5.1 提供一个表单 验证码组件的选项:day08_02login.jsp
<form method="post" action="/java43_01_web/day08/login.do">
<table>
<tr>
<th>用户名字:</th>
<td><input type="text" name="name" value="hmm"/></td>
</tr>
<tr>
<th>用户密码:</th>
<td><input type="text" name="pwd" value="123"/></td>
</tr>
<tr>
<th>
<img src="<c:url value='/day08/yzm.do'/>" id="img_yzm"/>
</th>
<td><input type="text" name="yzm"/></td>
</tr>
<tr>
<th colspan="2">
<input type="submit" value="登录"/>
</th>
</tr>
</table>
</form>
<script type="text/javascript">
window.οnlοad=function(){
//给img_yzm添加点击时间
document.getElementById("img_yzm").οnclick=function(){
//添加提交参数n 是为了防止使用缓存
this.src="<c:url value='/day08/yzm.do'/>?n="+new Date().getTime();
}
}
</script>
5.2 生成验证码的servlet
需要把生成的验证码存入session
需要把生成的图片通过response的输出流响应给客户端
package com.zhiyou100_08.download;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Day08_03YZM extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String str="123456789一二三四区六七八九十男女老少上下多少春夏秋冬东西南北张王李赵";
BufferedImage bin=new BufferedImage(200, 40, BufferedImage.TYPE_INT_RGB);
Graphics2D g=bin.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(1, 1, 198, 38);
String yzm="";
for (int i = 0; i < 4; i++) {
yzm+=str.charAt((int)(Math.random()*str.length()));
}
req.getSession().setAttribute("sessionYzm", yzm);
g.setFont(new Font(null, Font.BOLD, 30));
for (int i = 0; i < yzm.length(); i++) {
g.setColor(new Color(100+(int)(Math.random()*150), 50+(int)(Math.random()*200), 150+(int)(Math.random()*100)));
g.drawString(yzm.charAt(i)+"", 10+i*45, 34);
}
for (int i = 0; i < (int)(Math.random()*10)+5; i++) {
g.setColor(new Color(200+(int)(Math.random()*50), 200+(int)(Math.random()*50), 150+(int)(Math.random()*100)));
g.drawLine(1, (int)(Math.random()*40), 200, (int)(Math.random()*40));
}
ImageIO.write(bin, "JPEG", resp.getOutputStream());
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
5.3 登录的servlet
package com.zhiyou100_08.download;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Day08_04Login extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String sessionYzm=(String)req.getSession().getAttribute("sessionYzm");
req.setCharacterEncoding("utf-8");
String yzm=req.getParameter("yzm");
if(yzm.equals(sessionYzm)){
resp.getWriter().print("验证码正确!<a href='/java43_01_web/jsp/day08_02login.jsp'>回到登录页面</a>");
}else{
resp.getWriter().print("验证码错误!<a href='/java43_01_web/jsp/day08_02login.jsp'>回到登录页面</a>");
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}