HTTP:HyperText Transfer Protocol
超文本传输协议
用于定义web浏览器和web服务器之间交换数据的过程
特点:
基于请求/响应模型的协议。请求和相应必须成对出现,现有请求后有响应。
HTTP协议的默认端口是80;
组成:
HTTP请求协议和HTTP响应协议;(成对出现)
HTTP请求协议包含:请求行、请求头、请求体;
HTTP响应协议包含:响应行、响应头、响应体;
请求部分
//请求行
GET http://localhost/day14_tomcat/test.html?username=zs&password=123 HTTP/1.1
//请求头
Host: localhost
Connection: keep-alive
Content-Length: 24
Cache-Control: max-age=0
Origin: http://localhost
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://localhost/day14_tomcat/login.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8
Cookie: _ga=GA1.1.874373530.1497766826
//请求体
username=zs&password=123
请求部分:
//请求行:
GET http://localhost/day14_tomcat/test.html?username=zs&password=123 HTTP/1.1
格式: 请求的方式 请求的资源地址 协议/版本
请求方式(8种):
get :
1.提交的参数在地址栏
2.携带的数据有限制
3.不安全
post:
1.提交的参数在请求体中
2.提交的数据没有大小限制
3.相对来说安全
HTTP/1.1 协议版本和HTTP/1.0协议版本的区别:
HTTP/1.0: 发送一次请求,响应回来之后就断开
HTTP/1.1: 发送一次请求,响应回来之后,仍然保持连接
//请求头:
格式: key:value (value可能有多个值)
Accept: text/html,image/*,text/css, text/javascript,image/jpeg, image/gif 大类型/小类型 mime类型 --浏览器可以支持数据类型
Accept-Charset: ISO-8859-1(不支持中文) --字符集
Accept-Encoding: gzip --支持压缩
Accept-Language:zh-cn --语言环境
Host: www.itcast.cn:80 --访问主机
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --缓存文件的最后修改时间 ,问服务器这个文件这个时间之后是否有修改过
Referer: http://www.itcast.com/index.jsp --来自哪个页面、防盗链
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --代表的是用户所使用的浏览器的版本 ,文件下载 不同的浏览器文件名称编码
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
火狐/网景 :Mozilla/5.0 Gecko
微软 : IE : Windows NT 10.0; Win64; x64
微软: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko
Linux: Mozilla/5.0 (Windows NT 10.0; Win64; x64) (KHTML , like Gecko) Safari/537.36
APPLE : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML , like Gecko) Safari/537.36
CHROME : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Cookie --代表的缓存 --Cookie Session
Connection: Keep-Alive --链接状态
响应部分
HTTP/1.1 200 OK //响应行
Server: Apache-Coyote/1.1 //响应头
Accept-Ranges: bytes
ETag: W/"177-1497947263889"
Last-Modified: Tue, 20 Jun 2017 08:27:43 GMT
Content-Type: text/html
Content-Length: 177
Date: Tue, 20 Jun 2017 08:42:56 GMT
<!DOCTYPE html> //响应体
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>hello from eclipse123</h3>
<div>
</div>
</body>
</html>
//响应部分:
响应行: HTTP/1.1 200 OK
格式: 协议/版本 状态码 状态码的说明
状态码:
1xx: 基本上看不到, 服务器已经接收到了请求
2xx: 服务器已经成功处理了请求
200 请求成功
3xx: 服务器已经处理了请求,但是需要浏览器进一步操作
302 : 请求重定向: 请求我已接收,但是处理不了, 需要浏览器再去请求其它资源
304: 告诉浏览器使用本地缓存
4xx: 客户端请求的资源有问题
404 : 找不到对应的资源,
5xx: 服务器发生了错误
500:错误, 服务器程序发生了异常
响应头:
Location: http://www.it315.org/index.jsp --跳转的连接地址, 结合请求重定向来处理 302
Content-Type: text/html; charset=GB2312 --响应的数据类型 , 响应内容所使用编码格式: 告诉浏览器以什么样的编码去解析
Refresh: 1;url=http://www.it315.org --定时刷新 秒数;url="连接地址"
Content-Disposition: attachment; filename=aaa.zip --下载 下载文件的时候必须指定一个头
Server:apache tomcat --服务器型号
Content-Encoding: gzip --数据压缩
Content-Length: 80 --数据长度
Content-Language: zh-cn --语言环境
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --最后修改时间
Set-Cookie:SS=Q0=5Lb_nQ; path=/search --缓存 Cookie
Expires: -1 --缓存
Cache-Control: no-cache --缓存
Pragma: no-cache --缓存
Connection: Keep-Alive --保持连接连接
响应体: 页面上要显示的内容
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="test.html" method="post">
<div>用户名:<input type="text" name="username"/></div>
<div>用户名:<input type="password" name="password"/></div>
<div><input type="submit" value="登录"/></div>
</form>
</body>
</html>
web开发概述:
软件架构:
C/S架构:
Client/Server客户端/服务器端;要求客户端电脑安装一个客户端程序
优点:
1)用户体验好,效果炫
2)对信息安全的控制较强
3)应用服务器运行数据负荷较轻,部分计算功能在客户端完成
缺点:
1)占用硬盘空间
2)维护麻烦
3)安装使用依赖于其他条件。
B/S架构
Browse/Server 浏览器/服务器,通过浏览器和服务器交互,不需要安装其他程序;
优点:
1)维护和升级简单,无缝升级;
2)不用安装程序,操作系统内置了浏览器;
缺点:
1)动画效果受浏览器限制
2)对信息安全控制较差;
3)应用服务器运行数据负荷较中,大部分计算机都在服务器端,增加服务器的压力。
web服务器:
(JavaEE企业级开发规范,也叫J2EE,在Java中,规范就是接口。)
常见的 web服务器:
1)Tomcat;Apache组织提供的一个免费的小型的服务器。
2)WebLogic:Bea公司一个收费的大型服务器软件,后被Oracle收购。
3)WebSphere:IBM公司的一个收费的大型服务器软件
Servlet快速入门
现在src下面下class文件,实现Servlet接口
package com.itheima.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
//单例设计模式,每次调用的时候都是调用同一个对象
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override //每次访问的时候都执行,每个请求到达的时候,tomcat都会创建一个新的线程,在线程中调用service方法。
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// 专门向客户端提供相应的方法。
HttpServletResponse response = (HttpServletResponse) arg1;
response.getWriter().write("this is my first servlet!!!");
}
//-----------------------------------------------------------------------
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
}
然后再在web.xml核心配置文件里面进行配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Day14_0618_01</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--声明一个servlet路径-->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
</servlet>
<!--配置映射路径-->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/abc</url-pattern>
</servlet-mapping>
</web-app>
什么是Servlet:
Servlet是运行在服务端的java小程序,是sun公司提供的一套规范,用来处理客户端请求、相应给浏览器的动态资源。
servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
要实现此接口,可以编写一个扩展 javax.servlet.GenericServlet 的一般 servlet,或者编写一个扩展 javax.servlet.http.HttpServlet 的 HTTP servlet。
此接口定义了初始化 servlet 的方法、为请求提供服务的方法和从服务器移除 servlet 的方法。这些方法称为生命周期方法,它们是按以下顺序调用的:
- 构造 servlet,然后使用 init 方法将其初始化。
- 处理来自客户端的对 service 方法的所有调用。
- 从服务中取出 servlet,然后使用 destroy 方法销毁它,最后进行垃圾回收并终止它。
除了生命周期方法之外,此接口还提供了 getServletConfig 方法和 getServletInfo 方法,servlet 可使用前一种方法获得任何启动信息,而后一种方法允许 servlet 返回有关其自身的基本信息,比如作者、版本和版权。
Servlet是JavaWeb三大组件之一(Servlet、Filter、Listener),且最重要。
作用:
用来处理从客户端发送过来的请求,并对该请求做出响应 。