Tomcat/Servlet

第十六章 Tomcat


web相关概念回顾


  1. 软件架构
    1. C/S:客户端/服务器端
    2. B/S:浏览器/服务器端
  2. 资源分类
    1. 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可直接被浏览器解析
      • 如: html、css、JavaScript
    2. 动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要先转换为静态资源,再返回给浏览器
      • 如:servlet/jsp,php,asp…
    3. 网络通信三要素
      1. IP:电气设备再网络中的唯一标识。
      2. 端口:应用程序在计算机中的唯一标识。0~65536
      3. 传输协议:规定了数据传输的规则。
        1. tcp:安全协议,三次握手。速度较慢
        2. udp:不安全协议。度较快

Tomcat/Servlet_第1张图片


web服务器软件:


  • 服务器:安装了服务器软件的计算机
  • 服务器软件:接受用户的请求,处理请求,做出响应
  • web服务器软件:接受用户的请求,处理请求,做出响应。
    • 在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
    • web容器
  • 常见的java相关的web服务器软件:
    • webLogi:oracle公司,大型的JavaEE服务器,支持所有JavaEE规范,收费的。
    • webSphere:IBM公司,大型的JavaEE服务器,支持所有JavaEE规范,收费的。
    • JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有JavaEE规范,收费的。
    • Tomcat:Apache基金组织,中小型的JavaEE服务器,仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。
  • JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范。

Tomcat概述


Tomcat简单的说就是一个运行Java的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器。

为什么要学Tomcat呢?

因为你在本地写的html,css页面只能让自己访问,别人不能远程访问你写的页面,Tomcat就是提供能够让别人访问自己写的页面的一个程序。

Tomcat/Servlet_第2张图片

Tomcat下载安装及配置


网友有很多教程,这里我用的是CSDN上的一个教程https://blog.csdn.net/qq_39047789/article/details/103883252?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159667785919195264537366%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159667785919195264537366&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-103883252.first_rank_ecpm_v3_pc_rank_v4&utm_term=tomcat%E5%AE%89%E8%A3%85%E5%8F%8A%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B&spm=1018.2118.3001.4187

Tomcat相关知识


相关术语介绍:

下图为url,在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,就是指网络地址。

Tomcat/Servlet_第3张图片

上图存在一个错误:

主机是包括端口的,图上所示的localhost是主机名,而localhost:8080才是主机

Tomcat目录结构
Tomcat/Servlet_第4张图片

目录的简单介绍

  1. bin:启动和关闭Tomcat的bat文件
  2. conf:配置文件
    • server.xml 该文件用于配置server相关的信息,比如tomcat启动的端口号,配置主机(Host)
    • web.xml文件配置与web应用(web应用相当于一个web站点)
    • tomcat-user.xml配置用户名密码和相关权限
  3. lib:该目录防止运行Tomcat运行需要的jar包
  4. logs:存放日志,当我们需要查看日志的时候,可以查询信息
  5. webapps:防止我们的web应用
  6. work工作目录:该目录用于存放jsp被访问后生成对应的server文件和.class文件

webapps目录的详细说明


在webapps中建立了web1目录,下面放置我们的html文件,jsp文件,图片等等,则web1就被当作web应用管理起来。
例子:在webapps下创建一个web站点,在web站点下创建一个html文件,访问html文件

Tomcat/Servlet_第5张图片

接着开启Tomcat服务,在浏览器中输入http://localhost:8080/web1/10_Practice.html
Tomcat/Servlet_第6张图片

这样即可在本地成功使用Tomcat访问html文件。

web站点目录规范
Tomcat/Servlet_第7张图片
这样子设置web站点目录的目的:

  • 需求:我由多个html文件,想把其中的一个html文件作为我的web站点的首页
  • 如果没有WEB-INF目录下的web.xml文件支持就无法达成我的需求

启动过程中可能遇到的问题:

  1. 黑窗口一闪而过:
    • 原因:没有正确配置JAVA_HOME环境变量
    • 解决方案:正确配置JAVA_HOME环境变量
  2. 启动报错:
    1. 暴力:找到占用的端口号,并且找到对应的进程,杀死该进程
      • netstat -ano
    2. 温柔:修改自身的端口号
      • conf/server.xml
      • 一般会将tomcat的默认段欧豪修改为80.80端口号是http协议的默认端口号。
        • 好处:在访问时,就不用输入端口号

Tomcat关闭


  1. 正常关闭:
    • bin/shutdown.bat
    • ctrl + c
  2. 强制关闭:
    • 点击启动窗口的x

