初识javaweb

编程知识 更新时间:2023-05-03 01:25:11

javaweb,顾名思义,分为java和web,而web又包括前端和数据库

1.基本概念

1.1前言

web开发:

-----web,网页的意思,表示我们可以从互联网上拿到一定的资源。

例如打开网址www.baidu所链接的页面是一个web页面,如下图所示:

----静态web(html静态资源,css)提供给所有人看的数据始终不会发生变化

----动态web(提供给所有人看的数据会发生变化!每个人在不同的时间,不同的地点看到的信息各不相同。)

..........淘宝,几乎是所有的网站都是动态web,除了官网首页是静态web.(动态web在淘宝上深有体会)几乎是所有的网站各自都有一个独属于自己的账号,一旦能登录就是动态web.

..........动态web技术栈:Servlet/JSP,ASP,PHP。

在java中,动态web资源开发的技术统称为javaweb.

用java来开发一个提供给所有人看的数据在不同的时间,不同的地点看到的信息各不相同的网站。

1.2web应用程序

什么是程序:按照一定规矩(自己编写的代码的逻辑)去执行一系列的动作。

web应用程序:可以提供浏览器访问的程序。而以前提供dos命令访问的程序(CS架构)

a.html、b.html.....一系列网站即多个web资源整合起来,这些web资源可以被外界访问,对外界提供服务。

首先我们利用百度来进行示例如下:

我们访问www.baidu一个网站,我们实际访问了一个静态页面。

我们在该页面点击右键,选择查看网页源代码。示例如下所示:

 可知这是一个静态web.

我们在访问的百度界面的网址后面加一个index.html,这是隐藏的,仍然可以访问到。

这个页面就是相当于在baidu这个服务器上放置了一个html,可以让我们访问到。

而让外界访问到本机电脑也是可以的,只要把防火墙打开即可。

 我们还可以在这个网址上进行添加80端口。

而我们是否可以知道这个到底是在哪里呢,毫无疑问,我们可以知道,我们可以通过cmd进行获取它的IP地址。

获取真实的IP,一个物理IP对应一台真实的电脑。 

         例如,www,baidu,com这个网址访问到的电脑即服务器端的电脑开放了80端口,网址的后缀为index.html,即为这个网页的首页索引页,如果明确说明了即改为home.html,我们则显示home.html,否则则默认为index.html,我们访问到这个服务器端口后,找到该服务器里面的对应的网页文件后,进行一次响应的时候,我们访问的是80端口,我们将信息传回的过程中,通过80端口,我们可以知道是要我们本机正在发送访问请求的浏览器来打开接收到的文件信息。从而浏览器打开所接收到的网页信息。

什么是端口:

         端口是计算机与外界通讯交流的出口。联网的计算机间要相互通信就必须具有同一种协议。协议就是计算机通信的语言,Internet的通用语言是TCP/IP(是一组协议),它规定在网络的第四层——运输层有两种协议TCP、UDP。端口就是为这两个协议打开的通道。其中硬件领域的端口又称接口。软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。

        端口(port)对硬件设备来讲可以是USB端口、COM串行端口或交换机、路由器设备的对外连接端口。而对软件来讲端口是通信协议之间的接口,其定义了 UNIX或WINDOWS NT系统的所提供的服务。本地系统会为所提供的服务进程分配相应的端口号,也就是协议端口号。
        协议端口号用正整数标识,范围在0到65535之间。0-1023之间的端口为知名端口,这些端口一般固定分配给一些服务,比如21端口分配给FTP服 务,23端口分配给TELNET,80端口分配给HTTP服务;而1024到65535之间的端口为动态分配端口,这些端口一般不固定分配给某个服务,也 就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用,在关闭程序进程后,就 会释放所占用的端口号。
        根据TCP/IP协议,端口又分为TCP端口和UDP端口两种:TCP端口和UDP端口
        TCP端口,即传输控制协议端口,是面向连接的服务端口,需要在客户端和服务器之间建立连接,以提供可靠的数据传输。常见的如FTP服务的21端 口,Telnet服务的23端口,SMTP服务的25端口等等。
        UDP端口,即用户数据包协议端口,是面向非连接的服务端口,无需在客户端和服务器之间建立连接。常见的如DNS服务的53端口,TFTP服务的69端 口,QQ使用的8000和4000端口,SIP使用的5060端口等等。

        对于端口来说,通俗的解释如下所示:一个东西要发送到你的电脑上,但你电脑上同时运行了很多程序 ,比如一个qq,一个ie,如果只靠ip的话,那那个发送的东西只知道发送到这个机器,但不知道到了机器上要给哪个程序来接受解释他,这就是为什么要有端口,你可以把它想象成是标记某一个程序的序号,发过来的东西如果里面都会有个本东西对应的端口号,如果这个东西里面的号码是80那他就直接送往ie,如果他是……那他就送往……;

