Http协议与Tomcat服务器
1. 网络协议包
-
首先,在网络中传递的信息都是以二进制形式存在的。
-
接收方[服务器/浏览器]在接收到信息后的要做的第一件事就是将二进制数据解析成[文字,图片,视频,命令]
-
传递信息数据量往往比较巨大,导致接收方很难在一组连续二进制得到对应数据。
比如:浏览器发送一个请求:http://172.20.33.2:8080/index.html
这个信息以二进制形式发送 01010101010110101
HTTP服务器很难从二进制数据得到相关信息
-
于是就有了网络协议包的出现,它是一组有规律的二进制数据,在这组数据中存在固定的空间,每一个空间专门存放特定信息,这样接收方在接收网络协议包之后就可以到固定空间得到对应信息。极大地降低了接收方对接收到的二进制数据解析的难度。
[0000(ip地址) 0101(端口号) 0000(资源文件名)… ]
2. 常用网络协议
- FTP网络协议包
- Http网络协议包
3. HTTP网络协议包
- 在基于B/S结构下互联网通信过程中,所有在网络中传递信息都是保存在Http网络协议包中。
- 分类:
- Http请求协议包
- Http响应协议包
4. Http请求协议包与Http响应协议包
- Http请求协议包:在浏览器准备发送请求时,负责创建一个Http请求协议包。浏览器将请求信息以二进制形式保存在Http请求协议包各个空间,由浏览器负责将Http请求协议包推送到指定服务端计算机。
- Http响应协议包:Http服务器在定位到被访问的资源文件之后,负责创建一个Http响应协议包。Http服务器将定位文件内容或文件命令以二进制形式写入到Http响应协议包各个空间,由Http服务器负责将Http响应协议包推送回发起请求的浏览器上。
5. Http请求协议包内部空间
-
按照自上而下,分为4个空间
-
空间划分:
-
请求行:[
url:请求地址(http://172.20.33.2:8080/index.html)
method:请求方式(post/get)
]
-
请求头:[
请求参数信息(get方式)
]
-
空白行:[
没有任何内容,起到隔离作用
]
-
请求体:[
请求参数信息(post方式)
]
-
6. Http响应协议包内部结构
-
按照自上而下划分,分为4个空间
-
空间划分:
-
状态行:[
HTTP状态码
]
-
响应头:[
content-type:指定浏览器采用对应编译器,对响应体二进制数据进行解析
]
-
空白行:[
没有任何内容,起到隔离作用
]
-
响应体:[
可能被访问的静态资源文件内容
可能被访问的静态资源文件命令
可能被访问的动态资源文件运行结果
[都是以二进制形式存在]
]
-
7. HTTP服务器
- HTTP服务器是服务器的一种,其行为与HTTP协议有关
- HTTP服务器可以接收来自于浏览器发送的Http请求协议包,并自动对Http请求协议包内容进行解析
- 解析后,自动定位被访问的文件,并将定位的文件内容写入到Http响应协议包中
- 最后,负责将Http响应协议包推送回发起请求的浏览器上
8. Http服务器的分类
-
JBoss服务器
JBoss服务器是由JBoss公司研发的基于J2EE的开源代码的应用服务器。可以在任何商业应用中免费使用。支持EJB1.1、EJB2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/jsp的web容器,一般与tomcat或jetty绑定使用。
-
Glassfish服务器
Glassfish服务器是sun开发一个免费、开源的基于Java EE应用服务器。是SUN公司在未来互联网通信应用领域中的重要服务器,具有轻便的web容器的所有优点,它和tomcat一样是优秀的servlet容器。Glassfish在静态文件传输方面比Tomcat要强的多。未来很有可能代替tomcat服务器。
-
Websphere服务器
Websphere是IBM的公司研发的一个Http服务器。目前主要应用于电子商务应用领域。Websphere可以创建电子商务站点,把应用扩展到联合的移动设备,整合已有的应用并提供自动业务流程。主要安装在Linux系统中,不适合安装在windows系统上。
-
Tomcat服务器
Tomcat是Apache软件基金会中的一个核心项目,由Java技术开发而成。由Apache、Sun共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到完美体现。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了绝大部分软件开发商的认可,成为目前最流行的Http服务器。属于轻量级应用服务器。对于一个初学者来说,可以这样认为,当在一台机器上配置好apache服务器,可利用它响应Html页面的访问请求。从而可以在自己的计算机上模拟B/S结构的互联网通信流程。
9. Tomcat
-
下载安装
随便找一篇博客安装下载即可。
-
Tomcat启动和关闭
-
启动和关闭命令存放位置
tomcat安装位置/bin
- 启动命令:
startup.bat
- 关闭命令:
shutdown.bat
-
-
Tomcat内部工作文件夹作用
-
bin:存放tomcat命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。
-
conf:存放tomcat的一些配置文件
server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码
web.xml可以设置tomcat支持的文件类型
context.xml可以用来配置数据源之类的
tomcat-users.xml用来配置管理tomcat的用户与权限
在Catalina目录下可以设置默认加载的项目
-
lib:主要用来存放tomcat运行需要加载的jar包
-
logs: 用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志。(清空不会对tomcat运行带来影响)
-
temp: 用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响)。
-
webapps: 用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序。可以以文件夹、war包、jar包的形式发布应用。
-
work:用来存放tomcat在运行时的编译后文件,例如JSP编译后的.java和.class文件。一个客户端访问后编译后的文件存放在这,下一个客户端再次访问可以直接返回,不用再次编译程序。清空work目录,然后重启tomcat,可以达到清除缓存的作用。
-
-
模拟互联网通信
- 在Tomcat安装地址/webapps文件夹,创建一个网站[myWeb] (其实就是创建一个myWeb文件夹)
- 将一个静态资源文件添加到网站[xxx.jpg] (将该图片添加到上面创建的文件夹中)
- 启动tomcat
- 启动浏览器,命令浏览器向tomcat索要xxx.jpg
- URL格式:网络协议包://服务端计算机IP地址:Http服务器端口号/网站名/资源文件
- eg:
http://localhost:8080/myWeb/xxx.jpg
-
IDEA配置管理Tomcat
- 首先点击左上角File->settings
- 然后是点击Build,Execution,Deployment->Application Servers
- 点击➕号并找到tomcatserver
- 添加你的tomcat安装路径
-
然后就是下面这个样子,然后点🆗,就绑定到我们的tomcat了
-
再点run下的Edit Configuration
-
点击➕找到我们的tomcat
我们这里用于本地练习,所以选择local的即可。
-
然后给它起名,这里我们就叫Tomcat启动开关把
-
然后选择🆗,我们的tomcat开关就安好了。
-
有两种启动方式,我们在开发的时候一般使用第二种即debug启动,这样子我们可以动态修改被tomcat管理的网站。
- 启动之后用浏览器访问我们刚才试过的url
http://localhost:8080/myWeb/xxx.jpg
,看到了我们上传的图片,代表本次配置成功。
10. IDEA创建网站
- 点击左上角File点击new Module然后选中Java Enterprise,然后勾选WebApplication
- 点击next,然后起名,这里我起名叫第一个正式网站
-
查看文件目录结构,一般只有两个文件夹
目录结构分析:
-
发现IDEA在我们创建web的时候自动帮我们绑定了个Tomcat开关
- 让我们把它删了,用我们之前配好的
- 选择我们之前的tomcat,去绑定我们的项目
- 这个名字太长了,我们直接删吧(其实也可以自己取的,但是一定要/开头)
- 启动,浏览器访问
http://localhost:8080/
,出现下图中情况说明创建并启动成功。
补充:添加jar包的时候在file->project structure下的modules找到我们对应的项目,在dependencies下添加(别忘在web-inf目录下创建一个lib文件夹)。
Java知识回顾
-
重写和重载的区别
-
重写:Java中同一个类文件中出现多个方法名相同,但是参数列表不同的方法的现象称为重载。(个数不同,参数类型不同,参数类型出现顺序不同) 目的是为了让方法在接收不同的参数之后能实现不同的功能。
-
重写:发生在继承过程中,子类对父类方法实现细节进行重新定义
- 重写方法时,子类不能降低方法的访问权限,但可以扩大访问权限。
- 由private或final修饰的方法都不能被重写。
- 重写方法时,抛出异常可以是父类方法抛出异常的全集,子集,空集。
- 重写方法时,可以缩小返回类型范围,但是不能增加返回类型范围。
-
-
throw与throws
-
throws:
-
声明位置:方法名之后
public void test01() throws NullPointerException{ }
-
作用:通知开发人员当前方法在运行时,[有可能]抛出的异常。
-
携带数据:throws后面携带[异常类型],一个throws后面可以携带多个异常类型。
-
调用:当一个方法被throws修饰时,调用方法时必须考虑异常捕捉问题。
-
-
throw:
-
声明位置:方法执行体
public void test01(){ throw new RuntimeException(); }
-
作用:throw是一个命令,执行时抛出一个指定异常对象
-
携带数据:throw后面携带[异常对象],一个throw一次只能携带一个异常对象。
-
调用:当一个方法内部存在throw命令时,可以不用考虑异常捕捉。
-
-
-
接口与抽象类的区别:
-
接口:
- 是一种特殊类文件
- 作用:
- 制定规则
- 降低耦合度
- 使用规则:
- 接口中属性,默认都是静态常量属性
- 接口中的方法都是抽象,如果需要定义具体方法实现,此时方法需要使用default修饰
- 接口中方法访问权限不能是private
- 接口与接口之间可以实现多继承,但是接口之间不能相互实现
- 接口中不存在构造方法
-
抽象类:
- 抽象类由abstract修饰
- 抽象类作用是降低接口实现类与接口之间实现难度
- 抽象类中可以不用实现接口中的方法,由其子类去实现即可
- 使用规则:
- 声明抽象方法,生成具体方法
- 抽象类声明的抽象方法必须由子类进行重写
- 抽象类有构造方法,但是不能用
-