Tomcat配置:


Tomcat/Servlet_第8张图片

  • 部署项目的方式:
    1. 直接将

设置站点首页


下面我们将10_Practice.html文件作为站点的首页,以下是创建步骤:

  1. 新建一个WEB-INF目录

Tomcat/Servlet_第9张图片

  1. 在WEB-INF目录下创建一个web.xml
    • 考虑到我们不会写xml文件,因此我们可以在webapps目录下的ROOT站点中copy一份xml文件过来
    • 添加如下代码
<welcome-file-list>
    <welcome-file>10_Practice.htmlwelcome-file>
welcome-file-list>

添加位置如下:
Tomcat/Servlet_第10张图片

  • 此时访问web1站点已经是默认访问10_Practice.html啦

虚拟目录


配置虚拟目录的目的:

  • 如果把所有web站点的目录都放在webapps下,可能导致磁盘空间不够用,也不利于对web站点目录的管理。(前提是存在非常多的web站点目录)
  • 把web站点的目录分散到其他磁盘管理就需要配置虚拟目录【默认情况下,只有webapps下的目录才能被Tomccat自动管理成一个web站点】
  • 把web应用所在目录交给web服务器管理,这个过程称之为虚拟目录的映射

配置虚拟目录的方法:

由于我目前对虚拟目录没有要求,因此我没有详细去做虚拟目录,有需求的可以参考这个网站进行配置。
https://segmentfault.com/a/1190000013122831

配置临时域名

设置虚拟主机

参考虚拟目录的网站即可

Tomcat体系结构

Tomcat/Servlet_第11张图片

浏览器访问WEB资源的流程图:
Tomcat/Servlet_第12张图片

IDEA配置Tomcat

快速配置教程:

https://blog.csdn.net/Mr_OOO/article/details/50976205?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param


第十七章 Servlet


什么是Servlet

Servlet其实就是一个遵循Servlet开发的Java类。Servlet是由服务器调用的,运行在服务器端。

为什么要用到Servlet

我们编写Java程序想要在网上实现聊天、发帖,这样一些的交互功能,普通的Java技术是非常难完成的。sun公司就提供了Servlet这种技术供我们使用。

HTTP协议


什么是HTTP协议

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。它是TCP/IP协议的一个应用层协议

简单来说,HTTP协议就是客户端和服务器交互的一种通讯的格式。
例子:在浏览器点击一个链接,浏览器就为我打开这个链接的网页。
原理:当在浏览器中点击这个链接的时候,浏览器会向服务器发送一段文本,告诉服务器请求打开的是哪一个网页。服务器收到请求后,就返回一段文本给浏览器,浏览器会将该文本解析,然后显示出来。这段文本就是遵循HTTP协议规范的。

HTTP请求

浏览器向服务器请求某个web资源时,称之为浏览器向服务器发送了一个http请求。

一个完整的http请求应该包含三个部分:

  1. 请求行【描述客户端的请求方式、请求的资源名称,以及使用的HTTP协议版本号】
  2. 多个消息头【描述客户端请求哪台主机,以及客户端的一些环境信息灯】
  3. 一个空行

请求行

请求行:GET/java.html HTTP/1.1
请求行中的GET称之为请求方式,请求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
其中,常用的有:POST、GET

一般来说,当我们点击超链接,通过地址栏访问都是get请求方式;通过表单提交的数据一般都是post方式。
GET方式:在URL地址后附带的参数时有限制的,其数据容量通常不能超过1K。
POST方式:可以在请求的实体内容中向服务器发送数据,传送的数据量无限制。

