1.WEB概述
web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。
1.1 软件架构
CS结构的软件
CS:Client/Server 客户端和服务器,这种软件往往需要安装。比如QQ、迅雷、播放器。
优点:
可以减轻服务器端压力,将部分代码写到客户端。
界面很美观。
缺点:
一旦服务器更新了,客户端也需要更新。
分布式开发比较弱。
BS结构的软件
BS:Browser/Server 浏览器和服务器,这种软件不需要安装,只需要通过浏览器就可以访问。
优点:
服务器一旦更新,不需要更新客户端,因为客户端就是浏览器
比较强的分布式能力
缺点:
服务器端压力会比较大。
界面效果不如CS结构软件。
1.2 常见web服务器
Tomcat :Apache组织提供的一个开源的免费的web服务器。满足EE的Serlet和JSP的规范。
WebSphere :IBM公司开发的一个收费的大型web服务器。满足了EE开发的所有规范。
WebLogic :BEA公司开发的一个收费的大型web服务器。满足了EE开发的所有规范。
IIS :应用在.NET平台上。
Apache :应用在PHP平台上。
1.3 WEB开发中的资源
静态web资源
- HTML
- CSS
- JS
动态web资源
- Servlet、JSP
- PHP
- ASP
2. HTTP 协议详解
2.1 web 交互的基本流程

客户端根据用户输入的地址信息请求服务器, 服务器在接收到用户的请求后进行处理, 然后将处理结果响应给客户端, 客户端将响应结果展示给用户。
专业术语:
请求: 客户端根据用户地址信息将数据发送给服务器的过程
响应: 服务器将请求的处理结果发送给浏览器的过程
问题:
客户端也就是浏览器的版本是有很多的, 服务器的版本也是有很多的, 如何实现不同版本的浏览器和不同版本的服务器之间的数据交互呢?
解决:
规范浏览器和服务器的数据交互的格式。
实现:
HTTP 协议
2.2、 HTTP 的概念和介绍
概念:
超文本传输协议(Hyper Text Transfer Protocol)
作用:
规范了浏览器和服务器的数据交互
特点:
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快\
- 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由Content-Type 加以标记。
-
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
-
无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。支持 B/S 及 C/S 模式。
HTTP1.1 版本后支持可持续连接
2.3 HTTP 的交互流程:
HTTP 的交互流程一般分为四个步骤(一次完整的请求):
步骤一:
客户端和服务器端建立连接
步骤二:
客户端发送请求数据到服务器端(HTTP 协议)
步骤三:
服务器端接收到请求后, 进行处理, 然后将处理结果响应客户端(HTTP 协议)
步骤四:
关闭客户端和服务器端的连接(HTTP1.1 后不会立即关闭)
2.4 HTTP 协议之请求格式
请求格式的结构:
- 请求头: 请求方式、 请求的地址和 HTTP 协议版本
- 请求行: 消息报头, 一般用来说明客户端要使用的一些附加信息
- 空行: 位于请求行和请求数据之间, 空行是必须的。
- 请求数据: 非必须。

注意: 一张网页的内容是极其丰富的, 浏览器会遵循HTTP 请求的格式将有效数据发送给服务器。
示例(get 请求方式):

示例(post 请求方式):

2.5 HTTP 协议之请求方式
根据 HTTP 标准, HTTP 请求可以使用多种请求方法。
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。
HTTP1.1 新增了五种请求方法: OPTIONS, PUT, DELETE, TRACE 和CONNECT 方法。

get 和 post 请求方式的区别:
get 请求方式:
请求数据会以? 的形式隔开拼接在请求头中, 不安全, 没有请求实体部分。
HTTP 协议虽然没有规定请求数据的大小, 但是浏览器对 URL 的长度是有限制的, 所以 get 请求不能携带大量的数据。
post 请求方式:
请求数据在请求实体中进行发送, 在 URL 中看不到具体的请求数据,安全。 适合数据量大的数据发送。
2.6 HTTP 协议之响应
响应格式的结构:
响应行(状态行): HTTP 版本、 状态码、 状态消息
响应头: 消息报头, 客户端使用的附加信息
空行: 响应头和响应实体之间的, 必须的。
响应实体: 正文, 服务器返回给浏览器的信息
示例:

HTTP 常见响应状态码含义:
HTTP 状态码由三个十进制数字组成, 第一个十进制数字定义了状态码的类型, 后两个数字没有分类的作用。 HTTP 状态码共分为 5 种类型:

常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误, 不能被服务器所理解
401 Unauthorized //请求未经授权, 这个状态代码必须和WWW-Authenticate 报头域一起使用
403 Forbidden //服务器收到请求, 但是拒绝提供服务
404 Not Found //请求资源不存在, eg: 输入了错误的 URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求, 一段时间后可能恢复正常
3. Tomcat 服务器介绍和使用
3.1.服务器的概念和作用:
问题:
学习了 java 编程之后, java 代码的一个很重要的作用就是进行数据的处理, 但是目前来说我们运行编写的代码, 只有一次性, 也就是运行完毕后, 如果需要再次运行则需要再次手动启动代码的执行。 但是我们无法提前用户会何时发送请求, 也就无法决定我们编写的 java 代码应该什么时候启动运行。 而且手动运行也变得不现实。
解决:
那么根据 java 的网络编内容, 我们是不是可以使用代码编写一个容器(对象) 呢? 该容器可以根据用户的请求来启动并运行我们编写的数据逻辑代码。 答案是可以的。
实现:
服务器
解释:
所谓服务器其实就是代码编写的一个可以根据用户请求实时的调用执行对应的逻辑代码的一个容器。 在普通用户看来就是一个安装程序。 我们只需要将服务器在操作系统上进行安装, 并将我们事先编写好的逻辑处理代码根据规则放到服务器的指定位置, 启动服务器, 那么服务器就自动的会根据接收到请求调用并执行对象的逻辑代码进行处理
3.2.Tomcat 服务的下载和安装
下载地址:https://tomcat.apache.org/download-90.cgi
下载选项:

安装:
下载成功后会为压缩包文件, 解压即可使用
注意: 尽量不要解压在中文目录中
目录结构介绍:

启动:


测试Tomcat服务器

3.3 常见问题:
导致Tomcat服务器无法正常启动的原因一般来说就是如下的三个
1、JAVA_HOME环境变量设置问题
要想双击bin目录下的startup.bat文件启动Tomcat服务器,首先要做的就是在windows中设置JAVA_HOME环境变量,因为Tomcat服务器的启动需要用到这个JAVA_HOME环境变量,如果windows中不存在JAVA_HOME环境变量,则Tomcat服务器是无法启动的。
2、端口占用问题
因为Tomcat服务器启动时是需要默认是使用8080端口的,如果这个8080端口被别的应用程序占用了,那么Tomcat服务器就无法正常启动,看到的现象就是"Tomcat服务器启动界面会打印出异常错误信息,然后就自动关闭了",如下图所示

由于这个窗口从启动到关闭的时间非常短,我们很难通过这个窗口看到Tomcat启动时的报错异常信息,因此我们一般只能通过Tomcat服务器的记录的log(日志)信息去查看Tomcat服务器的运行情况。
在Tomcat服务器的根目录下有一个logs文件夹,


日志信息里面清楚的记录了Tomcat服务器的运行情况,如果因为8080端口被占用而无法正常启动,就会记录如上图所示的异常信息,通过查看异常信息,我们就可知道Tomcat服务器为什么不能够正常启动了!
总结:当Tomcat服务器无法正常启动时,首先检查是否配置了JAVA_HOME环境变量,然后再检查Tomcat服务器启动时的端口是否被别的应用程序占用了。
3 控制台乱码
\1. 进入到 Tomcat目录下的conf 目录,打开apache-tomcat-8.5.38\conf\logging.properties 文件
\2. 修改 logging.properties 文件

或者更改为GBK
Tomcat启动乱码及打印日志乱码,应该是和 Windows默认的编码有关。
查询Windows默认编码如下图:
在Windows平台下,Win+R 输入 cmd 进入dos黑窗口,然后在键入:chcp即可。

3.4 Tomcat关闭
双击 bin 目录下的 shutdown.bat 文件关闭 Tomcat 服务器
3.5 Tomcat常用配置
3.5.1. 修改 Tomcat 默认的端口号:
打开 conf 目录下的 server.xml 文件修改端口号

3.5.2.Tomcat 的管理程序
Tomcat 提供了一个管理程序:manager,用于部署到 Tomcat 服务器中的 web 应用程序
要访问 manager web 应用程序,需要添加具有管理员权限的账号,编辑 conf 目录下的 tomcat-users.xml 文件,添加 manager 角色,设置用户名和密码

将tomcat配置到服务列表中:使之随系统的启动而启动
1. 添加服务
① 使用cmd工具,并进入Tomcat根/bin目录
② 执行service install命令
③ 刷新windows服务列表
2. 删除服务
① 使用cmd工具,并进入Tomcat根/bin目录
② 执行service remove命令
③刷新windows服务列表
4.jetty服务器
下载:https://www.eclipse.org/jetty/download.html


