request请求

什么是HTTP协议

HTTP: Hyper Text Transfer Protocol 超文本传输协议,用来传输超文本数据的协议,用来传输网页。

HTTP协议特点

  1. 简单快速:浏览器向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  2. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  3. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的响应后,即断开连接。采用这种方式可以节省传输时间。
  4. 无状态:HTTP协议是无状态协议。无状态是指协议对于业务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的响应就较快。

什么是请求

由浏览器发送给服务器的所有数据,称为请求。

请求的组成部分

请求行:包括请求的方法、URL、协议和版本,GET方法的数据在请求行中发送
请求头:由键值对组成
请求体:POST方法的数据在请求体中发送,GET方法没有请求体

HTTP1.0与1.1的区别

1.0是每次请求就把TCP连接关闭,而1.1在同一时间对于同一个域名的请求数量有限制,超过限制就会阻塞请求。

POST与GET的区别

POST方式GET方式
地址栏不会显示提交的参数提交的所有参数都会在地址栏上显示
发送数据大小理论上没有限制受浏览器的限制,最多1024B
安全性安全更高相对低一些
缓存不使用缓存
把数据发送给服务器。不使用缓存,状态码是200
如果页面已经访问过,并且服务器没有更新。会使用缓存
从服务器得到数据。如果使用缓存,状态码是304

常见的请求头

在这里插入图片描述

与请求行有关的方法

在这里插入图片描述
代码:

@WebServlet(name = "Demo1RequestLineServlet", urlPatterns = "/demo1")
public class Demo1RequestLineServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置内容的类型和字符集
        response.setContentType("text/html;charset=utf-8");
        //得到打印流
        PrintWriter out = response.getWriter();
        out.print("请求的方式:" + request.getMethod() + "<br/>");
        out.print("得到请求的URI: " + request.getRequestURI() + "<br/>");
        out.print("得到请求的URL: " + request.getRequestURL() + "<br/>");
        out.print("得到版本和协议:" + request.getProtocol() + "<br/>");
        //Context 上下文
        out.print("得到当前项目的访问地址:" + request.getContextPath() + "<br/>");
        out.print("得到客户端的IP地址(默认是IPV6):" + request.getRemoteAddr() + "<br/>");
        out.print("得到当前Servlet的访问地址:" + request.getServletPath() + "<br/>");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

结果:
在这里插入图片描述

与请求头有关的方法

在这里插入图片描述
与Enumeration有关的方法:
在这里插入图片描述

请求对象的方法:获取浏览器提交的数据

在这里插入图片描述

解决POST方法请求参数值汉字乱码问题

产生乱码的原因以及解决:Tomcat中请求默认的编码:iso-8859-1,这是欧洲码表,不支持汉字。我们需要将请求的编码改成utf-8,才会支持汉字。

解决:1. 使用方法:request.setCharacterEncoding(“utf-8”)
           2. 方法出现的位置:必须放在所有得到参数方法的代码之前
           3. 请求的编码要与提交参数的HTML页面的编码一致

  1. POST乱码如何解决:setCharacterEncoding
  2. GET乱码如何解决:tomcat8没有乱码

作用域

用于在服务器上实现多个Servlet之间、用户之间、请求之间数据的共享
我们可以向作用域中添加数据,也可以从作用域中取出数据,也可以删除作用域中数据。
作用域的底层是一个Map结构键是字符串类型,值是Object类型,可以存放任何的数据。

Servlet中三个作用域

所有作用域中的数据是放在服务器内存中的,一共有3个作用域;
按照范围从小到大:请求域request----->会话域session----->上下文域servletContext

与请求域有关的方法

在这里插入图片描述

页面的跳转

转发:在服务器端进行页面跳转,称为转发.

原理图:
在这里插入图片描述

使用代码:request.getRequestDispatcher("two").forward(request, response);//two  表示要跳转的页面

重定向:在浏览器端进行页面跳转,称为重定向.

原理图:
在这里插入图片描述
重定向使用的方法属于响应的方法:

response.sendRedirect("two");// two  表示要跳转的页面

转发与重定向的区别

区别转发forward()重定向sendRedirect()
地址栏不会发生变化
哪里跳转服务器端的跳转浏览器端跳转
请求域中数据不会丢失会丢失

什么时候使用转发,什么时候使用重定向

如果要保留请求域中数据,使用转发,否则使用重定向。
无论是转发还是重定向,后续的代码都会执行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值