JavaWeb:URI、URL、URN、Http/Https的区别、Web服务器、Tomcat的配置介绍、Http协议、Maven的配置介绍


Java Web 01


一、Web概念

web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。

web应用程序:可以提供浏览器访问的程序。


URI、URL、URN

  1. URI:Uniform Resource Identifier,统一资源标志符 (相当于一个人身份)
  2. URL:Uniform Resource Location,统一资源定位符 (要通过具体地址去找到这个身份的人)
  3. URN: Uniform Resource Name,统一资源名称 (相当于这身份的人的名字)

在这里插入图片描述

举例说明:

URI:北京xxx公司的总经理
URN:北京xxx公司的总经理张三
URL:中国北京市海淀区长安街35号北京xxx公司的总经理张三


Web应用程序组成部分

  • html/css/js
  • jsp、servlet
  • java程序
  • jar包
  • 配置文件 (properties、yaml)

Http / Https 区别

  • HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
  • HTTP协议运行在TCP之上,所有传输的内容都是明文。HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
  • HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。

二、Web服务器

服务器是一个被动的操作,用于处理客户的一些请求和给客户一些响应信息。


1、3个常见技术 ASP、PHP、JSP

ASP:

  • 微软公司的,使用的是C#,国内最早流行
  • 在HTML中嵌入了VB的脚本,ASP + COM
  • 使用ASP开发,因在一个页面中基本上都是大量业务代码,造成页面混乱,后期难以维护,维护成本高
  • 用的服务器是微软自带的服务器IIS(Internet Information Services服务器) 在控制面版,程序于卸载,启用或关闭Windows功能可以开启或关闭

PHP:

  • PHP开发动态页面,开发速度块,功能强大,简单
  • 无法承载大访问量的情况,具有局限性

JSP/Servlet:

  • sun公司(现已被Oracle公司收购)主推的B/S框架
  • 基于Java语言,可承载三高(高并发,高性能,高可用)问题带来的影响
  • 语言类似ASP,易于ASP程序员迁移到 JSP 开发

2、IIS、Tomcat

IIS(Internet Information Services服务器)微软的服务器,是处理Windows自带的服务请求。

Tomcat服务器,Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。


三、Tomcat 详解 (重要)

Tip:工作3~5年可以尝试写Tomcat服务器。


1、Tomcat目录介绍

在这里插入图片描述


2、conf 配置目录

在这里插入图片描述


1)server.xml 核心配置文件

配置文件中有默认的3个端口号

  • 8005:监听关闭服务器的端口号
  • 8080:负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器
  • 8009:负责和其他的HTTP服务器建立连接,在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器

配置内容:

  • 可配置端口号;

  • 可配置存放项目的文件地址,默认wbapps;

  • 可配置host,访问地址,默认localhost(127.0.0.1);

    <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">
    

2)webapps 目录结构

在这里插入图片描述

将项目放如该文件目录下,开启服务器,就可以访问了。

如访问docs:localhost:8080/docs 意思是访问docs目录,如果不指定访问目录,则会自动访问ROOT目录


网站应有的目录结构:

webapps: 
	- ROOT
    - heroC  (网站的目录)
        - WEB-INF
        	- calsses	(java程序)
        	- lib	(web应用依赖的jar包)
        	- web.xml	(网站配置文件)
        - index.html (主页)
        - static (静态文件)
        	- css
        	- js
        	- img

3、项目部署tomcat

在这里插入图片描述

在这里插入图片描述


4、IDEA使用Tomcat部署web项目的过程

在idea中配置的tomcat,在运行时idea不会把项目放到原本tomcat的webapps目录下该路径下,而是复制一份足够的配置文件,到 ${user.home}/.IntelliJIdea/system/tomcat 目录下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X9bLU36y-1592127958843)(.\picture\ideaTomcat.png)]

也就是说每个项目都有属于自己的一份tomcat配置,互不干扰。

每个项目的配置文件夹中有一个 /conf/Catalina/localhost/ROOT.xml 文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="xxx" />

path是指在访问此项目时,是否需要添加额外的路径,如果为空,则直接使用域名或者ip就可以访问到该项目:127.0.0.1;

docBase是指要运行的项目的部署位置,xxx 就是我的项目源代码的位置。

整个项目启动过程就是:

首先maven build项目,将构建结果写到项目的out\artifacts目录下,然后idea复制一份tomcat的配置文件到${user.home}/.IntelliJIdea/system/tomcat中,之后启动tomcat安装目录下的catalina.bat文件,tomcat读取idea复制的配置文件,找到项目位置,然后就运行起来了。


关于服务器面试题

1、在tomcat中能否将localhost域名改成www.heroc.com或其他域名?

如果直接修改Tomcat的conf/server.xml配置文件

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">

将localhost改成www.heroc.com去启动tomcat服务器是不可以访问的,访问会失败。

要去更改window的底层配置文件,将本地地址127.0.0.1别名修改成www.heroc.com才可以通过该域名访问。具体操作如下:

