Response

一、下载文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.saxon.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;

public class DownLoading extends HttpServlet {
@Override
protected void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.确定位置和名字
String location = "..\\1.png" //具体的地址绝对地址;
String filename = location.substring (location.lastIndexOf ("\\") + 1);
//2.设置传输的头文件
resp.setHeader ("Content-Disposition", "attachment; filename=" + filename);//下载页面的文件名,可以在下载页面手动改,默认的话就是。.txt;
//3.建立缓冲区
int len = 0;
byte[] buffer = new byte[1024];
//4.将下载文件变成输入流
FileInputStream in = new FileInputStream (location);
//5.获得输出流是,下载
ServletOutputStream out = resp.getOutputStream ();
//in.read (buffer) 将文件读取到缓存中
while (in.read (buffer) != - 1) {
out.write (buffer, 0, len);//将这个缓存给客户端,响应
}
out.close ();
in.close ();
}

@Override
protected void doPost (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet (req, resp);
}
}

二、验证码的实现

1.测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.saxon.servlet;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

public class CheckCode extends HttpServlet {
@Override
protected void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setHeader ("refresh", "5");//刷新时间
//图片的大小。
BufferedImage image = new BufferedImage (80, 20, BufferedImage.TYPE_INT_RGB);
Graphics2D pen = (Graphics2D) image.getGraphics ();
//对图片进行填充
pen.setColor (Color.black);
pen.fillRect (0,0,80,20);
//在图片中写入文字
pen.setColor (Color.white);
pen.setFont (new Font (null,Font.BOLD,20));
pen.drawString (Num (),0,20);
//浏览器的读取形式
resp.setContentType ("image/jpeg");
//缓存
resp.setDateHeader ("expires",-1);
resp.setHeader ("Cache-Control","no-cache");
resp.setHeader ("pragma","no-cache");
//图片交给浏览器
ImageIO.write (image,"jpeg",resp.getOutputStream ());

}

private String Num(){
StringBuffer str=new StringBuffer ();
for (int i = 0; i <7 ; i++) {
int i1 = new Random ().nextInt (9);
str.append (i1);
}
return str.toString ();
}
@Override

protected void doPost (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet (req, resp);
}
}

image-20200726143405536

我们可以设置上面的相关的信息;

三、实现重定向

1.概念

重定向:当你想要小美的QQ号,但你不知道如何要她的QQ号,所以你去找认识小美QQ号的小札,小札叫你自己去,于是你就自己去;

转发:当你想要小美的QQ号,但是你不知道如何要她的QQ号,所以你就去找认识小美QQ号的小札,小札帮你去要,要到了再给你;

比较:重定向和转发

相同点:都是页面的跳转;

不同点:重定向的url地址发生了变化,但是转发没有。他们的状态码也不一样。重定向的是3开头的。转发是200;

1
2
3
4
5
6
//转发
ServletContext context = this.getServletContext ();
RequestDispatcher r = context.getRequestDispatcher ("/gp");//写入要跳转的页面的url-pattern
//重定向
String contextPath = this.getServletContext ().getContextPath ();//当前项目的地址
resp.sendRedirect (contextPath+"/hello.html");
2.测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.saxon.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RedirectServlet extends HttpServlet {
@Override
protected void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String contextPath = this.getServletContext ().getContextPath ();//当前项目的地址
resp.sendRedirect (contextPath+"/hello.html");
}

@Override
protected void doPost (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet (req, resp);
}
}