首页 > 编程语言 >第01章 JavaWeb基础

第01章 JavaWeb基础

时间:2024-04-04 18:04:30浏览次数:29  
标签:01 浏览器 JavaWeb Tomcat 服务器端 基础 请求 服务器 客户端

B/S架构是Brower/Server的缩写,即浏览器/服务器结构。在这种结构中,客户端不需要开发任何用户界面,而是通过浏览器(如IE,Firefox,Chrome,Safari等等)向服务器发送请求,由服务器进行处理后将响应结果返回浏览器,最后浏览器将结果内容展示出来。我们写的JavaWeb程序是在服务器端运行的。

Web应用程序分为两种,一个是静态站点,一个是动态站点。早期的Web应用程序都是静态站点。这些站点使用HTML语言来编写。这种方式下,用户访问的资源是固定不变的。动态站点则是可以根据用户的请求动态生成页面的信息。这种动态站点通常使用HTML语言和动态脚本语言(JSP,ASP,PHP等等)来编写。请注意,客户端浏览器只能识别HTML语言,因此动态脚本语言都是运行在服务器端的,这些动态语言可以控制输出HTML内容。HTML是标签语言,主要用来展示文本,图片等信息,不像我们学习的Java语言那样具有强大的逻辑处理能力。在我们日常开发中,HTML语言通常称之为前端技术,而Java语言称之为后端技术。HTML语言主要展示网页页面,而Java语言主要处理用户提交的数据,它经常和数据库打交道。

B/S架构的核心就是HTTP协议。HTTP 协议一般指的是超文本传输协议,它是基于 TCP/IP 通信协议来传递数据的。也就是浏览器与服务器之间的数据通信。HTTP协议默认端口号为80,HTTPS协议默认端口是443。两者协议的区别在于HTTPS是采用加密方式来传输通信数据的。

客户端浏览器与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的响应后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到服务器面向的是网络中成千上万个用户,因此服务器不会让一个连接长时间占有服务器的资源,及时地释放连接可以大大提高服务器的执行效率。服务器端能同时处理大量的请求连接,称之为高并发处理,它是服务器的最重要的性能指标之一。

HTTP是一种无状态协议,即服务器不保留与客户交互时的任何状态信息。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。如何让服务器能够识别不同的客户端,就需要使用Cookie和Session技术来解决。它的原理就是第一次访问服务器的时候,返回客户端一个唯一的字符串标示sessionid,并要求客户端再随后的访问中始终携带这个唯一标示。请注意,这个唯一标示是有时间限制的,它并不是始终有效。如果失效后再次访问,标示会改变。Session是服务器端的存储,Cookie则是客户端浏览器的存储。字符串标示sessionid就像一把钥匙,所有用户的数据被锁在Session里面,客户端浏览器凭借本地存储的钥匙就能被服务器端正确识别,服务器端可以根据这把钥匙,找到属于该客户端的session存储空间,里面存储了只属于该客户端自己的信息。举个例子,我们使用自己的账号登录服务器的时候,服务器上面的页面能够正确显示我们每一个人的信息,就是使用了session技术。

要理解HTTP协议就必须简单了解一下 HTTP Header头信息,它分为请求头和响应头。
以下是请求头 Request Headers 的信息:

请求头中的内容很多,例如下

Accept 表示客户端的文档类型
Accept-Encoding 表示客户端的压缩编码
Accept-Language 表示客户端的语言
Cache-Control 表示客户端的缓存设置
Connection 表示当前连接是否保持
Cookie 表示客户端的Cookie存储信息
Host 表示请求服务器主机
User-Agent 表示客户端信息:操作系统,浏览器等等
......

以下是响应头 Response Headers 的信息:

Server 表示服务器端的WebServer(例如:Tomcat)
Context-Type 表示服务器端返回的文档类型(例如:text/html)
Context-Encoding 表示服务器端返回的内容是否压缩编码
Context-Language 表示服务器端返回的内容的语言
Context-Length 表示服务器端返回的内容的长度(字节)
Keep-Alive 表示服务器端连接时间
......

当浏览器访问服务器时候,浏览器接收一个HTTP 状态码( Status Code)

常见的 HTTP 状态码

200 客户端请求成功
302 页面跳转
400 客户端错误
403 服务器端拒绝服务
404 请求服务器端资源不存在
500 服务器端发生的错误

