首先了解到10多年以前上网的时候我们访问的网页大多都是静态网页,里面的资源都是固定写死的,维护起来相当的麻烦。后面我学习了静态网页是用HTML进行编写的。
HTML
HTML也叫做超文本标记语言,其中超文本指的就是可以图片,视频等等。标记指的是其中都是以各种标签进行标记。HTML是由W3C进行规范,现在比较流行的是HTML 5。为了增加网页和用户的互动,我学习了JavaScript技术。
JavaScript
看到这个名字的时候,脑子第一反应这个技术是不是也是由sun公司创造的呢。然而并不是,他是由Netscape公司创造的,由于当时我们Java比较火,他为了蹭热度在最后提交给相关协会的时候改名为JavaScript。谈一谈他是个什么样的语言。
1.他是一中弱类型语言(弱类型和强类型语言(java)有什么区别呢?)
①弱类型不需要给变量指明属于什么类型,统一由var声明,由值决定。这一点和python很像
②强类型必须要指明该变量属于什么类型
2.他是属于直译脚本语言
①代码不需要编译
3.跨平台型
①他可以在任何平台下运行
了解他的一些特性之后,我们重点关注的是其中两个对象
1.BOM(浏览器对象模型)对浏览器进行一系类的操作
2.DOM(文档对象类型)对网页内容进行一系类的操作
当我学了JavaScript了之后,我可以让网页的内容更加的丰富和用户的互动也多起来了,但是始终有个问题我们没有解决,那就是网页中的数据我们依然是在HTML文档中写死了,如果需要更改就要手动进行更改可以说是非常的麻烦了。这里需要说的是以前为了解决这个问题,创造出了CGI(通用网管接口)技术。这个技术可以说是非常的牛批了,可以用任何的语言进行CGI编写,例如C、C++、VB等等。那么现在我们是用CGI技术了吗?等等还不是,CGI有个非常致命的缺陷了,那就是CGI是多进程的。
相当于每次客户端发送一个请求,他都会创建一个进程。这样带来的后果就是处理高并发的时候,直接GG.
这个时候Java提出的解决方案就是Servlet以及Web容器来解决CGI问题。首先我们通过Servlet的底层源码知道了,我们每次发送一个请求的时候Servlet就会创建一个新的线程。我们知道在一个进程当中是可以包含多个线程的,所以当有多个请求的时候我们就会创建多个线程,这样解决了CGI高并发的问题了。
我们解决了这个问题之后学习关于Http协议,首先我们了解一下什么是Http协议。
1.超文本传输协议(Hyper Text Transfer Protocol),所有的WWW文件都必须要遵循这个协议。
2.Http是一个客户端和服务器请求和应答的标准(TCP)
在学到Http协议的时候,就不得不了解一下网络的四层模型(他是由原七层模型简化而来)
现在我们知道所有的WWW文件都要遵循Http制定的协议(其中有2个版本,1.0和1.1版本),所有的浏览器都要遵循这个标准,而我们的Servlet正是有了这个规范,他可以进行解析。现在我们来了解一下Http协议规范是怎么样的吧。
Http协议有四个部分因为请求和响应有所不同。
我们在了解Htpp协议之后再来了解Servlet的API结构(说白了就是Sun公司根据http协议写出来一套规范,让其他的容器厂商根据规范提供Jar包),而Servlet中就是对Http协议解析。
在分析过ServletApi的源码之后我们可以知道其中Servlet接口是其中的核心,ServletConfig可以帮助我们获取全局变量,通常是在web.xml中的配置等。在GenericServleT是实现了两个父接口,他拥有了普通方法。然而真正在解析Htpp协议的是HttpServlet类,也是我们重点关注的类。我们只需要继承这个类就可以对Http协议进行解析,并且调用其中的方法。其中Servlet的一个特点是没有Main方法,这个设计就必须要依赖我们的容器(各种服务器提供对Servlet的支持)
接下来我们需要了解一下容器
如果客户端访问的是静态资源,容器会根据你请求的URL,就会直接得到一个静态HTML,如果是访问的一个Servlet容器就会调用相对于的Servlet,请求调用service方法。然后动态生成一个网页。
其中在学习Request的请求转发和Response的重定向的时候会让我们感到疑惑,两个方法功能比较相似,现在我们来区分一下。
1.Request的请求转发
①首先他是在服务器内资源进行转发
②forward和inculd的区别(只有第二种会包含)
③只有一次请求
2.response.sedRedirect
①是告诉客户端重新发送请求到新的页面
②会有多次请求
③状态码第一次为300-399
④可以访问外部资源