欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb学习笔记(一)—— web基本概念、tomcat、http

程序员文章站 2022-05-09 16:21:57
...

突然发现对网络编程开始感兴趣,趁着双休日时间多来学习一下web相关的知识。预计两周内学完Javaweb,并不断更新学习笔记。所学习的网课是狂神的JavaWeb系列视频。

JavaWeb

1. 基本概念

1.1 前言

web就是一个网页。

  1. 静态web
    • html,css
    • 提供给所有人的数据始终不会发生变化
  2. 动态web
    • 几乎所有网站都是动态web
    • 不同的人在不同时间地点所看到的信息都不同
    • Servlet、JSP等

1.2 web应用程序

web程序:就是提供一个让浏览器可以访问的程序

web程序编写完毕后,若想提供给外界访问,则需要一个服务器来统一管理

1.3 静态web

  • *htm文件和 *html文件

客户端向服务器发送请求Request,服务器的web service 做响应Response

  • 缺点
    • web页面无法动态更新
      • 轮播图
      • js
    • 无法和数据库交互(数据无法持久化,用户无法交互)

1.4 动态web

动态web资源交给 jsp/servlet处理,页面会动态展示,展示效果因人而异

  • 优点

    • 可以与数据库交互
    • 可以动态更新
  • 缺点

    • 加入服务器的动态web一旦发生错误,就需要重新编写后台程序,需要停机维护

2 .web服务器

2.1 常见web服务器

  • IIS

    • 微软;ASP;Windows自带
  • Tomcat

Tomcat 服务器是一个免费的开放源代码的Web
应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP
程序
的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache
服务器,可利用它响应HTML标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache
服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP
页面和Servlet
。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为10.0.5**。**

3. Tomcat

Tomcat 官网

3.1 tomcat启动和关闭

遇到的问题:

  • 安装tomcat后,点开tomcat/bin目录下的start.bat 以后 ,bat窗口一闪而过, 也无法访问

localhost:8080

解决方案:

  • 一闪而过的原因是tomcat启动文件中没有设置jdk路径。
  • 编辑start.bat,在启动文件中添加set “JAVA_HOME=D:\Program Files\Java\jdk-8” ,其中JAVA_HOME就是jdk的路径
  • 编辑shutdown.bat,进行同样的操作

3.2 配置

在conf/server.xml文件中:

  • 可以配置启动的端口号

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    
    • tomcat默认端口号为:8080

    • mysql:3306

    • http:80

    • https:443

  • 可以配置主机名称

    • 默认主机名为:localhost
    • 默认网站应用的存放位置为:webapps
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

思考:如何访问一个网站?

本机中存在host配置文件,目录为C:\Windows\System32\drivers\etc\hosts

  1. 在浏览器中输入域名
  2. 检查本机的hosts配置文件下有没有这个域名映射
    1. 有:直接返回对应的ip地址
    2. 没有:去DNS服务器寻找
  3. 去DNS服务器中寻找,找到就返回,找不到就返回找不到。

3.3 发布一个web网站

  • 在webapps下复制一份root文件夹,删除掉除了WEB_INF以外的所有文件
  • 并新创建一个index.html文件
  • 访问localhost:8080/文件夹名, 即可访问

webapps目录结构

-- webapps
	--ROOT
	--lujintao  :网站的目录名
		--WEB-INF
			--classes :java 程序
			--web.xml
		--index.html  : 默认首页
    	--static
    		--css
    			--style.css
    		--js
    		--img
   		-- ...

4.http

4.1 概念

http(超文本传输协议)是一个简单的请求-响应协议,通常运行于TCP之上。

  • 文本:html、字符串等
  • 超文本:图片、音乐、视频、定位等
  • 默认端口:80

https:安全

  • 443

4.2 http1.0和http2.0

  • http1.0
    • 客户端与web服务器连接后,只能获得一个web资源就要断开连接
  • http2.0
    • 客户端与web服务器连接后,可以获得多个web资源才断开连接

4.3 http请求

  • 客户端 ---- > 发送请求 ---- >服务器

以百度为例,在浏览器中查看网络:

Headers:
General:
	请求 URL: https://www.baidu.com/    	     	 Request URL 
	请求方法: GET						    		Status Method:get方法或post方法
	状态代码: 200 									Status Mode
	远程地址: 36.152.44.95:443						Remote Address
	引用站点策略: strict-origin-when-cross-origin    Referer Policy
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cache-Control: max-age=0
Connection: keep-alive

1.请求行

  • 请求行中的请求方式:get/post
    • GET:请求能够携带的参数比较少,大小有限制,会在浏览器的url地址栏显示数据内容,不安全,但高效
    • POST:请求能够携带的参数无限制,大小无限制,不会在浏览器的url地址栏显示数据内容,安全,但不高效

2.消息头

Accept: text/html : 告诉浏览器所支持的数据类型
Accept-Encoding: gzip, deflate, br : 支持的编码格式
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 : 支持的语言
Cache-Control: max-age=0 : 缓存的控制
Connection: keep-alive : 告诉浏览器请求完成后是断开还是保持连接

4.4 http响应

  • 客户端 <---- 返回响应 <---- 服务器

以百度为例:

Cache-Control: private					缓存控制
Connection: keep-alive					连接
Content-Encoding: gzip					编码
Content-Type: text/html;charset=utf-8	类型

1.响应体

Accept: text/html : 告诉浏览器所支持的数据类型
Accept-Encoding: gzip, deflate, br : 支持的编码格式
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 : 支持的语言
Cache-Control: max-age=0 : 缓存的控制
Connection: keep-alive : 告诉浏览器请求完成后是断开还是保持连接
Reflush:                 设定多久刷新一次
Location                 网页重定位

2.响应状态码

200:请求响应成功

3**:请求重定向

4**:Not Found

5**:服务器代码错误

  • 502 :网关错误