这里介绍一下浏览器缓存机制。浏览器会对服务器静态资源(html, css, img, js等等)进行本地缓存,这样是为了减少对重复服务器资源的请求,也就是减少服务器端的请求压力。但是,如果服务器端更新之后,可能会造成与本地浏览器不一致的情况发生,解决缓存的办法就是按 Ctrl + F5 强制刷新浏览器。当我们使用 Ctrl + F5 重新请求服务器资源的时候,会在请求头中增加一些信息,告诉服务器我们要获取最新的数据而不是缓存。这些信息如下:Cache-Control:no-cache 。另外,服务器端也可以设置资源的有效时间来解决两端数据不一致的问题,通过 Expires 字段来实现,它的值是一个时间,超过这个时间后,缓存的内容将失效,需要重新向服务器发起请求。这种方式会有一个时间差的问题,能不能在服务器端更新内容之后马上通知客户端浏览器更新呢?答案是不能。因为B/S架构的本质是客户端主动请求服务器,这种请求连接不会持久性的保存,因此服务器没有办法通过这个连接主动通知客户端更新本地数据。有一种解决方式,就是客户端按照固定时间(例如5秒钟)轮询请求服务器,来模拟持久性的连接,这样服务器就会在“最短时间”内及时通知客户端更新数据。但是,这样做无形之中会增加服务器端的访问压力。 从HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议WebSocket 。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

接下来,我们介绍Java Web运行环境。我们之前写的 Java 程序直接运行在本地的 JVM 上,那么Web程序也是运行在JVM上面吗?在解释这个问题之前,我们还需要再回到 B/S 架构中的两个角色,一个是客户端浏览器,一个是服务器端。实际的客户端浏览器应该是很多个,而服务器端只有一个,属于一对多的关系。客户端浏览器运行的是HTML内容,该内容里面可以包含文字,图片,视频等等。这些内容是由服务器端Web程序发送给客户端浏览器的,这个过程首先是由客户端浏览器发起请求,服务器端接受对应的请求后就会发送相应的HTML内容,这个过程的数据传输就是通过HTTP协议来完成的。如何处理请求并返回HTML内容是我们开发人员要做的事情,不同的请求通过不同的URL来区别。

请求URL就是一个字符串网址,例如 “http://www.xxx.com/” 就是一个请求URL,"http://www.xxx/com/login" 则是另一个请求。大家可能注意到了,这个请求URL其实就是由服务器的域名+不同的路径参数组成的。域名就不用解释了,它代表了服务器的IP地址,而后面的路径参数则是有特殊意义的,它代表了我们要访问不同的服务器端业务资源。当然,这个请求URL中还可以附带一些用户数据等等。

客户端浏览器与服务器端数据通信涉及到两个问题?第一,谁来接受请求并返回响应(实现HTTP协议)?第二,我们使用Java代码如何来获取请求数据并返回HTML内容?很显然,JVM不能解决我们这两个问题,所以我们需要借助其他软件来实现。现在很多服务器端都会使用Apache或者Nginx来提供Web服务,它们都可以实现HTTP协议。但是,这两款软件本身只能处理静态HTML内容,不能运行Java Web程序。如果想要运行Java Web程序的话,我们需要使用 Tomcat 这款软件。注意,我们除了在服务器端安装 Tomcat 之外,仍然需要安装 JDK,因为Tomcat仍然是将运行java程序的工作交给JVM来执行的。好的,第一个问题解决了,需要使用 Tomcat 来实现。第二个问题,我们如何使用Java代码来获取请求数据并返回HTML内容,我们之前的Java基础课程中并没有介绍相关的API。那是因为,标准JDK中没有提供Web方面的API。在已安装的Tomcat中提供了 ”servlet-api.jar 和 jsp-api.jar“ 两个库文件,它可以帮助我们来处理请求和返回响应。由此可见,我们上面遇到的两个问题都可以由Tomcat来帮我们解决。因此,我们要想开发JavaWeb程序的话,就需要安装 JDK 和 Tomcat。如何安装JDK和Tomcat请参考第15章 Tomcat安装

Tomcat是由Apache软件基金会下属的一个开源项目,它不仅仅是一个HTTP服务器,还是一个Servlet服务器(通常称之为Servlet容器)。安装完毕后,我们可以通过浏览器访问:http://localhost:8080/ 来查看Tomcat给我们准备的一个默认的JavaWeb项目,该项目位于“webapps\ROOT”下。

在这个目录下存放了我们之前放置的几个“jsp”文件,还有其他一些图片之类的文件。普通的java程序是执行包含main方法的编译后的class文件,而这里的jsp文件并不是class文件,但是它却可以在tomcat下运行。Jsp文件可以理解成java代码和html标签混合的网页文件,它由tomcat解析并运行。由于javaweb程序是根据请求来触发服务器端的java代码(比如jsp文件),因此它不必包含main方法。我们注意到有一个“WEB-INF”,

这个是javaweb项目特有的目录,里面存着一个“web.xml”文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1"
  metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>Welcome to Tomcat</description>

</web-app>