端口号详解:HTTP:80端口:www服务。
DHCP:服务器端的端口号是67
DHCP:客户机端的端口号是68

计算机端口号总数:65535,一般用到的是1~65535,0一般不使用

0-1023: 系统端口,也叫公认端口,这些端口只有系统特许的进程才能使用;
1024~65535为用户端口:
1024-5000: 临时端口,一般的应用程序使用1024到4999来进行通讯;
5001-65535:服务器(非特权)端口,用来给用户自定义端口。

具体常用端口号如下:

1.   8080端口  端口说明:8080端口同80端口,是被用于WWW代理服务的,可以实现网页浏览,经常在访问某个网站或使用代理服务器的时候,会加上“:8080”端口号

2、1080端口  端口说明:1080端口是Socks代理服务使用的端口,大家平时上网使用的WWW服务使用的是HTTP协议的代理服务。

3、80端口  端口说明:80端口是为HTTP(HyperText Transport Protocol,超文本传输协议)开放的。

4、23端口  端口说明:23端口主要用于Telnet(远程登录)服务。

5、21端口:
端口说明:21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务。

查看本机电脑有哪些端口正在使用,我们在命令提示符里面输入netstat -an,回车即可。

端口的状态:

1、LISTENING状态
  FTP服务启动后首先处于侦听(LISTENING)状态。

2、ESTABLISHED状态
  ESTABLISHED的意思是建立连接。表示两台机器正在通信。

3、CLOSE_WAIT

    对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭

4、TIME_WAIT

    我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。

    目前有一种避免TIME_WAIT资源浪费的方法,就是关闭socket的LINGER选项。但这种做法是TCP协议不推荐使用的,在某些情况下这个操作可能会带来错误。

 我们通过cmd进行ping www.baidu的时候,我们获取的IP为39.156.66.18,这个物理IP所对应的电脑网址里面默认开放了80端口,同时还有默认的index.html,找到该网页的索引页。

 甚至里面还有一些webapps文件夹,甚至中间还有很多负载均衡的服务器,让我们去跳包

什么是负载均衡

实现对大量用户访问请求进行调度分配
实现对大量用户访问得压力分担
当大量用户在短时间内访问网站时,一台web服务器是无法快速处理这些请求的,甚至有可能会宕机。所以就需要负载均衡对用户请求进行调度,把请求分配给web集群中的各台web服务器。这样每台web服务器处理的请求就少了,就可以快速响应客户的请求。

私网IP地址,那么多台电脑的IP地址均不一样;如果说公网IP地址,那么多台电脑的IP地址会被路由器NAT成同一个IP地址进行上网,所以 一个IP地址下面可能有很多电脑。我们的下载IP就一个,所有人都能用是因为中间加了很多交换机。

 我们所能访问到的网站一定存在一个真实的文件存在这个网络上。

我们能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上。

对外提供了URL:统一资源定位符。URL的一般格式由通信协议名、主机名、TCP端口号、目录名和文件名五部分组成,其格式为:

协议://主机名:端口号/路径/文件名

例如:http://www.ncut.edu:80/cic/advice/index.html

我们通过这个资源,可以访问到这台电脑上的某一个东西。

这些统一的web资源,会被放在同一个文件夹下。