请求头

  • Accept: text/html,image/* 【浏览器告诉服务器,它支持的数据类型】
  • Accept-Charset: ISO-8859-1 【浏览器告诉服务器,它支持哪种字符集
  • Accept-Encoding: gzip,compress 【浏览器告诉服务器,它支持的压缩格式
  • Accept-Language: en-us,zh-cn 【浏览器告诉服务器,它的语言环境】
  • Host: www.it315.org:80【浏览器告诉服务器,它的想访问哪台主机】
  • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,缓存数据的时间】
  • Referer: http://www.it315.org/index.jsp【浏览器告诉服务器,客户机是从那个页面来的—反盗链
  • 8.User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【浏览器告诉服务器,浏览器的内核是什么】
  • Cookie【浏览器告诉服务器,带来的Cookie是什么
  • Connection: close/Keep-Alive 【浏览器告诉服务器,请求完后是断开链接还是保持链接】
  • Date: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,请求的时间】

HTTP相应


一个HTTP相应代表着服务器向浏览器回送数据
一个完整的HTTP相应应包含四个部分:

  1. 一个状态行【用于描述服务器对请求的处理结果。】
  2. 多个消息头【用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据】
  3. 一个空行
  4. 实体内容【服务器向客户端回送的数据】

状态行

格式:HTTP版本号 状态码 原因叙述
状态行:HTTP/1.1 200 OK
状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类

Tomcat/Servlet_第13张图片

响应头

  • Location: http://www.it315.org/index.jsp 【服务器告诉浏览器要跳转到哪个页面
  • Server:apache tomcat【服务器告诉浏览器,服务器的型号是什么】
  • Content-Encoding: gzip 【服务器告诉浏览器数据压缩的格式
  • Content-Length: 80 【服务器告诉浏览器回送数据的长度】
  • Content-Language: zh-cn 【服务器告诉浏览器,服务器的语言环境】
  • Content-Type: text/html; charset=GB2312 【服务器告诉浏览器,回送数据的类型
  • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器该资源上次更新时间】
  • Refresh: 1;url=http://www.it315.org【服务器告诉浏览器要定时刷新
  • Content-Disposition: attachment; filename=aaa.zip【服务器告诉浏览器以下载方式打开数据
  • Transfer-Encoding: chunked 【服务器告诉浏览器数据以分块方式回送】
  • Set-Cookie:SS=Q0=5Lb_nQ; path=/search【服务器告诉浏览器要保存Cookie
  • Expires: -1【服务器告诉浏览器不要设置缓存
  • Cache-Control: no-cache 【服务器告诉浏览器不要设置缓存
  • Pragma: no-cache 【服务器告诉浏览器不要设置缓存
  • Connection: close/Keep-Alive 【服务器告诉浏览器连接方式】
  • Date: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器回送数据的时间】

Servlet的作用


Serlvlet带给我们最大的作用就是能够处理浏览器带来的HTTP请求,并返回一个响应给浏览器,从而实现浏览器和服务器的交互。

Servlet生命周期


Servlet生命周期可被定义为从创建知道毁灭的整个过程。以下时Servlet遵循的过程:

  • Servlet通过调用init()方法进行初始化
  • Servlet通过service()方法来处理客户端的请求
  • Servlet通过调用destroy()方法终止(结束)
  • 最后,Servlet是由JVM的垃圾回收器进行垃圾回收的。

现在让我们详细讨论生命周期的方法。


init()方法


	init方法被设计成只调用一次。它在第一次创建Servlet时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像Applet的init方法一样
	Servlet创建于用户第一次调用对应于该Servlet的URL时,但是您也剋以指定Servlet在服务器第一次启动时被加载。当用书调用一个Servlet时,就会创建一个Servlet实例,每一个用户请求都会产生一个新的线程,适当的时候移交给doGet或doPost方法。init()方法简单地创建或加载一些数据,这些数据将被用于Servlet地整个生命周期。

init方法地定义如下

public void init() throws ServletException{
     
    //初始化代码
}

service()方法


	service()方法是执行实际任务地主要方法。Servlet容器(即Web服务器)调用service()方法来处理来自客户端(浏览器)的请求,并把格式化的相应写回给客户端。
	每次服务器接收到一个Servlet请求时,服务器会产生一个新的线程并调用服务。service()方法检查HTTP请求类型(GET、POST、PUT、DELETE等),并在适当的时候调用doGet、doPost、doPut、doDelte等方法。

service()方法的特征

public void service(ServletRequest request,ServletResponse response) throws SevletException,IOException{
     
    //
}
	service()方法由容器调用,service方法在使用的时候调用doGet、doPost、doPut、doDelete等方法。所以,您不用对service()方法做任何动作,您只需要根据来自客户端的请求类型来重写doGet()或doPost()即可。

doGet() 和 doPost() 方法是每次服务请求中最常用的方法。下面是这两种方法的特征。


doGet()方法


GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
     
    // Servlet 代码
}

doPost()方法


POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。

public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
    throws ServletException, IOException {
     
    // Servlet 代码
}

destroy()方法


destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。destroy 方法定义如下所示:

 public void destroy() {
     
    // 终止化代码...
  }

架构图

下图显示了一个典型的Servlet生命周期方案。

  • 第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
  • Servlet 容器在调用 service() 方法之前加载 Servlet。
  • 然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。

Tomcat/Servlet_第14张图片

你可能感兴趣的:(后端学习,tomcat)