1、conf/server.xml配置文件 (此操作改不改都无所谓,只要系统配置文件,可将地址映射到定义的字符串上)

<Host name="www.heroc.com"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">

2、C:\Windows\System32\drivers\etc\hosts 添加以下一句话 (重点,不区分带小写)

127.0.0.1		www.heroc.com

然后启动Tomcat,就可以通过http://www.heroc.com:8080/ 来访问Tomcat服务器上webapps目录下的网页了(注意清除缓存,再访问)

在这里插入图片描述

2、请谈谈网站是如何进行访问的。

当用户从浏览器中输入一个域名,并点击回车时

1,会先检查本机C:\Windows\System32\drivers\etc\hosts文件中查找是否有该域名的映射,有则解析本机地址,并返回该地址内相关的信息;

2,如果本机hosts配置文件中,没有该域名的映射,那么会去DNS(域名服务系统)中查找是否有该域名,如果有该域名,则会找到该域名的服务地址,进行信息的返回或访问;

3,如果DNS中也没有则直接报错,无该网页

在这里插入图片描述


四、Http协议

HTTP (超文本传输协议) 是一个简单的请求-响应协议,通常用于TCP之上。端口号:80

  • 文本:html,js,css…
  • 超文本:图片,音频,视频…

HTTPS (超文本传输安全协议) 端口号 443


1、Http1.0 、Http1.1主要区别


1)长连接

Http1.0 默认不支持长连接的,每一次请求就会重新连接服务器。如果需要长连接,需要在http头加入"Connection: Keep-Alive"来建立长连接。

Http1.1 通过默认是长连接的。只需要请求一次,就可长时间与服务器建立连接,请求该服务器其他信息,也不会重新建立连接,除非手动断开了于服务器的连接。可通过"Connection: close"来关闭长连接。

HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。


2)节约宽带

HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

另外HTTP1.1还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。


3)Host域

现在可以web server例如tomat,设置虚拟站点是非常常见的,也即是说,web server上的多个虚拟站点可以共享同一个ip和端口。

HTTP1.0是没有host域的,HTTP1.1才支持这个参数。


2、Http1.1、Http2.0 主要区别


1)多路复用

HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。


2)数据压缩

HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。


3)服务器推送

当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。


3、http请求


请求行
Request URL: https://www.baidu.com/
Request Method: GET
Status Code: 200 OK
Remote Address: 39.156.66.18:443
Referrer Policy: no-referrer-when-downgrade

请求行中有请求连接,请求方式,请求状态码等信息

请求方式:GET, POST等

GET:请求能够携带的参数长度有限制,会在浏览器URL地址栏显示请求参数的内容,不安全,但高效

POST:请求能够携带的参数长度无限制,不会再浏览器URL地址栏显示请求参数的内容,安全,但相对于 GET不高效


请求头
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
...

4、http响应

响应头
Bdpagetype: 1
Bdqid: 0xae4e331d00306773
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Fri, 20 Mar 2020 05:19:50 GMT
Expires: Fri, 20 Mar 2020 05:19:22 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=30969_1428_21117_30823_30717; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1584681590277118234612560032610433132403
Transfer-Encoding: chunked
X-Ua-Compatible: IE=Edge,chrome=1

响应状态码(重点)

1xx:信息,请求收到,继续处理;

2xx:成功;200

3xx:重定向;

4xx:客户端错误;404

5xx:服务端错误;500内部服务器错误,502网关错误

在这里插入图片描述


关于http协议问题

1,http1.0,http1.1的区别;http1.1,http2.0的区别

见第四大点的1,2小节

2,当在浏览器输入url地址回车之后,到页面加载完成,经历了什么?


五、Maven


1、配置环境变量

在环境变量中添加:

在这里插入图片描述

在Path中添加:

在这里插入图片描述

此时在,cmd中输入:mvn -version 有版本信息,环境变量就配置好了


2、setting.xml

  • 设置下载的jar包,存储本地的位置:
<localRepository>E:\RepMaven</localRepository>
  • 设置镜像地址(由于maven是国外的,如果直接从maven官网去下载,下载速度极慢):
<mirrors>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

3、Idea设置maven

在这里插入图片描述


4、解决Maven导出资源配置问题 (重点)

标准的Maven项目都会有一个resources目录来存放我们所有的资源配置文件,但是我们往往在项目中不仅仅会把所有的资源配置文件都放在resources中,同时我们也有可能放在项目中的其他位置,那么默认的maven项目构建编译时就不会把我们其他目录下的资源配置文件导出到target目录中,就会导致我们的资源配置文件读取失败,从而导致我们的项目报错出现异常,比如说尤其我们在使用MyBatis框架时,往往Mapper.xml配置文件都会放在dao包中和dao接口类放在一起的,那么执行程序的时候,其中的xml配置文件就一定会读取失败,不会生成到maven的target目录中,所以我们要在项目的pom.xml文件中进行设置,并且我建议大家,每新建一个maven项目,就把该设置导入pom.xml文件中,以防不测!!!

<build>
    <resources>
        
        <resource>
        	<directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    
    </resources>
</build>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值