HTTP协议及Servlet类笔记

什么是http?
客户端和服务器之间发送的数据,需要遵守的规则。http协议中的数据又叫做报文。
客户端给服务器发送数据叫请求,服务器给客户端回传数据叫响应。
请求又分为GET、POST协议
1、GET请求
1.1请求行
(1)请求的方式(“GET”)
(2)请求的资源路径(+?+请求参数)
(3)请求的协议和版本号(HTTP/1.1)
1.2请求头
key:value 组成 不同的键值对表示不同的含义

在这里插入图片描述
2、POST请求
2.1请求行
(1)请求的方式(“GET”)
(2)请求的资源路径(+?+请求参数)
(3)请求的协议和版本号(HTTP/1.1)
2.2请求头
key:value 组成 不同的键值对表示不同的含义
空行
2.3请求体
就是发送给服务器的数据
以下时POST请求HTTP协议内容
在这里插入图片描述
在这里插入图片描述
常用请求头说明:
Accept:表示客户端可以接受的数据类型
Accept-Language:表示客户端可以接受的语言类型
User-Agent:表示客户端浏览器的信息
Host:表示请求时的服务器ip和端口号port
那些是GET请求,哪些是POST请求?
GET请求有哪些?
1、form标签 method=get
2、a标签
3、link标签引入css
4、Script标签引入js文件’
5、img标签引入图片
6、iframe引入html页面
7、在浏览器地址栏中输入地址后回车
POST请求有哪些?
form标签 method=post
响应的HTTP协议格式
1、响应行
(1)响应的协议和版本号 HTTP/1.1
(2)响应状态码 200
(3)响应状态描述符
2、响应头
(1) key:value 不同的响应头有不同的意义
空行
3、响应体 就是服务器给客户端回传的数据
实例:
在这里插入图片描述
常用的响应码说明:
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到,但是你要的数据不存在(请求地址错误)
500 服务器已经收到请求,但是服务器内部错误(代码错误)
HttpServletRequest类
1、HttpServletRequest类有什么作用?
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象,获取到所有请求的信息。
2、HttpServletRequest类的常用方法
(1)getRequestURI() 获取请求的资源路径
(2)getRequestURL() 获取请求的统一资源定位符(绝对路径)
(3)getRemoteHost() 获取客户端的ip地址
(4)getHeader() 获取请求头
(5)getParameter() 获取请求的参数
(6)getParameterValues() 获取请求的参数(多个值的时候使用)
(7)getMethod() 获取请求的方式POST或GET
(8)setAttribute(key,value) 设置域数据
(9)getAttribute(key) 获取域数据
(10)getRequestDispatcher() 获取请求转发对象

请求的转发:
是指服务器收到请求后,从一个资源跳转到另一个资源的操作叫请求转发。
在这里插入图片描述
请求转发的特点:
1、浏览器地址栏没有变化
2、他们是一次请求
3、所以他们共享Request域中的数据
4、可以转发到WEB-INF目录下
5、是否可以访问工程以外的资源
base标签
在这里插入图片描述
Web中的相对路径和绝对路径
相对路径是:

.		表示当前目录
..		表示上一级目录
资源名	表示当前目录/资源名

绝对路径:
http://ip:port/工程路径/资源路径
Web中 / 的不同意义
在web中 / 是一种绝对路径
/ 如果被浏览器解析,得到的地址是:http://ip:port

<a href="/">斜杠</a>

/ 如果被服务器解析,得到的地址是:http://ip:port/工程路径
1、<url-pattern>/fc</url-pattern>
2、servletContext.getRealPath("/")
3、request.getRequestDispatcher("/")
特殊情况:
responce.sendRediect(“/”) 把斜杠发送给浏览器解析,得到http://ip:port/

HttpServletResponse类的作用
HttpServletResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息。我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象进行设置。
两个输出流的说明:
字节流:getOutputStream(); 常用于下载(传递二进制数据)
字符流:getWrite() 常用于回传字符串(常用)
两个流同时只能使用一个。
使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。
在这里插入图片描述
如何往客户端回传数据?
要求:往客户端回传 字符串数据

public class ResponseIOServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(resp.getCharacterEncoding());  //默认ISO-8859-1
        //设置服务器字符集为UTF-8    方法一:
//        resp.setCharacterEncoding("UTF-8");
//        //通过响应头,设置浏览器也使用UTF-8
//        resp.setHeader("Content-type","text/html;charset-UTF-8");

//      方法二:  它会同时设置服务器和客户端都使用utf-8字符集,还设置了响应头
        //注意: 此方法一定要在获取流对象之前调用才有效
        resp.setContentType("text/html;charset-UTF-8");
        //往客户端回传 字符串数据
        PrintWriter writer = resp.getWriter();
        writer.write("徐文强");
    }
}

请求重定向:
是指客户端给服务器发请求,然后服务器告诉客户端说,我给你一些地址,你去新地址访问。叫请求重定向(因为之前的地址可能已被废弃)。
在这里插入图片描述
请求重定向的特点:
1、浏览器地址栏会发生变化
2、两次请求
3、不共享Request内保存的数据
4、不能访问WEB-INF下的资源
5、可以访问工程外的资源
请求重定向第二种方法(推荐使用):

public class Response1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("曾到此一游response1");
        //设置响应码302,表示重定向,(已搬迁)
//        resp.setStatus(302);
//        //设置响应头,说明新的地址在哪里
//        resp.setHeader("Location","http://localhost:8080/servlet_08_war_exploded/response2");

        resp.sendRedirect("http://localhost:8080");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值