栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java http

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java http

文章目录

Http:超文本传输协议request与response对象

request功能:获取请求消息数据

获取请求行数据获取请求头数据方法request获取请求体数据 request其他功能

通用方法获取请求参数请求转发共享数据获取ServletContext

Http:超文本传输协议

定义了客户端和服务器端通信时,发送数据的格式。
特点:

是基于TCP/IP的高级协议。默认端口号是80。例如http://www.baidu.com:80.一次请求对应一次响应。无状态的协议:每次请求之间是相互独立的,不能交互数据。

请求消息的数据格式
1、请求行 请求方式 请求url 请求协议/版本 GET /login.html HTTP/1.1
2、请求头 键值对的格式
3、请求空行 就是区分请求头和请求体的空行
4、请求体 GET请求是没有请求体的。

HTTP协议有7种请求方式,常用的有GET和POST

GET方式的请求参数在请求行(url中)。POST方式的请求参数在请求体中。GET请求的url长度是有限制的,POST请求是没有限制的。GET请求不太安全,POST请求相对安全。 request与response对象

tomcat服务器会创建request与response对象,request对象中封装请求消息数据。tomcat将这两个对象传递给service方法,并且会调用service方法。

request对象是来获取请求消息的,response对象是来设置响应消息的。

有两个接口:ServletRequest与HttpServletRequest,后者继承了前者。

request功能:获取请求消息数据 获取请求行数据

1、获取请求方式 getMethod()2、获取虚拟目录 getContextPath()3、获取servlet路径 getServletPath()4、获取get方式的请求参数 getQueryString()5、获取请求的uri getRequestURI()/ getRequestURL()6、获取协议和版本号 getProtocol()7、获取客户机的IP地址 getRemoteAddr()

在IDEA中,可以不用新建class,直接new一个servlet即可。

package com.example.request;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "Servlet", value = "/Servlet")
public class Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String method = request.getMethod();
        System.out.println(method);
        String contextPath = request.getContextPath();
        System.out.println(contextPath);
        String requestURI = request.getRequestURI();
        System.out.println(requestURI);
        StringBuffer requestURL = request.getRequestURL();
        System.out.println(requestURL);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
GET
/demo_war_exploded
/demo_war_exploded/Servlet
http://localhost:9528/demo_war_exploded/Servlet
获取请求头数据方法

1、getHeader(String name) 通过请求头的名称获取请求头的值2、getHeaderNames()获取所有的请求头名称。

package com.example.request;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet(name = "Servlet2", value = "/Servlet2")
public class Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Enumeration headerNames = request.getHeaderNames();
        //遍历
        while (headerNames.hasMoreElements()){
            String element = headerNames.nextElement();
            //根据名称获取请求请求头的值
            String header = request.getHeader(element);
            System.out.println(element+":"+header);
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
host:localhost:9528
connection:keep-alive
sec-ch-ua:" Not A;Brand";v="99", "Chromium";v="98", "Microsoft Edge";v="98"
sec-ch-ua-mobile:?0
sec-ch-ua-platform:"Windows"
upgrade-insecure-requests:1
user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43
accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
sec-fetch-site:none
sec-fetch-mode:navigate
sec-fetch-user:?1
sec-fetch-dest:document
accept-encoding:gzip, deflate, br
accept-language:zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
request获取请求体数据

只有post请求方式才有请求体。步骤:获取流对象,然后再从流对象中拿数据。getReader()获取字符输入流,只能操作字符数据。getInputStream()获取字节输入流,可以操作所有类型数据。




    
    Title




package com.example.request_demo;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.BufferedReader;
import java.io.IOException;

@WebServlet(name = "Servlet", value = "/Servlet")
public class Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求体
        BufferedReader reader = request.getReader();
        String line = null;
        while ((line = reader.readLine())!=null){
            System.out.println(line);
        }
    }
}

username=2021110093&password=123456
request其他功能 通用方法获取请求参数

get和post方法都是适用的。所以一般是在doPost里面,写业务逻辑代码,在doget里面调用方法。

package com.example.request_demo;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "Servlet2", value = "/Servlet2")
public class Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        System.out.println("请求"+username);
    }
}

getParameter(String name) 根据参数名称获取参数值
getParameterValues(String name) 根据参数名称获取参数值的数组,返回一个数组。
getParameterNames() 获取所有请求的参数名称,返回一个枚举,用遍历
getParameterMap()获取所有参数的map集合。

package com.example.request_demo;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.Map;
import java.util.Set;

@WebServlet(name = "Servlet2", value = "/Servlet2")
public class Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取
        Map parameterMap = request.getParameterMap();
        //遍历
        Set strings = parameterMap.keySet();
        for (String name : strings) {
            //根据name获取值
            String[] values = parameterMap.get(name);
            System.out.println(name);
            for (String value : values) {
                System.out.println(value);
            }
            System.out.println("--------");
        }
    }
}

请求参数时会有中文乱码的产生,get方式提交没有乱码,post方式提交有乱码。
只需在获取参数前,加上一行代码即可。

请求转发

一种在服务器内部的资源跳转方式。
步骤:
1、通过request对象获取请求转发器对象 getRequestDispatcher(String path)
2、使用获取的对象来转发 forward。

共享数据 获取ServletContext
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/731394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号