一个网页是怎么运行的?
首先网页想要运行,需要有静态资源他们负责页面的展示,如果我们想要页面产生互动效果,我们需要动态资源进行逻辑处理。同时,我们还需要数据库来存取数据。
进入一个网站,浏览器向服务器请求资源,动态资源去数据库里拿取数据,静态数据做出页面,最后服务器响应返回页面给浏览器。浏览器解析页面成为我们看到的效果。
HTTP:超文本传输协议
HTTP规定了浏览器和服务器之间传输数据的规则。
HTTP协议特点:
基于TCP协议:面向连接,安全
基于请求-响应模型:一次请求对应一次响应
HTTP协议是无状态的协议,对于事务处理没有记忆能力。每次请求-响应都是独立的。
优点:速度快。
缺点:多次请求间不可以共享数据。
举个例子:我们将商品添加到购物车这一行为是一个请求和响应。我们打开购物车结算的时候又是一个请求和响应。我们需要知道将什么东西添加到了购物车里,但两次请求之间的数据不能共享。
Java会提供会话技术(cookie和Session)来解决这个问题。
HTTP-请求数据格式
1、请求行:请求数据的第一行。其中GET表示请求方式,/表示请求资源路径,HTTP/1.1表示协议版本。
GET/HTTP/1.1
2、请求头:从第二行开始,格式为键值对key:value形式。
User-Agent:用于浏览器兼容性处理,让不同浏览器访问的效果相同
3、请求体:
POST请求方式独有的模块。用来存放请求的数据,没有数据大小的限制。
总结:
GET请求和POST请求的区别
1、GET请求请求参数在请求行中,没有请求体。POST请求在请求体中。
2、GET 请求参数有大小限制(4kb),但是POST请求体没有大小限制。
HTTP-响应数据格式
响应数据同样分为三部分。
1、请求行:响应数据的第一行。其中HTTP/1.1表示协议版本。200表示状态码,(服务器告诉浏览器响应的状态是怎么样的,成功或者失败或者别的状态),OK是对状态码的英文描述。
2、响应头:
Content-Type:表示应响应内容的类型,比如text/html/image/jpeg。浏览器知道了响应内容的类型,会自动的选择对应的解析引擎进行解析。
Content-Length:表示应响应数据的长度(字节数)。
Content-Encoding:表示响应压缩算法,告诉浏览器我才用了哪种压缩方式进行压缩数据,浏览器会选择同样的压缩格式来解压缩。
Cache-Control:告诉浏览器该如何缓存数据,例如max-age=300,表示最多可以缓存300秒。第一次访问将数据存储到浏览器本地,第二次再访问的时候,直接读取本地数据。这样可以提高速度。
3、 响应体:
最后一部分,存放响应数据,浏览器解析这些响应数据就可以展示出来一个页面了。
常见的状态码有哪些?
Web服务器
Web服务器是一个应用程序(软件)。
他可以对HTTP协议进行封装,使我们不需要对协议直接操作,让Web开发更为高效快捷。
他可以将web项目部署到服务器中,对外提供网上浏览服务。
Tomcat
它是一个轻量级的Web服务器,支持Servlet/JSP和少量JavaEE(企业开发标准,比如说mybatis,maven之类的),也称之为web容器,servlet容器。
bin目录下存放了一些可执行的文件,其中.bat是windows系统下可执行的文件,.sh是linux系统下可执行的文件。
conf目录下存放了一些配置文件。
lib目录下存放了依赖jar包,Tomcat是使用java语言编写的。
logs目录下存放的日志文件,如果出现500错误我们就需要去查看日志信息。
temp目录运行时产生的临时文件。
webapps目录存放我们需要运行的项目。
work目录下存放项目运行时临时产生的数据。
Tomcat使用java编写的,所以运行时需要jdk的运行环境,如果全局变量出错找不到运行环境,会一闪而过启动失败。
Tomcat部署项目
将项目放到webapps目录下即可完成部署。
一般情况下,我们直接将文件夹打包移动速度会很慢,我们会将项目打包成war包,然后放到webapps目录下,Tomcat会自动完成文件解压。
在IDEA中创建Maven Web项目
创建Web项目方法
1、使用骨架
2、不使用骨架
在IDEA中方便快捷的使用Tomcat
1、通过配置编辑,将Tomcat集成到本地idea。
将Tomcat通过编辑配置部署到本地IDEA环境中。
随后在webapp目录下创建html文件,启动服务器并且输入你的路径就可以访问了。
2、 通过maven导入插件坐标
以这样的方式更加简单高效,访问速度更快。
在pom文件中可以通过<configuration>标签修改一些配置,比如说端口号,比如说项目访问路径。
Servlet
Servlet是java提供的一门动态web资源开发技术。
注:html+css+JSP不同的用户所看到的页面是一样的,Servlet可以让不同用户得到不同的反应结果。
Servlet是JavaEE规范之一,本质上就是一个接口,将来我们需要定义Servlet类并且实现接口,由web服务器运行Servlet。
Servlet快速入门
scope依赖范围必须是provided,在编译环境和测试环境有效,运行环境无效。
web项目里,Tomcat已经提前创建好了Servlet的jar包,如果我们仍在运行范围内打包成jar包存在会产生错误。
Servlet执行流程
我们将web项目发布到服务器上去,浏览器通过url访问servlet。
http://localhost:8080/web-demo/demo1
http://localhost:8080访问到Tomcat服务器。
/web-demo访问到上线的项目。
/demo1访问对应的Servlet。
Servlet由谁创建?Servlet方法由谁调用?
Tomcat自动创建Servlet对象,并且方法也是由Tomcat调用的,调用后就可以给浏览器发送回对应的响应数据。
服务器为什么会知道Servlet中一定有service方法?
我们自定义的Servlet,必须实现Servlet接口并且重写其中的方法。
Servlet生命周期
@WebServlet(urlPattern="/demo",loadOnStartUp=1)
1、负整数:在第一次被访问时创建Servlet对象。
2、0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高。这是因为创建一些Servlet所需要的时间比较长,我们在创建服务器的时候就创建好Servlet对象可以减少用户的等待时间。
getServletConfig()获取Servlet配置对象。
getServletInfo()返回一些版权信息,比如说作者之类的。
Servlet体系结构
用来简化开发。
ServletServlet urlPattern配置
XML配置方式编写Servlet