JavaWeb复习巩固

JavaWeb学习第三天:

http协议:

网络之间传输信息,通讯需要遵守协议。

例如你要传输一个123数据,它会一层一层给你把数据封装,然后在解封装,最后你看看的就是123.

HTTP 协议一般指 HTTP(超文本传输协议)。

超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

注意:

http在传输数据之前先要建立连接

http协议是基于TCP协议

http  在传输数据之前先要建立连接

发送http请求

http协议不同的版本

三个版本

http1.0    

连接不可以复用(只用一次)

客户端发送请求到服务器

建立连接

传输数据

关闭连接

浏览器展示数据

http1.1    

连接可复用

客户端发送请求到服务器

建立连接

传输数据

传输数据

关闭连接

浏览器展示数据

http2.0

HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

http请求之间不能共享数据

get请求和post请求的区别

1. get请求请求参数是放在浏览器地址栏中提交的   post请求的请求参数是放在请求体中

2. get请求相对不安全,post请求相对安全

3. get请求提交的请求数据大小有限制4kb     post请求没有大小限制(文件上传)

2.HttpServletrequest

1.  获取客户端传过来的三部分信息

分别是请求行,请求头和请求体

代码如下:

package com.swlz.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/requestDemo")
public class RequestDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        System.out.println("处理get请求");
        //请求行相关方法  请求行信息获取
        String method = req.getMethod();
        System.out.println("请求方式"+method);
        String requestURL = req.getRequestURL().toString();
        System.out.println("请求路径URL"+requestURL);//http://localhost:8080/tomcat/requestDemo
        String requestURI = req.getRequestURI();
        System.out.println("请求路径URI"+requestURI);///tomcat/requestDemo
        String protocol = req.getProtocol();
        System.out.println("请求协议"+protocol);

        //请求头信息获取:从浏览器传到服务器中去,一般是浏览器告诉服务器本次请求的基本信息
//          GET /tomcat/requestDemo?username=admin&password=12345 HTTP/1.1
//          Host: localhost:8080
//          Connection: keep-alive
//          Upgrade-Insecure-Requests: 1
//          User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
//          Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
//          Sec-Fetch-Site: same-origin
//          Sec-Fetch-Mode: navigate
//          Sec-Fetch-User: ?1
//          Sec-Fetch-Dest: document
//          Referer: http://localhost:8080/tomcat/
//          Accept-Encoding: gzip, deflate, br
//          Accept-Language: zh-CN,zh;q=0.9
//          Cookie: Hm_lvt_1cd9bcbaae133f03a6eb19da6579aaba=1632280557; username=admin; rememberMe=true; password=cRM1L2ln+WnKDx+fqJmgc+ZdVQKlLP/IzLXKMBx5bdBuMofh/Z4t0r50cE0js72EE2zmJUkl7NhNQTrfd2d6Ug==; qx=AC8E9B7B1BC008998D7EF3CE50A0A9C3
//          req.getHeader(" ")
        String host = req.getHeader("Host");
        System.out.println("Host"+host);
        //http1.1支持长连接
        String connection = req.getHeader("Connection");
        System.out.println("connection"+connection);
        //告诉服务器本次请求的浏览器版本信息
  String header = req.getHeader("User-Agent");
        System.out.println("User-Agent"+header);

  //告诉服务器本次请求响应的数据格式
        String accept = req.getHeader("Accept");
        System.out.println("Accept"+accept);
        //Referer 告诉服务器本次请求的来源http://localhost:8080/tomcat/  防盗链
        // 防盗链:防止其他人随便跳到你的网页中来
        String referer = req.getHeader("Referer");
        System.out.println("Referer"+referer);
        String header1 = req.getHeader("Accept-Encoding");
        System.out.println("Accept-Encoding"+header1);
        String header2 = req.getHeader("Accept-Language");
        System.out.println("Accept-Language"+header2);
        String cookie = req.getHeader("Cookie");
        System.out.println("cookie:"+cookie);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("处理post请求");
    }
}

获取请求参数的时候,由于get请求和post请求参数所在的位置不一样,所有导致我们get请求和post请求处理代码也不一致

2获取请求参数相关的方法

httpServeltRequest对象总又给我们封装了一些方便的统一获取请求参数的方法对get和post都适用

package com.swlz.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
import java.util.Set;

@WebServlet("/servletRequestDemo1")
public class ServletRequestDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求参数username和password
        // request.getParameter("username"); 根据参数名称获取唯一的参数值
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //复选框 getParameterValues("hobby"); 根据参数名称获取一个或者多个参数值
        String[] parameterValues = request.getParameterValues("hobby");
        System.out.println(username+":"+password);
        System.out.println(parameterValues[0]+":"+parameterValues[1]);
        //ParameterMap的键对应的是你请求参数的名字,值对象的是你请求参数的值(数据)  一次获取所有请求参数
        //request.getParameterMap();一次获取所有请求参数  map的key是请求参数的名称  value请求参数值所对应的数组
        Map<String, String[]> parameterMap = request.getParameterMap();
        Set<String> keySet = parameterMap.keySet();
        for (String key : keySet) {
            //通过键得到值
            String[] values = parameterMap.get(key);
            System.out.println(key+":"+values);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求参数username和password
//        String username = request.getParameter("username");
//        String password = request.getParameter("password");
//        System.out.println(username+":"+password);
        doPost(request,response);
    }
}

1. 请求乱码问题

注意:

Post请求中文乱码解决

package com.swlz.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//乱码问题  浏览器跟服务器不用的编码表不一样
@WebServlet("/servletRequestDemo2")
public class ServletRequestDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");//设置服务器编码格式  设置request缓冲区的编码格式 在获取请求参数之前设置编码格式
        String username = request.getParameter("username");
        System.out.println("username:"+username);
    }

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

Get请求中文乱码在tomcat8.5之后自动解决,在tomcat8之前会有乱码问题

今日学习感受:多去理解,多敲代码,多去思考,多去自己动手,争取不要看教程,把它成你自己的对象,这样印象深刻一点,不然学完很容易忘记。最后一句话:千里之行,始于足下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值