request和response总结

本文深入解析HTTP请求(request)和响应(response)的工作原理,涵盖Servlet、重定向、定时跳转、响应体设置、流处理注意事项及验证码生成等关键概念。通过实例演示如何处理登录、页面跳转及文件下载,为Web开发人员提供实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

request和response是什么?
request是请求,在浏览器输入地址,回车,就是一个请求
response是响应,服务器根据请求,返回数据到浏览器显示,就是一个响应

第一,response
1 HttpServletResponse是一个子接口,ServletResponse是父接口,是服务器响应对象
2 http分为三个部分
1.响应行
设置状态码 setStatus(int sc)
response.setStatus(302);

2.响应头
是key-value结构,一个key对应一个value,可以一个key对应多个value
(常用)设置响应头setHeader(String name , String value);一个key对应一个value
响应名称 响应参数
setHeader(“aa”,“11”);
setHeader(“aa”,“22”);
结果是 aa : 22
setIntHeader(String name ,int value)
setDateHeader(String name ,long date)毫秒值

针对是addHeader(String name ,int value)一个key对应多个value
addHeader(“bb”,“55”);
addHeader(“bb”,“66”);
结果是bb : 55,66

addIntHeader(String name ,int value)
addDateHeader(String name ,long date)毫秒值

3.响应体
向页面显示内容
getWriter() 字符流输出
getOutputStream() 字节流输出

第二,重定向
使用重定向实现登录操作
1.需求
在登入页面中,输入用户名和密码,判断输入的用户和密码是否正确
如果用户名和密码都正确,登录成功,向页面输出内容
如果用户名或者密码有一个是错误的,重定向(2次请求,2次响应)到登录页面

2.步骤
第一步:创建登录页面,写表单,在表单里面写两个输入项,一个输入用户名,一个输入密码,
提交到一个servlet里面

第二步:创建servlet,在这个servlet里面首先获取到输入的用户名和密码,
根据用户名和密码进行判断(用户名如果是admin,密码如果是123456表示正确的)

如果用户名和密码都正确,登录成功,向页面输出内容;
response.getWriter().write(“login success”);

否则重定向到登录页面

重定向的代码简写的方式
response.sendRedirect(“要重定向到的页面的路径”);

String login = request.getParameter(“login”);
String password = request.getParameter(“password”);

