HTTP

1.HTTP的概念:

Hyper Text Transfer protocol  超文本传输协议
     传输协议:定义了,客户端和服务器端通信时,发送数据的格式
            *特点:
                    1.基于TCP/IP的高级协议
                    2.默认端口号:80
                            http://www.itcast.cn:80
                    3.基于请求/响应模型的:一次请求对应一次响应
                    4.无状态的:每次请求之间相互独立,不能交互数据
               *历史版本
                        *1.0:每一次请求响应都会建立新的连接
                        *1.1:复用连接
                        
		      *请求消息数据格式
		                    1.请求行
		                            请求方式,请求url  请求协议/版本
		                            GET  /login.html  HTTP/1.1
		    
		                            *请求方式:
		                                    *HTTP协议有7种请求方式,常用的有2种
		                                        *GET:
		                                            1.请求参数在请求行中,在url后。
		                                            2.请求的url长度是有限制的
		                                            3.不太安全
		                                        *POST:
		                                            1.请求参数在请求体中
		                                            2.请求的url长度是没有限制的
		                                            3.相对安全
						     2.请求头:客户端浏览器告诉服务器一些信息
						                            请求投名称:请求头值
						                            *常见的请求头:
						                                    1.UserAgent:浏览器告诉服务器,我访问你使用的浏览器的版本信息
						                                            *可以在服务器端获取该头的信息,解决浏览器的兼容性问题
						                                    2.Referer:http://locahost/login.html
						                                            1.告诉服务器,我(当前请求)从哪里来?
						                                                    *作用
						                                                        1.防盗链:                                     
						                                                        2.同级工作: 
						                    3.请求空行
						                            空行,就是用于分隔POST请求的请求头,和请求体的。
						                    4.请求体(正文)
						                            *封住POST请求信息的请求参数的

2.Request

1.request对象和response对象的原理
                1.request和response对象是由服务器创建的,我们来使用它们
                2.request对象是来获取请求消息,response对象是来设置响应消息

整个过程如图所示:
在这里插入图片描述

 2.request对象继承体系结构:
                ServletRequest           ---    接口
                            |         继承
                HttpServletRequest     ---   接口
                            |         实现
                org.apache.catalina.connector.RequestFacade@10133f0 类(tomcat)
  3.request功能:
                1.获取请求消息数据
                            1.获取请求行数据
                                    *GET /day14/demo1?name=zhangsan HTTP/1.1
                                    *方法:    
                                        1.获取请求方法:GET
                                                    *String getMethod()
                                        2.(*)获取虚拟目录:/day14
                                                    *String getContextPath()
                                        3,获取Servlet路径:/demo1
                                                    *String getServletPath()
                                        4.获取get方法请求参数:name=zhangsan
                                                    *String getQueryString()
                                        5.(*)获取请求URL:/day14/demo1
                                                    *String getRequestURI():       /day14/demo1
                                                    *StringBuffer getRequestURL()  :http://localhost/day14/demo1
    
                                                    *URL:统一资源定位符:http://localhost/day14/demo1
                                                    *URI:统一资源标识符:/day14/demo1
                                        6.获取协议及版本:      HTTP/1.1
                                                    *String getProtocol()
                                        7.获取客户机的IP地址
                                                    *String getRemoteAddr()

具体例子如下:

package cn.itcast.web.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;

/*
 *演示Request对象获取请求行数据
 */
@WebServlet("/RequestDemo1")
public class request extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
        1.获取请求方法:GET
                    *String getMethod()
        2.(*)获取虚拟目录:/day14
                    *String getContextPath()
        3,获取Servlet路径:/demo1
                    *String getServletPath()
        4.获取get方法请求参数:name=zhangsan
                    *String getQueryString()
        5.(*)获取请求URL:/day14/demo1
                    *String getRequestURL():       /day14/demo1
                    *StringBuffer getRequestURL()  :http://localhost/day14/demo1
        6.获取协议及版本:      HTTP/1.1
                    *String getProtocol()
        7.获取客户机的IP地址
                    *String getRemoteAddr()
         */
        //1.获取请求方式
        String method = request.getMethod();
        System.out.println(method);
        //2.获取虚拟目录
        String contextPath = request.getContextPath();
        System.out.println(contextPath);
        //3,获取Servlet路径
        String servletPath = request.getServletPath();
        System.out.println(servletPath);
        //4.获取get方法请求参数
        String queryString = request.getQueryString();
        System.out.println(queryString);
        //5.(*)获取请求URL
        String requestURI = request.getRequestURI();
        StringBuffer requestURL = request.getRequestURL();
        System.out.println(requestURI);
        System.out.println(requestURL);
        //6.获取协议及版本
        String protocol = request.getProtocol();
        System.out.println(protocol);
        //7.获取客户机的IP地址
        String remoteAddr = request.getRemoteAddr();
        System.out.println(remoteAddr);

    }
}

结果如下:

GET
/day12_servlet_war_exploded
/RequestDemo1
null
/day12_servlet_war_exploded/RequestDemo1
http://localhost:8080/day12_servlet_war_exploded/RequestDemo1
HTTP/1.1
0:0:0:0:0:0:0:1

 2.获取请求头数据
                                    *方法:
                                        * String getHeader(String name):通过请求头的名称获取请求头的值
                                        *Enumeration<String> getHeaderNames():获取所有的请求头名称

代码如下:

package cn.itcast.web.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("/requestdemo4")
public class Requestdemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //演示获取请求头数据:referer

        String referer = request.getHeader("referer");
        System.out.println(referer);

        //防盗链
        if(referer != null){
            if (referer.contains("/day12_servlet_war_exploded")){
                //正常访问
                System.out.println("播放电影......");
            }else{
                //盗链
                System.out.println("想看电影吗?来优酷");
            }
        }
    }
}

结果如下:

http://localhost:8080/day12_servlet_war_exploded/login.html
播放电影.........
 3.获取请求体数据
                                    *请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
                                    *步骤:
                                            1.获取流对象
                                                    *BufferedReader getReader(): 获取字符输入流,只能操作字符流数据    
                                                    *ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
                                                                    *在文件上传知识点后讲解
                                            2.再从流对象中获取数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值