Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类
创始人
2024-11-19 14:03:58
0

目录

HTTP协议

什么是HTTP协议

HTTP协议的特点

请求的HTTP协议格式

GET请求

POST请求

常用的请求头说明

哪些是GET请求,哪些是POST请求

响应的HTTP协议格式

常见的响应码说明

MIME类型说明

HttpServletRequest类

作用

常用方法

如何获取请求参数

post请求中文乱码问题

请求转发

base标签的作用

Web中的相对路径和绝对路径

Web中斜杠/的不同意义

HttpServletResponse类

作用

两个输出流的说明

如何向客户端回传字符串数据

请求重定向


HTTP协议

什么是HTTP协议

协议:指双方或多方相互约定好,大家都需要遵守的规则

HTTP(HyperText Transfer Protocol),超文本传输协议,规定了浏览器和服务器之间数据传输的规则

HTTP协议中的数据又叫报文

HTTP协议的特点

  • 基于TCP协议:面向连接,安全
  • 基于请求-响应模型的:一次请求对应一次响应
  • HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。 缺点:多次请求间不能共享数据。 优点:速度快

请求的HTTP协议格式

客户端给服务器发送数据叫请求,服务器给客户端回传数据叫响应

请求分为GET请求和POST请求两种

GET请求和POST请求的区别:

  1. GET请求请求参数在请求行中,没有请求体。POST请求请求参数在请求体中
  2. GET请求请求参数大小有限制,POST没有

GET请求

1.请求行

    (1)请求的方式:GET

    (2)请求的资源路径:[+?+请求参数]

    (3)请求的协议的版本号:HTTP/1.1

2.请求头

    由key:value组成,不同的键值对表示不同的含义

POST请求

1.请求行

    (1)请求的方式:POST

    (2)请求的资源路径:[+?+请求参数]

    (3)请求的协议的版本号:HTTP/1.1

2.请求头

    由key:value组成,不同的键值对表示不同的含义

请求头和请求体之间有空行

3.请求体:发送给服务器的数据

常用的请求头说明

Accept:客户端可以接收的数据类型

Accept-Language:客户端可以接收的语言类型

User-Agent:客户端浏览器的信息

Host:请求时的服务器ip和端口号

哪些是GET请求,哪些是POST请求

GET请求有哪些:

  • form标签 method=get
  • a标签
  • link标签引入css
  • script标签引入js文件
  • img标签引入图片
  • iframe引入html页面
  • 在浏览器地址栏中输入地址后敲回车

POST请求有哪些:

  • form标签 method=post

响应的HTTP协议格式

1.响应行

    (1)响应的协议和版本号:HTTP/1.1

    (2)响应状态码:200

    (3)响应状态描述符:OK

2.响应头

    由key:value组成,不同的键值对表示不同的含义

响应头和响应体之间有空行

3.响应体:回传给客户端的数据

常见的响应码说明

200:请求成功

302:请求重定向

404:请求服务器已经收到了,但数据不存在(请求地址错误)

500:服务器已经收到请求,但是服务器内部错误(代码错误)

MIME类型说明

MIME是HTTP协议中的数据类型

MIME类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应

常见的MIME类型:

HttpServletRequest类

作用

每次只要有请求进入tomcat服务器,tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中,然后传递到service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象获取到所有请求的信息

常用方法

  • getRequestURI():获取请求的资源路径
  • getRequestURL():获取请求的统一资源定位符(绝对路径)
  • getRemoteHost():获取客户端的ip地址
  • getHeader():获取请求头
  • getParameter():获取请求的参数
  • getParamterValues():获取请求的参数(多个值)
  • getMethod():获取请求的方式GET/POST
  • setAttribute(key,value):设置域数据
  • getAttribute(key):获取域数据
  • getRequestDispatcher():获取请求转发对象

启动输出为:

如何获取请求参数

post请求中文乱码问题

要在获取请求参数之前设置才有效

请求转发

请求转发是指服务器收到请求后,从一个资源跳转到另一个资源

请求转发的特点:

  • 浏览器地址栏没有变化
  • 它们是一次请求
  • 它们共享Request域中的数据
  • 可以转发到WEB-INF目录下
  • 不可以访问工程以外的资源

Servlet1类:

package com.qcby.servlet0724;  import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException;  public class Servlet1 extends HttpServlet {     @Override     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {         //获取请求参数         String username = request.getParameter("username");         System.out.println("在Servlet1中查看参数:"+username);          //盖章,并传递到Servlet2         request.setAttribute("key1","柜台1的章");          //问路:Servlet2怎么走         /**          * 请求转发必须要以斜杠开头          */         RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet2");          //走向Servlet2         requestDispatcher.forward(request,response);     }   } 

Servlet2类:

package com.qcby.servlet0724;  import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException;  public class Servlet2 extends HttpServlet {     @Override     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {         //获取请求参数         String username = request.getParameter("username");         System.out.println("在Servlet2中查看参数:"+username);          //查看柜台1是否盖章         Object key1 = request.getAttribute("key1");         System.out.println("柜台1是否有章:"+key1);          //处理自己的业务         System.out.println("Servlet2处理自己的业务");     }  } 

启动:

base标签的作用

base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转

Web中的相对路径和绝对路径

相对路径:

.表示当前目录

..表示上一级目录

资源名:表示当前目录/资源名

绝对路径:

http://ip:port/工程路径/资源路径

Web中斜杠/的不同意义

在web中/斜杠是一种绝对路径

  • /斜杠如果被浏览器解析,得到的地址是:http://ip:port/
  • /斜杠如果被服务器解析,得到的地址是:http://ip:port/工程路径

特殊情况:

response.sendRedirect("/"):把斜杠发送给浏览器解析,得到http://ip:port/

HttpServletResponse类

作用

每次请求进来,tomcat服务器都会创建一个Response对象传递给Servlet程序去使用,HttpServletResponse表示所有响应的信息,如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置

两个输出流的说明

  • 字节流:getOutputStream(),常用于下载(传递二进制数据)
  • 字符流:getWriter(),常用于回传字符串(常用)

两个流同时只能使用一个,使用了字节流,就不能再使用字符流,反之亦然,否则报错

如何向客户端回传字符串数据

PrintWriter writer = response.getWriter(); writer.write("response's content");

解决中文乱码问题:

方案一:

方案二:同时设置服务器和客户端都使用UTF-8,还设置了响应头,只有在获取流对象之前设置才有效

response.setContextType("text/html;charset=UTF-8");

请求重定向

请求重定向是指客户端给服务器发请求,然后服务器告诉客户端说我给你一些地址,你去新地址访问(因为之前的地址可能已废弃)

请求重定向的特点:

  • 浏览器地址栏会发生变化
  • 两次请求
  • 不共享Request域中的数据
  • 不能访问WEB-INF下的资源
  • 可以访问工程外的资源

方案一:

Response1:

package com.qcby.servlet0724;  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 Response1 extends HttpServlet {     @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         System.out.println("Response1");          //设置响应状态码302,表示重定向         resp.setStatus(302);         //设置响应头,说明新的地址         resp.setHeader("Location","http://localhost:8080/servlet0724/response2");     } } 

Response2:

package com.qcby.servlet0724;  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 Response2 extends HttpServlet {     @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         resp.getWriter().write("response2的结果");     } } 

启动:访问http://localhost:8080/servlet0724/response1

方案二(推荐):

相关内容

热门资讯

手机贴膜曲面屏最好选哪种膜(为... 曲面屏手机最好选择UV光固化膜或者热弯膜,因为这些膜能够更好地贴合曲面屏幕,覆盖边缘,减少灰尘和气泡...
word自动更正怎么用 在Word中,自动更正功能可以通过以下步骤使用:,,1. 点击“文件”菜单,选择“选项”。,2. 在...
人工智能与机器学习原理精解【7... 文章目录凸优化基础理论加权正规方程线性回归模型加权最小二乘法加权正规方程注意使用`Diago...
什么叫恶意挖矿 恶意挖矿是指未经授权,通过在受害者的计算机上秘密安装挖矿软件,利用受害者的计算资源来挖掘加密货币的行...
nvidia中只有3d设置 NVIDIA控制面板中不仅有3D设置,还包括调整桌面颜色和视频颜色等其他选项。3D设置可以优化电脑在...
dark web是什么 暗网(dark web)是指互联网中无法通过常规搜索引擎访问的部分,通常需要特殊软件、配置或授权才能...
报文 ack 报文ACK(确认)是计算机网络中用于确认接收到数据包的一种控制报文。它通知发送方数据已被成功接收,以...
酷狗音乐怎样申请音乐人 申请成为酷狗音乐人,需先在酷狗官网注册账号,然后找到“音乐人”入口,提交个人信息和作品审核。审核通过...
前端面试宝典【vue篇】【4】 欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。...
为什么idea建议使用“+”拼... 今天在敲代码的时候,无意间看到这样一个提示:英文不太好,先...