这是一个xml配置文件,根节点为<web-app>代表当前的web应用,子节点<display-name>代表当前项目名称,而<description>节点代表当前项目描述。这个文件非常重要。当我们访问“http://127.0.0.1:8080/”的时候,实际上访问的是“http://127.0.0.1:8080/index.jsp”,也就是“index.jsp”文件,本身“index”就是索引,目录的含义,也就是默认首页。如果我们打开这个“index.jsp”文件的话,就能看到里面包含了html标签和java代码。

标签:01,浏览器,JavaWeb,Tomcat,服务器端,基础,请求,服务器,客户端
From: https://blog.csdn.net/richieandndsc/article/details/137245186

相关文章

  • Java登陆第三十七天——VUE3响应式基础、条件渲染、列表渲染
    响应式数据什么是响应式数据? 当数据发生改变时,DOM树的内容,会和数据同步更新。 vue3不是自动响应式数据,需要经过函数处理得到响应式数据对象。ref和reactive这两个函数都会返回响应式数据对象,但也有不同。refref通常用于将一个基本类型转为响应式数据对象。基本类型包括:数......
  • Vue基础知识:声明式导航---导航链接router-link,router-link是什么,怎么用?router-link-ac
    router-link是什么?vue-router提供的一个全局组件,router-link(用于取代a标签)router-link怎么用?router-link的好处?1.能够跳转,能高亮(自带激活时的类名)1.能跳转,配置to属性指定路径(必须)。本质还是a标签,to不需要多加#既然已经有了a标签,为什么还有加一个router-link标签呢?......
  • QT基础(B站自学笔记)
    1.程序运行原理#include"mainwindow.h"#include<QApplication>intmain(intargc,char*argv[]){QApplicationa(argc,argv);MainWindoww;//创建窗口对象ww.show();//显示窗口returna.exec();//进入事件循环}2.QOBJECT宏#ifndef......
  • 《0 基础小白如何逆袭进入 IT 行业,实现人生的华丽转身》
    在当今数字化的时代,IT行业正以惊人的速度发展,成为了许多人向往的职业领域。对于那些没有相关基础的人来说,想要进入这个充满机遇的行业,可能会感到困惑和不知所措。但是,只要有正确的方法和坚定的决心,0基础也能成功踏入IT行业。首先,明确目标是成功的第一步。你需要确定自......
  • Java游戏开发基础:从零开始搭建自己的游戏之《人生重开模拟器》简易版
    一、引言人生重开模拟器游戏是一种虚拟角色扮演游戏,玩家通过控制一个虚构的角色,体验与现实生活中不同的选择和结果。玩家的决策将影响角色的生活轨迹,包括他们的职业生涯、社交关系、健康和财富等方面。游戏的乐趣在于提供了一个虚拟的沙盒环境,玩家可以尝试不同的生活选择,而......
  • 《0 基础进军软件开发行业:开启科技之旅的热点指南》
    在当今数字化的时代,软件开发行业正蓬勃发展,吸引着众多渴望进入这个充满机遇的领域的人们。即使你是0基础,也不必望而却步。本文将为你提供一份全面的指南,帮助你迈出进入软件开发行业的第一步。一、明确目标与兴趣在进入软件开发领域之前,首先要明确自己的目标和兴趣。软件......
  • 代码随想录算法训练营第二十一天| 530. 二叉搜索树的最小绝对差 501. 二叉搜索树中的
    530.二叉搜索树的最小绝对差https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/TreeNodepre=null;intres=Integer.MAX_VALUE;publicintgetMinimumDifference(TreeNoderoot){if(root==null)return0;pr......
  • 华为ENSP AC+AP二层漫游基础实验配置
    无线漫游是一种能让你的设备在移动过程中保持不间断网络连接的技术。配置流程:AC创建vlan200201,vlan200用于管理,给AP下发IP地址,vlan201用于业务给终端下发IP地址AC和SW1全部接口配置为Trunk,并且SW1的G0/0/3口和G0/0/2口需要加上PVIDAC上配置ssid模板、security模板、vap......
  • 由于JavaScript有两种方式两种写法Creating a regular expression,在线测试网站https:/
    constre=/ab+c/;constre=newRegExp("ab+c");如果要使用第二种方式需要改变flavor和delimiters  RegExp比//需要额外的一次转义可以点击CodeGenerator查看   delimiters的不同会影响所需要的转义......
  • P4577 [FJOI2018] 领导集团问题
    P4577[FJOI2018]领导集团问题整体dp先将权值离散化到\([1,m]\)。考虑朴素的树形dp,设\(f_{u,i}\)表示在\(u\)子树中选了若干点,点权都\(\gei\)的最大点集。转移分为是否选\(u\)点:不选\(u\)点,对于\(i\in[1,m]\),\(f_{u,i}=\sumf_{v,i}\)选\(u\)点,对于\(i\i......