HTTP&Tomcat
今日内容学习目标
- 能够描述出浏览器和服务器交互过程
- 能够使用工具查看HTTP协议内容
- 能够理解HTTP协议内容
- 能够解决Tomcat服务器启动时遇到的问题
- 能够运用Tomcat服务器部署WEB项目
- 能够使用idea配置tomcat方式发布项目
- 能够使用idea编写servlet
一. 访问tomcat下已经发布的web项目
1.1 Web开发概述
WEB通信
WEB采用B/S通信模式,通过超文本传送协议(HTTP, Hypertext transport protocol)进行通信。通过浏览器地址栏编写URL,向服务器发送一个请求,服务器端根据请求进行相应的处理,处理完成之后,会向浏览器作出一个响应,及将服务器端资源发送给浏览器。
软件架构
-
C/S架构:Client/Server 客户端/服务器。要求客户端电脑安装一个客户端程序。
- 常见应用:QQ,迅雷,360,旺旺 等
- 优点:
- 用户体验好,效果炫
- 对信息安全的控制较强
- 应用服务器运行数据负荷较轻,部分计算功能在客户端完成。
- 缺点:
- 占用硬盘空间
- 维护麻烦
- 安装使用依赖其他条件
-
B/S架构:Browser/Server 浏览器/服务器 。通过浏览器与服务器交互,不需要安装其他程序
- 常见应用:网银系统,淘宝,京东 12306 等
- 优点:
- 维护和升级简单,无缝升级。
- 不用必须安装程序,操作系统内置了浏览器
- 缺点:
- 动画效果受浏览器限制
- 对信息安装控制较差。例如:网银就需要使用U盾,在浏览器端加密。
- 应用服务器运行数据负荷较重。大部分计算都在服务器端,增加服务器压力。使用Ajax可以改善部分用户体验。
WEB资源介绍
静态资源:指web页面中供人们浏览的数据始终是不变。比如:HTML、CSS、JS、图片、多媒体。
动态资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。比如:JSP/Servlet、ASP、PHP
WEB服务器
JCP(Java Community Process)Java技术规范制定与更新的国际组织。主要维护规范包括:J2ME、J2SE、J2EE,XML等。
J2EE 企业级开发Java规范。标准规范包括:servlet、jsp、jdbc、xml、jta、javamail等。在java中规范就是接口。J2EE又称为JavaEE。
WEB服务器对JavaEE规范部分或全部支持(实现),也就是WEB服务器实现部分或全部接口。
常见的WEB服务器:
- Tomcat:Apache组织提供一个免费的小型的服务器软件。支持Servlet和JSP规范。
- WebLogic:Bea公司的一个收费的大型的服务器软件,后被Oracle收购。支持EE的所有的规范
- WebSphere:IBM公司的一个收费的大型的服务器软件,支持EE的所有的规范。
- JBoss:是一个基于J2EE的开放源代码的应用服务器。JBoss是一个管理EJB的容器和服务器,JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
URL请求路径
URL (Uniform ResourceLocator) ,统一资源定位符是对互联网上资源位置的一种表示,互联网上的每个文件都有一个唯一的URL。
完整格式如下
协议://域名:端口号/资源位置?参数=值
协议,http、https、ftp等
域名,域名或IP地址,都可以访问WEB资源
端口号,程序必须使用端口号,才可以让另一个计算机访问。http协议的默认端:80
资源位置,用于描述WEB资源再服务器上的位置。
参数=值,浏览器和服务器交互传递的数据
例如:
常见路径
http://www.itcast.cn:80/subject/javaeezly/index.shtml
1.2 Tomcat介绍
概述
Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
支持Servlet和JSP 规范,且最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。
Tomcat版本(了解)
tomcat 目前存在很多版本,希望大家了解tomcat的版本,从而知道自己的创建的项目使用的是几版本规范,不同版本的规范技术可能不同。我们学习的JavaEE 8.0,Servlet规范3.1,tomcat至少使用8.5版本。)
官网地址:http://tomcat.apache.org/whichversion.html
安装Tomcat
- 下载一个tomcat服务器软件.
https://tomcat.apache.org/download-80.cgi - 步骤二:解压下载好的zip文件
将解压后的文件copy到一个没有中文和空格的路径下即可.
例如:D:\02_DevelopTools\apache-tomcat-8.5.27
Tomcat目录结构
bin:脚本目录
启动脚本:startup.bat
停止脚本:shutdown.bat
conf:配置文件目录 (config /configuration)
核心配置文件:server.xml
用户权限配置文件:tomcat-users.xml
所有web项目默认配置文件:web.xml
lib:依赖库,tomcat和web项目中需要使用的jar包
logs:日志文件.
localhost_access_log…txttomcat记录用户访问信息,星表示时间。
例如:localhost_access_log.2018-07-07.txt
temp:临时文件目录,文件夹内内容可以任意删除。
webapps:默认情况下发布WEB项目所存放的目录。
work:tomcat处理JSP的工作目录。
Tomcat启动和访问
- tomcat解压目录/bin/startup.bat 双击运行启动tomcat
- 访问路径:http://localhost:8080/
Tomcat常见问题
JAVA_HOME的配置
如果没有配置JAVA_HOME环境变量,在双击“startup.bat”文件运行tomcat时,将一闪立即关闭。且必须配置正确,及JAVA_HOME指向JDK的安装目录
端口号冲突
严重: Failed to initialize end point associated with ProtocolHandler ["http-bio-8080"]
java.net.BindException: Address already in use: JVM_Bind <null>:8080
...
Caused by: java.net.BindException: Address already in use: JVM_Bind
...
控制台将出现大量异常信息,描述的是3个端口被占用(8080、8009、8005 )
通过 $JAVA_HOME/conf/server.xml修改端口号。
1.3 web项目目录结构(重要)
在JavaEE规范中,WEB项目存在一定的目录结构,具体结构如下:
项目名称 (webapps 文件夹)
|-----静态资源.HTML,CSS,JS
|-----WEB-INF (不能直接通过浏览器进行访问)
|----web.xml 当前WEB项目的核心配置,Servlet2.5必须有,3.0可省略。
|----lib 当前WEB项目所需要的第三方的jar的存放位置。
|----classes Java源码编译后生成class文件存放的位置。
1.4 idea绑定tomcat
- 步骤1:首先打开idea开发工具,然后点击Run菜单,选择EditConfigurations…菜单,打开Run/DebugConfigurations对话框
VM options填写内容:-Xms128m -Xmx256m-XX:PermSize=128m -XX:MaxPermSize=256m
参数说明
-Xms768m:设置JVM初始堆内存为768m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmx768m:设置JVM最大堆内存为768m。
-Xss128k:设置每个线程的栈大小。JDK5.0以后每个线程栈大小为1M,之前每个线程栈大小为256K。应当根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。需要注意的是:当这个值被设置的较大(例如>2MB)时将会在很大程度上降低系统的性能。
-Xmn2g:设置年轻代大小为2G。在整个堆内存大小确定的情况下,增大年轻代将会减小年老代,反之亦然。此值关系到JVM垃圾回收,对系统性能影响较大,官方推荐配置为整个堆大小的3/8。
-XX:NewSize=1024m:设置年轻代初始值为1024M。
-XX:MaxNewSize=1024m:设置年轻代最大值为1024M。
-XX:PermSize=256m:设置持久代初始值为256M。
-XX:MaxPermSize=256m:设置持久代最大值为256M。
-XX:NewRatio=4:设置年轻代(包括1个Eden和2个Survivor区)与年老代的比值。表示年轻代比年老代为1:4。
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的比值。表示2个Survivor区(JVM堆内存年轻代中默认有2个大小相等的Survivor区)与1个Eden区的比值为2:4,即1个Survivor区占整个年轻代大小的1/6。
-XX:MaxTenuringThreshold=7:表示一个对象如果在Survivor区(救助空间)移动了7次还没有被垃圾回收就进入年老代。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代,对于需要大量常驻内存的应用,这样做可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代存活时间,增加对象在年轻代被垃圾回收的概率,减少Full GC的频率,这样做可以在某种程度上提高服务稳定性。
标准参数,所有JVM都必须支持这些参数的功能,而且向后兼容;例如:
-client——设置JVM使用Client模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或开发调试;在32位环境下直接运行Java程序默认启用该模式。
-server——设置JVM使Server模式,特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境。在具有64位能力的JDK环境下默认启用该模式。
非标准参数(-X),默认JVM实现这些参数的功能,但是并不保证所有JVM实现都满足,且不保证向后兼容;
非稳定参数(-XX),此类参数各个JVM实现会有所不同,将来可能会不被支持,需要慎重使用;
1.5 idea创建WEB项目
1.6 Web项目发布到tomcat
二. HTTP协议的概述
2.1 什么是HTTP协议
HTTP协议:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。用于定义WEB浏览器与WEB服务器之间交换数据的过程。
2.2 HTTP协议的作用及特点
HTTP协议的作用
HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。
HTTP协议的特点
- 基于请求/响应模型的协议。请求和响应必须成对;先有请求后有响应。
- HTTP协议默认的端口:80
2.3 HTTP协议的版本:
- HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开。
- HTTP/1.1,发送请求,创建一次连接,获得多个web资源,连接断开。
2.4 HTTP协议的组成:
HTTP请求协议、HTTP响应协议。
HTTP请求包括:请求行、请求头、请求体
HTTP请求包括:请求行、请求头、请求体
2.5 HTTP协议入门
准备一个表单html,分别设置表单的提交方式为:get和post。将表单提交位置设置成#,表示提交到当前表单。
<form action="#" method="get">
用户名:<input type="text" name="username" value="jack"/> <br/>
密码:<input type="text" name="password" value="1234"/> <br/>
<input type="submit" value="get提交"/>
</form>
<form action="#" method="post">
用户名:<input type="text" name="username" value="jack"/> <br/>
密码:<input type="text" name="password" value="1234"/> <br/>
<input type="submit" value="post提交"/>
</form>
2.6 HTTP请求详解
HTTP的请求(GET)
请求行
-
GET请求方式
-
服务器的URL,传递参数
- 参数数据格式 k=v
- 多个参数&分割
-
协议版本
请求头
包含了指导服务器的信息
常见请求头 | 描述 (红色掌握,其他了解) |
---|---|
Referer | 浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:防盗链 |
If-Modified-Since | 浏览器通知服务器,本地缓存的最后变更时间。与另一个响应头组合控制浏览器页面的缓存。 |
Cookie | 与会话有关技术,用于存放浏览器缓存的cookie信息。 |
User-Agent | 浏览器通知服务器,客户端浏览器与操作系统相关信息 |
Connection | 保持连接状态。Keep-Alive 连接中,close 已关闭 |
Host | 请求的服务器主机名 |
Content-Length | 请求体的长度 |
Content-Type | 如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码 |
Accept: | 浏览器可支持的MIME类型。文件类型的一种描述方式。 MIME格式:大类型/小类型[;参数] 例如: text/html ,html文件 text/css,css文件 text/javascript,js文件 image/*,所有图片文件 |
Accept-Encoding | 浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩 |
Accept-Language | 浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n) |
HTTP的请求(POST)
请求行
-
请求方式POST
-
提交服务器URL
-
协议版本
请求头
指导性信息
请求体
- 提交参数
- 数据格式 k=v
HTTP的响应
响应行
-
协议版本
-
状态码
响应头
指导客户端浏览器信息
响应体
页面的正文部分
常见请求头 | 描述 |
---|---|
Location | 指定响应的路径,需要与状态码302配合使用,完成跳转。 |
Content-Type | 响应正文的类型(MIME类型) 取值:text/html;charset=UTF-8 |
Content-Disposition | 通过浏览器以下载方式解析正文 取值:attachment;filename=xx.zip |
Set-Cookie | 与会话相关技术。服务器向浏览器写入cookie |
Content-Encoding | 服务器使用的压缩格式 取值:gzip |
Content-length | 响应正文的长度 |
Refresh | 定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页。 取值:3;url=www.itcast.cn //三秒刷新页面到www.itcast.cn |
Server | 指的是服务器名称,默认值:Apache-Coyote/1.1。可以通过conf/server.xml配置进行修改。<Connector port=“8080” … server=“itcast”/> |
Last-Modified | 服务器通知浏览器,文件的最后修改时间。与If-Modified-Since一起使用。 |