目录
一、Web与Web服务器简介
1.1Web概述
Internet上供外界访问的Web资源分为:
- 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。
- 技术:html
- 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。
- 技术:JSP/Servlet、ASP、PHP等
在Java中,动态web资源开发技术统称为Javaweb。
1.2服务器简介
学习web开发,需要先安装一台web服务器,然后再在web服务器中开发相应的web资源,供用户使用浏览器访问。
常见的web服务器如下:
- WebLogic:BEA公司的产品,是目前应用最广泛的Web服务器,支持JavaEE规范,而且不断的完善以适应新的开发要求
- WebSphereAS:IBM公司的产品,支持JavaEE规范(13种核心规范,包括Servlet/JSP、JDBC、JNDI、JTP、XML等)
- JBoss:是一个基于JavaEE的开放源代码的应用服务器
- Tomcat:是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器。是在SUN公司推出的小型Servlet/JSP调试工具的基础上发展起来的一个优秀的Servlet容器,Tomcat本身完全用Java语言编写。
接下来我们以Tomcat为例进行JavaWeb的学习。
二、Tomcat
2.1Tomcat服务器的安装与启动
安装教程参考:https://blog.csdn.net/weixin_39478524/article/details/115341648
2.2Tomcat端口号被占用解决办法
Tomcat的默认端口号为8080,如果启动了多个tomcat服务器或者与oracle端口号冲突,可以用以下方法解决,
修改tomcat安装路径\conf\server.xml文件
第70行:<Connector port="8081"/>
2.3Tomcat的主要目录
- bin:可执行文件
- conf:配置文件
- lib:tomcat运行时需要用到的jar文件
- temp:tomcat运行时产生的日志文件
- webapps:存放我们编写的应用
- work:tomcat的工作目录
2.4JavaWeb应用的目录结构
我们一般开发的标准JavaWeb应用目录结构如下:
- web应用名称
- 应用.html
- css
- myStyle.css
- js
- myJS.js
- WEB-INF(此目录下的文件不能被外部直接访问)
- classes:编写的程序代码,.class文件
- lib:应用需要的jar文件
- web.xml:应用的配置信息
2.5Tomcat手动部署服务器
我们首先新建一个JavaEE的web项目,在webroot文件夹下新建一个html,
然后新建css和js文件夹存放css和js文件,对这个html进行修饰,
我们写一个改变字体颜色的css和弹框的js文件,然后在html中引入,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Tomcat</title>
<link href="css/myStyle.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="js/myJS.js"></script>
</head>
<body>
<p>Tomcat server</p>
</body>
</html>
下面我们通过两种手动方式进行网络应用的部署。
2.5.1开放目录部署
接着我们在项目的目录中将web文件夹下的所有文件都复制到tomcat安装路径的webapps中,
然后启动tomcat服务器,访问该网站,
可以看到该网页已经成功手动部署到Tomcat服务器上了。
2.5.2war包
我们在cmd命令行中进入到webroot的文件夹中,输入打包指令:jar -cvf test.war .
然后将生成的war文件同样放到tomcat的webapps目录中,
在启动服务器的情况下,它会自动帮你解压war文件,接着就可以在网络上对html文件进行访问了。
2.6继承Tomcat与自动部署应用
IDEA继承Tomcat可以参考:https://blog.csdn.net/weixin_39478524/article/details/115343114
然后我们右键test.html->Run 'test.html',就可以显示部署在服务器上的网页了
网页效果:
2.7URL与URI
- URL:统一资源定位符(网址)
- URI:统一资源标识符
URL是URI的一个子集,
URL通常由三部分组成,比如:
http://localhost:8080/test/test.html
协议 主机IP(端口号) URI(当前应用的资源路径)
2.8虚拟目录
如果我们创建的web应用不想放在tomcat的webapps文件夹中,那么就需要用到虚拟目录,让服务器可以找到web应用路径。
假设web应用在磁盘中真实目录为
E:\1program\6Java\JavaWeb\07Tomcat\web
虚拟目录为
http://localhost:8080/test
创建虚拟目录有两种方式
- 虚拟目录映射:修改在tomcat安装目录conf文件夹下的server.xml,在Host标签中新建Context标签
- <Context path="/test" docBase="E:\1program\6Java\JavaWeb\07Tomcat\web"/>
- path:网络访问的虚拟目录名
- docBase:web应用的真实路径名
- 注意:这种方法需要重启服务器,不推荐使用!
- 新建xml文件:文件名代表了应用的虚拟目录名
- 将xml文件放在tomcat安装目录下的conf\Catalina\localhost目录下
- 文件内容为
- <Context docBase="E:\1program\6Java\JavaWeb\07Tomcat\web"/>
- docBase是web应用的真实路径名
我们使用第二种方法进行测试,在tomcat安装目录\conf\Catalina\localhost中新建hello.xml,
然后访问http://localhost:8080/hello/test.html,
2.9配置默认端口、应用、主页
- 修改默认端口
- conf目录下的server.xml,将Connector标签中的port属性改为指定端口号即可
- 浏览器http默认端口号为80,所以可以修改为80则localhost后不用加端口号,使用默认的端口号80
- 修改默认应用
- 将第二种配置方法的虚拟目录的配置文件名改为ROOT.xml即可,那么输入localhost:8080访问的就是ROOT.xml中指定的web应用
- 修改默认主页
- 修改当前WEB-INF目录下的web.xml文件,在web-app标签下添加welcome-file-list标签
- 添加我们的test.html为默认应用,这样可以通过http://localhost:8080/hello直接访问到页面
-
<welcome-file-list> <welcome-file>test.html</welcome-file> </welcome-file-list>
-
三、HTTP协议
3.1HTTP协议概述
HTTP是(HyperText Transfer Protocol)超文本传输协议,基于TCP/IP协议来传输HTML文件、图片文件和查询结果等,
HTTP协议是用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式,
并且HTTP协议是不保存状态的协议,即新的请求响应产生时,和上一次的请求响应没有任何关系,不保留之前的报文信息。
HTTP协议永远都是客户端发起请求,服务器进行相应,如图:
一次HTTP操作称为一个事务,工作过程可以分为四步:
- 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始
- 建立连接后,客户机发送一个请求给服务器
- 请求的格式为:URI、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容
- 服务器接到请求后,给予相应的响应信息
- 其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容
- 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
3.2请求
一般的请求消息如下图所示
我们将上述的请求消息分为三个部分:请求消息行、请求消息头、消息正文
3.2.1请求消息行
请求消息的第一行为请求消息行,
GET /test/test.html HTTP/1.1
- GET为请求方式,请求方式分为:Get(默认)、POST、DELETE、HEAD等
- GET:明文传输 不安全,数据量有限,不超过1kb
- POST:暗文传输,安全。数据量没有限制。
- /test/test.html为URI,统一资源标识符
- HTTP/1.1为协议版本
3.2.2请求消息头
从第二行开始到空白行统称为请求消息头
- Accept:浏览器可接受的MIME类型
- 告诉服务器客户端能接收什么样类型的文件。
- Accept-Charset:浏览器通过这个头告诉服务器,它支持哪种字符集
- Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
- Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 可以在浏览器中进行设置。
- Host:初始URL中的主机和端口
- Referrer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
- Content-Type:内容类型
- 告诉服务器浏览器传输数据的MIME类型,文件传输的类型
- If-Modified-Since:利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件
- User-Agent:浏览器类型.
- Content-Length:表示请求消息正文的长度
- Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
- Cookie:用于分辨两个请求是否来自同一个浏览器,以及保存一些状态信息,
- Date:请求时间GMT
3.2.3消息正文
当请求方式是POST方式时,才能看见消息正文,
消息正文就是要传输的一些数据,如果没有数据需要传输时,消息正文为空。
3.3响应
响应消息如图所示:
3.3.1响应消息行
第一行响应消息为响应消息行,
HTTP/1.1 200 OK
- HTTP/1.1为协议版本
- 200为响应状态码,常用的响应状态码有40余种,这里我们仅列出几种,详细请看:
- 200:一切正常
- 302/307:临时重定向
- 304:未修改,客户端可以从缓存中读取数据,无需从服务器读取
- 404:服务器上不存在客户端所请求的资源
- 500:服务器内部错误
- OK为状态码描述
3.3.2响应消息头
- Location:指示新的资源的位置
- 通常和302/307一起使用,完成请求重定向
- Server:指示服务器的类型
- Content-Encoding:服务器发送的数据采用的编码类型
- Content-Length:告诉浏览器正文的长度
- Content-Language:服务发送的文本的语言
- Content-Type:服务器发送的内容的MIME类型
- Last-Modified:文件的最后修改时间
- Refresh:指示客户端刷新频率,单位是秒
- Content-Disposition:指示客户端下载文件
- Set-Cookie:服务器端发送的Cookie
- Expires:-1
- Cache-Control:no-cache (1.1)
- Pragma:no-cache (1.0) 表示告诉客户端不要使用缓存
- Connection:close/Keep-Alive
- Date:请求时间
3.3.3响应正文
即网页的源代码(F12可查看)