目录:

启动:
cmd进入D:\JDE\server\jetty\demo-base>:
java -jar D:\JDE\server\jetty\start.jar

访问:

5.Tomcat与Jetty
Jetty的基本架构:
Jetty 的架构比较简单,核心组件主要是由 Server 和 Handler 组成。其中 Server 的 Handler 是其比较重要的一个数据模型,Jetty 中所有的组件都是基于 Handler 来实现的。

Tomcat的基本架构:
Server是Tomcat的最顶层元素,是service的集合,即可包含多个service,Server控制整个Tomcat的生命周期。Service由一个Container和多个Connector组成(或者说由Connector,Engine和线程池[可选]组成),形成一个独立完整的处理单元,对外提供服务。

Jetty与Tomcat的对比:
- 相同点:
Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。
- 不同点
-
架构比较
- Jetty的架构比Tomcat的更为简单
- Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。
- Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。
-
性能比较
- Jetty和Tomcat性能方面差异不大
- Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。
- Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。
- Jetty默认采用NIO结束在处理I/O请求上更占优势,在处理静态资源时,性能较高少数非常繁忙
- Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。
- Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。
-
其它比较
- Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。
- Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。
5 idea创建WEB应用
5.1 创建web项目
1、打开idea软件,点击界面上的Create New Project

2、进入如下界面。选中 java Enterprise,配置jdk,tomcat,勾选Web Application案例,注意勾选生成web.xml文件


3、指定项目的名称及项目文件的保存地址

4、创建成功

5.2 完善项目结构
5、创建class文件和lib文件夹
点击项目的WEF-INF文件夹 ,右键,New → Directory 创建两个文件夹,classes(用来存放编译后输出的class文件) 和 lib(用于存放第三方jar包)


6、配置classes文件夹路径
File → 选择 Project Structure → 选择 Module → 选择Paths → 选择 “Use module compile output path” -> 将Output path和Test output path都选择刚刚创建的classes文件夹。


7、配置lib文件夹路径
点击Paths旁边的Dependencies 点击右边的”+”号 → 选择”Jars or Directories” ->选择lib → 选择”Jar Directory” 然后一路OK就行了.

选择刚刚创建的lib文件夹


5.3tomcat项目部署
1.配置tomcat点击Run ,选择Edit Configurations.


点击右上角的三角形,运行


tomcat启动控制台乱码
控制台中文乱码:乱码原因: file.encoding跟操作系统默认字符集有关,Windows下默认的是GBK,我们强行 -Dfile.encoding=UTF-8 把系统文件编码格式设置为UTF-8,这就 与gbk冲突了.
5.4 Jetty项目部署



6. WEB程序的基本结构
一个 web 应用程序是由一组 Servlet,HTML 页面,类,以及其它的资源组成的运行在 web 服务器上的完整的应用程序,以一种结构化的有层次的目录形式存在
组成 web 应用程序的这些文件要部署在相应的目录层次中,根目录代表整个 web 应用程序的”根”
通常将 web 应用程序的目录放在 webapps 目录下,在 webapps 目录下的每一个子目录都是一个独立的 web 应用程序,子目录的名字就是 web 应用程序的名字,也就是 web 应用程序的“根”。用户通过 web 应用程序的”根”来访问 web 应用程序中的资源
Servlet 规范中定义了 web 应用程序的目录层次:

几点说明:
**WEB-INF目录下的classes和lib目录都可以存放Java的类文件,在Servlet容器运行时,Web应用程序的类加载器将首先加载classes目录下的,其次才是lib目录下的类。如果这两个目录下存在同名的类,起作用的将是classes目录下的类 **
WEB-INF 是一个特殊的目录(所有字母都要大写)。这个目录并不属于Web应用程序可以访问的上下文路径的一部分,对客户端来说,这个目录是不可见的。但该目录下的内容对于Servlet代码是可见的
本文介绍了Web概述,包括软件架构(CS与BS)、常见Web服务器(如Tomcat、WebSphere、WebLogic等)以及Web开发中的资源。接着深入讲解HTTP协议,包括交互流程、请求方式(GET与POST的区别)和响应。然后讨论了Tomcat服务器的下载、安装、配置以及常见问题。最后提到了Jetty服务器和在IDEA中创建Web应用的基本步骤。
5684

被折叠的 条评论
为什么被折叠?



