Servlet案例(下载文件,图片验证码)
实现图片下载,响应到浏览器中去(
设置响应的附件名
response.setHeader("Content-Disposition", "attachment;filename="+ UUID.randomUUID().toString()+".png");
)
java
//TODO:实现文件的下载操作
@WebServlet("/servlet5")
public class MyServlet5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO:设置字符编码为UTF-8
response.setCharacterEncoding("UTF-8");
// TODO:设置响应头,告诉浏览器,使用什么字符集显示
response.setContentType("text/html;charset=UTF-8");
//TODO:设置响应的附件名
response.setHeader("Content-Disposition", "attachment;filename="+ UUID.randomUUID().toString()+".png");
//TODO:读取文件内容
FileInputStream fileInputStream = new FileInputStream("D:\\桌面\\课程\\workspace\\web_02\\src\\main\\webapp\\1.png");
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(bytes)) != -1) {
//TODO:将文件内容写入到响应体中
response.getOutputStream().write(bytes, 0, len);
}
fileInputStream.close();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
图片验证码(通过调用Hutool工具类)
java
@WebServlet("/servlet6")
public class MyServlet6 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO:实现验证码的功能
// 自定义纯数字的验证码(随机4位数字,可重复)
RandomGenerator randomGenerator = new RandomGenerator("0123456789", 4);
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
lineCaptcha.setGenerator(randomGenerator);
// 重新生成code
lineCaptcha.createCode();
// 输出图片流
lineCaptcha.write(response.getOutputStream());
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
通过html展示对应的验证码(<img id="codeImg" src="/web_02/servlet6" alt="图片验证码" onclick="changeCode()">
)
java
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图片验证码</title>
<script>
function changeCode(){
let img= document.getElementById("codeImg");
// 在重新设置src的时候,一定要加上时间戳,否则图片不会更新
img.src="/web_02/servlet6"+"?"+new Date();
// img.src="/web_02/servlet6";
}
</script>
</head>
<body>
<form action="" method="post">
用户名<input type="text" name="username"/>
密码<input type="password" name="password"/>
验证码<input type="text" name="code">
<!-- TODO:注意在设置对应的src地址的时候要把工件的根目录加上 -->
<img id="codeImg" src="/web_02/servlet6" alt="图片验证码" onclick="changeCode()">
</input>
</form>
</body>
</html>