(比如Tomcat里面有几个文件夹,比如root,document等一个一个文档,所以打开8080可以访问到他们的主页,这其实就是一个网站。

这些所有的文件,放到文件夹下面后,就是一个web应用程序---》这些程序启动依赖于Tomcat:服务器。

一个web应用由多部分组成(静态web、动态web)

html、css、js

jsp、servlet

java程序

jar包(

一、什么是jar包

jar包就是 Java Archive File,顾名思义,它的应用是与 Java 息息相关的,是 Java 的一种文档格式,是一种与平台无关的文件格式,可将多个文件合成一个文件。jar 包与 zip 包非常相似——准确地说,它就是 zip 包,所以叫它文件包。jar 与 zip 唯一的区别就是在 jar 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,该文件是在生成 jar 文件的时候自动创建的,作为jar里面的"详情单",包含了该Jar包的版本、创建人和类搜索路径Class-Path等信息,当然如果是可执行Jar包,会包含Main-Class属性,表明Main方法入口,尤其是较为重要的Class-Path和Main-Class。

此外,值得注意的是,因为jar包主要是对class文件进行打包,而java编译生成的class文件是平台无关的,这就意味着jar包是跨平台的,所以不必关心涉及具体平台的问题。说到jar里面的文件,咱们来看看最普通的一个带有静态页面的springboot项目jar里面的内容,就会发现解压出来的jar并不简单,为了贴近实际咱们未做任何删减,可以看到有很多东西

只需要运行如下指令,就能看到jar里面的内容(调用jar指令的前提是已经配置了jdk的环境变量)

jar -tf springbootdemo-0.0.1-SNAPSHOT.jar

其中-tf 后接的jar就是我们要查看的jar。

大致看看里面的东西我们可以发现,除了.MF以及.class文件之外,jar还能打包静态资源文件如.html、.css以及.js等项目所需的一切,这也就意味着咱们能将自己的项目打成jar,即不管是web应用还是底层框架,都能打成jar包。

有的jar包是可以直接通过 java -jar 指令来执行的。我们都知道,有的类之所以能够执行,是因为它用你有main函数,该函数是程序的入口,同理,可执行的jar包中肯定是有某个.class文件提供了main函数才使得其可执行。那么问题来了,一个jar里面可能存在多个.class文件都有main函数的情况,我怎么知道该执行哪个?其实答案非常简单,就是看前面说的MANIFEST.MF里面的Main-Class属性,它会指定函数入口。

二、为什么要使用jar包

当我们开发了一个程序以后,程序中有很多的类,如果需要提供给别人使用,发给对方一大堆源文件是非常不好的,因此通常需要把这些类以及相关的资源文件打包成一个 jar 包,把这个 jar 包提供给别人使用,同时提供给使用者清晰的文档。这样他人在拿到我们提供的jar之后,就能方便地进行调用。而且安全。能够对JAR文件进行数字签名,只让能够识别数字签名的用户使用里面的东西。

因此,建议大家在平时写代码搬砖的时候,注意把自己代码的通用部分抽离出来,主键积累一些通用的util类,将其逐渐模块化,最后打成jar包供自己在别的项目或者模块中使用,同时不断打磨jar里面的内容,将其做得越来越容易理解和通用,这样的好处是除了会对你的代码重构能力以及模块抽象能力有很好的帮助之外,更是一种从长期解放你的重复工作量,让你有更多的精力去做其他事情的方式,甚至当你抽象出业内足够通用的jar之后,jar包还能为你带来意想不到的利润(当然公司里该保密的东西还是得保密的)。这也是java发展得如此之好的原因,无论出于盈利或者非盈利的目的,将自己的通用工具或者框架抽取出来,打成jar包供他人调用,使得整个java生态圈变得越来越强大–几乎很多业务场景都能找到对应的jar包。

配置文件(Properties属性   load和get属性

Properties(Java.util.Properties),该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常改变的,为了方便用户的配置,能让用户够脱离程序本身去修改相关的变量设置。就像在Java中,其配置文件常为.properties文件,是以键值对的形式进行参数配置的。

实现的所有接口 Serializable , Cloneable , Map<Object,​Object>
已知直接子类: Provider

构造器

Properties() 创建一个没有默认值的空属性列表。 Properties​(int initialCapacity)
创建一个没有默认值的空属性列表,并且初始大小容纳指定数量的元素,而无需动态调整大小。 Properties​(Properties
defaults) 创建具有指定默认值的空属性列表。

常用方法

getProperty(String key) 在此属性列表中搜索具有指定键的属性。如果在此属性列表中找不到该键,则会检查默认属性列表及其默认值(递归)。如果未找到该属性,则该方法返回默认值参数。
list(PrintStream out) 将此属性列表打印到指定的输出流。此方法对于调试很有用。
load(InputStream inStream) 从输入字节流中读取属性列表(键和元素对)。输入流采用加载(Reader)中指定的简单的面向行的格式,并假定使用ISO 8859-1字符编码;即每个字节是一个Latin1字符。不在Latin1中的字符和某些特殊字符在使用Unicode转义符的键和元素中表示。 此方法返回后,指定的流仍保持打开状态。
setProperty(String key, String value) 调用 Hashtable 的方法 put 。他通过调用基类的put方法来设置 键值对。
store(OutputStream out, String comments) 将此Properties表中的此属性列表(键和元素对)以适合使用load(InputStream)方法加载到Properties表的格式写入输出流。 此Properties方法不会写出此Properties表的defaults表中的属性(如果有)。
storeToXML(OutputStream os, String comment, String encoding) 使用指定的编码发出表示此表中包含的所有属性的XML文档。
clear() 清除此哈希表,使其不包含任何键。
stringPropertyNames() 返回此属性列表中的一组键,其中键及其对应的值是字符串,如果尚未从主属性列表中找到相同名称的键,则包括默认属性列表中的不同键。键或键不是String类型的属性将被省略

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

1.3静态web

*.html,*.htm,这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接读取,通过网络。

我们通过具体使用一个百度来进行了解:

我们使用谷歌浏览器,打开开发者工具之后。

我们将网站www.baidu进行输入,回车之后,我们来进行查看

进行跳转之后,我们找到www.baidu

我们点击顶部的network,然后点击Headers,我们发现会出现好多信息,在Headers里面,有

 

(1)General,里面包含请求的URL(Request URL),所请求的方式为GET,请求方式包含get与post
还有远程主机的地址,即为39.156.66.14,不需要通过ping的方式也可以看到。同时https走的是443端口。http走的是80端口。

(2)Response Headers(响应)

(3)Request Headers(请求)

 对于里面的信息来说,有下面的访问与响应的过程。

 https走的是443端口

http走的是80端口

说到 get 请求和 post 请求,就不得不提 HTTP 协议,因为浏览器和服务器的交互是通过 HTTP 协议执行的,而 get 请求和 post 请求也是 HTTP 协议中的两种方法
 
HTTP全称为Hyper Text Transfer Protocol,中文翻译为超文本传输协议,目的是保证浏览器与服务器之间的通信。
HTTP的工作方式是客户端与服务器之间的请求-应答协议。
 
HTTP协议中定义了浏览器和服务器进行交互的不同方法,基本方法有4种,分别是GET,POST,PUT,DELETE。这四种方法可以理解为,对服务器资源的 查,增,改,删。
 
GET:GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。
 
POST:POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。
 
PUT:PUT请求是向服务器端发送数据的(与GET不同)从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。
 
DELETE:顾名思义,DELETE请求就是删除服务器数据的过程。

get请求和post请求的区别:

(1)最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

GET和POST是什么?HTTP协议中的两种发送请求的方法。

HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。 

在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

在我大万维网世界中,还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。 虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。

(2)GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

1. GET与POST都有自己的语义,不能随便混用。

2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

除了这两个非常重要的区别之外,我们还有如下区别:

1.get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
2.get将表单中数据按照name=value的形式,添加到action 所指向的URL(URL是一种特殊类型的统一资源定位符,用于确定网络中具体资源的位置) 后面,并且两者使用”?”连接,而各个变量之间使用”&”连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
3.get传输的数据要受到URL长度限制(最大长度是 2048 个字符);而post可以传输大量的数据,上传文件通常要使用post方式;
4.使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;
5.get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是”%20”。
ps:GET方式提交表单的典型应用是搜索引擎。GET方式就是被设计为查询用的。

6.(1)GET在浏览器回退时是无害的,而POST会再次提交请求。

(2)GET产生的URL地址可以被Bookmark,而POST不可以。

(3)GET请求会被浏览器主动cache,而POST不会,除非手动设置。

(4)GET请求只能进行url编码,而POST支持多种编码方式。

(5)GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

(6)GET请求在URL中传送的参数是有长度限制的,而POST么有。

(7)对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

(8)GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

(9)GET参数通过URL传递,POST放在Request body中。

静态web存在的缺点:

1.web页面无法动态更新,所有用户看到都是同一个页面

2.它无法和数据库交互(数据无法持久化,用户无法交互)

让静态页面动起来的技术:

JavaScript(实际开发中,它用的最多)

轮播图:让它有点击特效,我们做了一个伪动态。伪动态通过JavaScript来实现。

VBScript:微软所用的软件。

1.4动态web

页面会动态展示:“web的页面展示的效果因人而异”

缺点:假如服务器的动态web资源出现了错误,我们需要重新编写我们的后台程序,(客户端叫前台)重新发布,

在以前重新发布网站叫做停机维护。

优点:web页面可以动态更新,所有用户看到都不是同一个页面

它可以与数据库进行交互(数据持久化:注册用户,商品信息,用户信息)

其中的web Server Plugin是一个服务的插件,起到一个过滤请求的作用,带有垃圾或病毒的请求是不允许进来的,动态资源和静态资源分别是两条不一样的路。静态资源去文件系统里面进行搜索,拿到之后通过webServer进行响应请求‘。而动态资源可以通过JDBC进行与数据库的交互。

更多推荐

初识javaweb

本文发布于:2023-04-29 20:52:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/38c2bd3d559e5fd285ce931e39173666.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:javaweb

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 112200文章数
  • 28543阅读数
  • 0评论数