java_web:Http请求协议&Request

超文本传输协议。
特点:

  1. 基于TCP/IP的高级协议
  2. 默认端口:80
  3. 基于请求响应模型的 一次请求对应一次响应
  4. 无状态的:每次请求之间相互独立

版本:
1.0版本:每次请求响应都会建立新的连接
1.1版本:复用连接

请求消息数据格式:

  1. 请求行
    请求方式有 7种,常用的有两种
    1.get:请求参数在URL后面,不安全,有长度限制
    2.post:参数在请求体中,没有长度限制,相对安全

  2. 请求头
    常用的请求头:
    1 user-agent:浏览器告诉服务器其版本信息
    2 referer:告诉服务器当前的的请求从什么地方来

  3. 请求空行

  4. 请求体
    封装post请求消息的参数

Request&Response:
1.原理

  1. request与response对象有服务器来创建,
  2. request对象是来获取消息的,response对象是来设置响应信息的

2.request对象的继承体系
servletRequest接口 ,HttpServletRequest接口

3.request的功能

  1. 获取请求消息数据
    获取请求行、请求头、请求体数据

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("/request01")
public class Demo01Request extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
           1.BufferedReader getReader();
           2.ServletInputStream getInputStream();
         */
        BufferedReader reader = req.getReader();
        String line = null;
        while ((line = reader.readLine())!=null){
            System.out.println(line);
        }

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
         *1. String getMethod();
         *2. String getContextPath();
         *3. String getServletPath();
         *4. String getQueryString();
         *5. String getRequestURL(); String getRequestURI();
         *6. String getProtocol();
         *7. String getRemoteAddr();
         *
         * 8. Enumeration getHeaderName();
         * 9. String getHeader("user-agent");
         */

        String method = req.getMethod();
        System.out.println(method);

        String contextPath = req.getContextPath();
        System.out.println(contextPath);

        String servletPath = req.getServletPath();
        System.out.println(servletPath);

        String queryString = req.getQueryString();
        System.out.println(queryString);

        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL);

        String requestURI = req.getRequestURI();
        System.out.println(requestURI);

        String protocol = req.getProtocol();
        System.out.println(protocol);

        String remoteAddr = req.getRemoteAddr();
        System.out.println(remoteAddr);

        Enumeration<String> headerName = req.getHeaderNames();
        while (headerName.hasMoreElements()){
            String name = headerName.nextElement();
            String value = req.getHeader(name);
            System.out.println(name+":"+value);
        }

        String header = req.getHeader("user-agent");
        if (header.contains("Chrome")){
            System.out.println("llllaaaaa");
        }else {
            System.out.println("hhhhhhaaaa");
        }


    }
}
  1. 其他方法
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

public class Demo02Request extends HttpServlet {

    /*
    ** 1.String getParameter("username");
    *  2.String[] getParameterValues("hobby");
    *  3.Enumeration<String> getParameterNames()
    *  4.Map<String, String[]> getParameterMap();
    *
    *  请求转发
    *  5.RequestDispatcher requestDispatcher = req.getRequestDispatcher().forward(req,resp);
    * 
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	req.setCharacterEncoding("utf-8");//解决乱码问题
        String username = req.getParameter("username");
        System.out.println(username);

        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby: hobbies) {
            System.out.println(hobby);
        }

        Enumeration<String> parameterNames = req.getParameterNames();
        while (parameterNames.hasMoreElements()){
            String name = parameterNames.nextElement();
            System.out.println(name);
            String value = req.getParameter(name);
            System.out.println(value);
        }

        Map<String, String[]> parameterMap = req.getParameterMap();
        Set<String> setKey =parameterMap.keySet();
        for(String key :setKey){
            String[] values = parameterMap.get(key);
            for (String value : values){
                System.out.println(value);
            }
            System.out.println("==========");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值