• JavaWeb01: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)(.pictureideaTomcat.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项目,将构建结果写到项目的outartifacts目录下,然后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:WindowsSystem32driversetchosts 添加以下一句话 (重点,不区分带小写)

    127.0.0.1		www.heroc.com
    

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

    在这里插入图片描述

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

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

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

    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>
    
  • 相关阅读:
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xef in position 99: invalid continuation byte
    Java的内存机制
    sort
    ajax()函数传值中文乱码解决方法介绍
    三种实现Ajax的方式
    找到div下的第一个ul
    POI 单元格
    js对字符串进行编码方法总结
    相对路径和绝对路径的区别,java获取项目访问路径的方法
    sql存储过程几个简单例子
  • 原文地址:https://www.cnblogs.com/turbo30/p/13688198.html
Copyright © 2020-2023  润新知