if (“admin”.equals(login) && “123456”.equals(password)) {
response.getWriter().write(“login success”);
} else {//重定向
/*response.setStatus(302);
response.setHeader(“Location”, “http://localhost:8080/day08_my/html/demo02_other.html”);
*/
response.sendRedirect(“http://localhost:8080/day08_my/html/demo02_other.html”);
}

第三,定时跳转
当注册一个网站,注册完成之后,5秒之后跳转到登录页面

3.2 实现方式
(1)使用头信息Refresh实现
(2)写法: response.setHeader(“Refresh”,“在几秒值后跳转;url=要跳转到页面的路径”);
3.3 创建servlet,在servlet实现,在五秒之后跳转到一个页面
response.setHeader(“Refresh”, “3;url=http://localhost:8080/day08_my/html/demo02.html”);

如:后台解决
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setHeader(“Refresh”, “3;url=http://localhost:8080/day08_my/html/demo02.html”);

response.setContentType(“text/html; charset=UTF-8”);
response.getWriter().write(“Demo03Servlet—3秒之后跳转”);
}

前台解决
html>
head>
meta http-equiv=“Refresh” content=“3;url=http://localhost:8080/day08_my/html/demo02.html”>
/head>

body>
h1>Demo03.html—3秒之后跳转
/body>
/html>

倒计时
!DOCTYPE html>
html>
head>
title>demo03.html
meta http-equiv=“Refresh” content=“3;url=http://localhost:8080/day08_my/html/demo02.html”>
/head>
!–3秒之后跳转–>

body>
h1>Demo03.html—3秒之后跳转
/body>

script type=“text/javascript”>
显示3,2,1,…倒数
var time=2;
function loadTime(){
var span = document.getElementById(“spanid”);
span.innerHTML=time–;
}
setInterval(“loadTime()”, “1000”);
/script>
/html>

第四,设置响应体
1 使用字节流向页面输出

  • 1、设置浏览器的编码
  • 2、设置字节数组的编码
  • 让浏览器的编码和字节数组的编码一致

//
response.setHeader(“content-type”, “text/html; charset=UTF-8”);
response.getOutputStream().write(“4.1 使用字节流向页面输出内容”.getBytes(“UTF-8”));

2 使用字符流向页面输出

  • 解决方法:
  • 1、设置response缓冲区的编码
  • 2、设置浏览器的编码
  • response缓冲区的编码和浏览器的编码一致

response.setCharacterEncoding(“UTF-8”);
//
response.setHeader(“content-type”, “text/html; charset=UTF-8”);
response.getWriter().write(“4.2 使用字符流向页面输出内容”);

第五,流的注意事项
5.1 字符流向页面输出中文乱码问题解决,简写方式
//
reesponse.setContentType(“text/html; charset=UTF-8”);
response.getWriter().write(“4.2 ,简写 ,使用字符流向页面输出内容”);

5.2 字节流和字符流是互斥的

5.3 使用字符流不能直接向页面输出数字
//根据数字到码表中查询数字对应的字符,把字符输出
response.setCharacterEncoding(“utf-8”);
response.getWriter().write(111);

第六,验证码的案例
第一步:生成图片
第二步:生成随机的数字和字母
第三步:把数字和字母画到图片上
第四步:把图片显示到页面上

/*

  • 代码实现验证码
    /
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    //生成图片
    int width = 150;
    int height = 60;
    BufferedImage bufferedImage =
    new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
    //得到画笔
    Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();
    //生成四个随机的数字和字母
    String words = “asdfghjklqwertyuiopzxcvbASDFGHJKLQWERTYUIOPZXCVB1234567890”;
    //创建Random对象
    Random r = new Random();
    int x = 25;
    int y = 25;
    //设置颜色
    g2d.setColor(Color.YELLOW);
    //设置字体的样式
    g2d.setFont(new Font(“宋体”,Font.BOLD,25));
    //rotate(double theta, double x, double y)
    //弧度=角度
    3.14/180
    for(int i=1;i<=4;i++) {
    int idx = r.nextInt(words.length());
    //根据位置得到具体的字符
    char ch = words.charAt(idx);

//旋转± 30度
int jiaodu = r.nextInt(60)-30;
double hudu = jiaodu*Math.PI/180;
//旋转的效果
g2d.rotate(hudu, x, y);
//把字符画到图片上
g2d.drawString(ch+"", x, y);

x += 25;

//转回去
g2d.rotate(-hudu, x, y);
}
//生成三条干扰线
g2d.setColor(Color.green);
int x1,y1,x2,y2;
for(int m=1;m<=3;m++) {
x1 = r.nextInt(width);
y1 = r.nextInt(height);

x2 = r.nextInt(width);
y2 = r.nextInt(height);
g2d.drawLine(x1, y1, x2, y2);
}
//把图片显示到页面上
ImageIO.write(bufferedImage, “jpg”, response.getOutputStream());
}

body>
form name=“f1” id=“f1” action="" method=“post”>
table border=“0”>
tr>
td>Login:
td>
/tr>
tr>
td>Password:
td>
/tr>
tr>
tr>
td>code:
td><img src=“http://localhost:8080/day08_my/demo06” id=“img1” οnclick=“loadCode();”/>
/tr>
tr>
td colspan=“2” align=“center”>
/tr>
/table>
/form>
/body>
script type=“text/javascript”>
function loadCode(){
var img1 = document.getElementById(“img1”);
//这里"/day08_my/demo06"浏览器有缓存,所有需要加一个变量,时间对象是浏览器对象
img1.src="/day08_my/demo06?time="+new Date().getTime();
}
/script>

第七,文件的下载
/*
7.1 文件下载的基本实现的步骤
(0)设置头信息 Content-Disposition,无论是什么格式的文件都以下载方式打开
(1)在服务器上面有一个可以下载的文件
(2)从服务器上拿到这个文件(使用文件输入流得到文件)
(3)使用输出流把文件写到浏览器
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//输入关联下载的资源

String path = “/download/a.zip”;
InputStream is = getServletContext().getResourceAsStream(path);

int lastIndexOf = path.lastIndexOf("/");
String filename = path.substring(lastIndexOf+1);

response.setHeader(“Content-Disposition”, “attachment;filename=”+filename);

OutputStream os = response.getOutputStream();

int len = 0;
byte[] b = new byte[8192];
while ((len=is.read(b))!=-1) {
os.write(b, 0, len);
}
is.close();
os.close();
}

第八,request对象
/*

  • (1)getMethod() :得到http请求方式
    (2)getRequestURI() :得到请求地址(不包含ip+端口号)
    (3)getProtocol() :得到http的版本
    */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

//浏览器中 http://localhost:8080/day08_my/rdemo01
// GET
System.out.println(request.getMethod());

// day08_my/rdemo01
System.out.println(request.getRequestURI());

// HTTP/1.

### 回答1: request是指向服务器请求数据的信息,包含请求方法、、请求头等信息是服务器向客户端发送的响应数据,包含状态码、响应头、实体内容等信息。区别在于request是由客户端向服务器发起请求,而response则是由服务器向客户端返回响应。 ### 回答2: requestresponse是在计算机网络中常用的术语,用于描述信息传递的过程。简单来说,request是指发送方向接收方发送的请求,而response是指接收方向发送方返回的响应。 具体来说,request是客户端(通常是浏览器)向服务器发送的一种请求,以获取某种资源或执行某种操作。例如,当我们在浏览器输入一个网址,浏览器会发送一个request给服务器,请求该网址对应的网页内容。request通常包含了请求的方法(例如GET或POST)、请求的URL、请求的头部信息请求的正文内容等。 而response是服务器对客户端发送的request的回应。response中包含了服务器对请求的处理结果以及相应的数据。例如,对于上述的网页请求,服务器会返回一个包含网页内容的response给浏览器。response通常包含了响应的状态码(例如200表示请求成功,404表示未找到资源),响应的头部信息响应的正文内容等。 总结起来,request是从客户端发送到服务器的请求,而response是服务器返回给客户端的响应。它们之间的区别在于方向的不同:request是客户端发送给服务器,而response是服务器发送给客户端。在请求响应的过程中,客户端服务器需要进行信息的传递处理,以达到双方的目标。 ### 回答3: requestresponse是计算机网络通信中常用的两个概念。 request请求)是指客户端向服务器发送的请求消息,客户端通常请求服务器提供某种数据或者执行某种操作。请求消息中通常包括请求方法、URL、协议版本、请求头部请求正文等信息。客户端发送请求后,服务器根据请求消息,对客户端的请求进行处理并返回相应的结果。 response(响应)是指服务器向客户端发送的响应消息,服务器接收到客户端的请求后,根据请求内容进行相应的处理,并将处理结果封装成响应消息发送回客户端。响应消息通常包括响应状态码、响应头部响应正文等信息。客户端收到响应消息后,根据响应的内容进行相应的处理。 二者的区别主要体现在以下几个方面: 1. 角色:request是客户端发起的请求,而response是服务器对请求的响应。 2. 方向:request是客户端发送给服务器的消息,而response是服务器发送给客户端的消息。 3. 内容:request主要包括请求的方法、URL等信息,而response主要包括响应的状态码、头部正文等信息。 4. 顺序:request先发送给服务器,服务器接收并处理后返回response给客户端。 综上所述,requestresponse在计算机网络通信中扮演着不同的角色,前者是客户端对服务器的请求,后者是服务器对请求的响应。两者的内容方向也不同,但它们是相互配合完成网络通信的重要组成部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值