HTTP协议和Tomcat服务器

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,旺旺 等
    • 优点:
      1. 用户体验好,效果炫
      2. 对信息安全的控制较强
      3. 应用服务器运行数据负荷较轻,部分计算功能在客户端完成。
    • 缺点:
      1. 占用硬盘空间
      2. 维护麻烦
      3. 安装使用依赖其他条件
  • B/S架构:Browser/Server 浏览器/服务器 。通过浏览器与服务器交互,不需要安装其他程序

    • 常见应用:网银系统,淘宝,京东 12306 等
    • 优点:
      1. 维护和升级简单,无缝升级。
      2. 不用必须安装程序,操作系统内置了浏览器
    • 缺点:
      1. 动画效果受浏览器限制
      2. 对信息安装控制较差。例如:网银就需要使用U盾,在浏览器端加密。
      3. 应用服务器运行数据负荷较重。大部分计算都在服务器端,增加服务器压力。使用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服务器:

  1. Tomcat:Apache组织提供一个免费的小型的服务器软件。支持Servlet和JSP规范。
  2. WebLogic:Bea公司的一个收费的大型的服务器软件,后被Oracle收购。支持EE的所有的规范
  3. WebSphere:IBM公司的一个收费的大型的服务器软件,支持EE的所有的规范。
  4. 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一起使用。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值