Tomcat与Servlet初学

一、Tomcat与Servlet之间的关系

Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件. Servlet最常见的用途是扩展Java Web服务器功能,提供非常安全的,可移植的,易于使用的CGI替代品.

二、软件架构

1.软件架构
(1)c/s客户端/服务器端(客户端需要下载相应的应用程序去访问服务器端的程序)
(2)b/s浏览器端/服务器端(只要有一个浏览器,通过域名访问服务器端的不同程序)现在主流为bs


2.资源分类
静态资源:可以理解为前端的固定页面,这里面包含HTML、CSS、JS、图片等等,不需要查数据库也不需要程序处理,直接就能够显示的页面,如果想修改内容则必须修改页面,但是访问效率相当高。
动态资源:需要程序处理或者从数据库中读数据,能够根据不同的条件在页面显示不同的数据,内容更新不需要修改页面但是访问速度不及静态页面。
动态资源要先转换为静态资源,然后在响应给浏览器端(动态资源需要先转换为静态资源再响应给浏览器)
①如servlet/jsp,php,asp…

3.网络通信三要素
(1)IP:计算机在网络中的唯一标识。
(2)端口:应用程序(就是计算机上的某一个软件)的唯一标识0~65536
(3)传输协议:规定了数据通信的规则(两个程序传输信息,要遵循相同的传输规则)
①基础协议
1)Tcp:安全协议,三次握手建立连接,四次挥手断开连接,确认双发都在线的情况下在传输,传输速度慢,安全。
2)Udp:不连接不安全协议,传输速度快。

三、Web服务器

1.服务器
安装了服务器软件的计算机。

2.服务器软件
接收用户的请求,处理请求,做出响应。

3.web服务器软件
接收浏览器用户的请求,处理请求,做出相应的回应。web服务器软件中,可以部署web项目,让用通过浏览器来访问这些项目。也称web容器。

4.常见的java相关的web服务器软件
webLogic:oracle公司,大型的javaEE服务器,支持所有的javaEE规范,收费的。

(JavaEE:java语言在企业开发中使用的技术和规范的总和,一种规定了13项大规范)

webSphere:IBM公司,大型的javaEE服务器,支持所有的javaEE规范,收费的。

JBOSS:JBOSS公司,大型的javaEE服务器,支持所有的javaEE规范,收费的。

Tomcat:Apache基金组织(阿帕奇),中小型的JavaEE服务器,仅仅支持少量的JavaEE规范。(servlet/jsp规范)。开源的免费的。
 

四、HTTP协议

1、概念:

HTTP协议一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网
的数据通信的基础。
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准
(TCP) 。通过使用网页浏览器,客户端发起一 个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为 用户代理程序( user-agent )。


User Agent

User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

User Agent的含义

一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。

应答的服务器上存储着一些资源,比如 HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。 在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关
或者隧道(tunnel)。 尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须
使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网 络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这 种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为 其传输层。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是 80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦 收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以 及返回的内容,如请求的文件、错误消息、或者其它信息。

2、Http协议和工作原理

HTTP 协议定义 Web 客户端如何从 Web 服务器请求 Web 页面,以及服务器如 何把Web 页面传送给客户端。 HTTP 协议采用了请求 / 响应模型。客户端向服 务器发送一个请求报文,请求报文包含请求的方法、URL 、协议版本、请求 头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的 版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP 报文:
所有的 HTTP 报文都可以分为两类: 请求报文 (request message) 响应报 文 (response message) 。请求和响应报文的基本报文结构相同。
Tomcat与Servlet初学_第1张图片

HTTP响应报文

Tomcat与Servlet初学_第2张图片

3、HTTP协议请求方式

Tomcat与Servlet初学_第3张图片

4、HTTP协议响应头信息:

Tomcat与Servlet初学_第4张图片Tomcat与Servlet初学_第5张图片 

5、HTTP状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请 求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含
HTTP 状态码的信息头( server header )用以响应浏览器的请求。
HTTP 状态码的英文为 HTTP Status Code
下面是常见的 HTTP 状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它 URL
404 - 请求的资源(网页)等不存在。
500 - 内部服务器错

五、Web服务器与Servlet容器和Servlet

1、Web服务器: Web服务器使用HTTP协议来传输数据

最简单的一种情况是,用户在浏览 器(客户端,client )中输入一个 URL (如, www.programcreek.com/sta tic.html ),然后就能获取网页进行阅览。因此,服务器完成的工作就是发 送网页至客户端。传输过程遵循HTTP 协议,它指明了请求( request )消 息和响应(response )消息的格式。
Tomcat与Servlet初学_第6张图片

简而言之:
Web 服务器就是将一台主机上的资源通过 url 映射提供给外界进行访问

2、Servlet容器

在这里,我们发现,用户 / 客户端只能向服务器请求静态网页。如果用户想 要根据自己的输入来读取网页,这种方式就不能满足用户的要求。Servlet 容器的基本思想是在服务器端使用Java 来动态生成网页。因此, Servlet 容 器是Web 服务器和 servlet 进行交互的必不可少的组件。

3、Servlet

Servlet是在 javax.serlvet 包中定义的一个接口。它声明了 servlet 生命周期 中必不可少的三个方法-init() service() destroy() 。每个 servlet (无论是 在SDK 中定义的,或是自定义的)都必须实现这三个方法,而且由服务器在 特定的时刻调用。
1. init() 方法在 servlet 生命周期的初始化阶段被调用。它传递一个实现了 javax.servlet.ServletConfig接口的对象,使得 servlet 能够从 web application中获取初始化参数。
2. servlet 初始化后,每接收一个请求,就会调用 service() 方法。每个请求 的处理都在独立的线程中进行。Web 服务器对每个请求都会调用一次 service()方法。 service() 方法判断请求的类型,并把它转发给相应的方 法进行处理。
3. 当需要销毁 servlet 对象时,就要调用 destroy() 方法。该方法释放被占用 的资源。 和所有的Java 程序一样, servlet 运行在 JVM 中。引入 servlet 容器是为了 处理复杂的HTTP 请求。 Servlet 容器负责 servlet 的创建、执行和销毁。

4、Servlet容器和Web服务器如何处理一个请求?

Tomcat与Servlet初学_第7张图片

通过请求的域名与servlet容器映射来决定调用。

ip地址与域名

是一对多的关系。一个ip地址可以对应多个域名,但是一个域名只有一个ip地址。ip地址是数字组成的,不方便记忆,所以有了域名,通过域名地址就能找到ip地址。

在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。域名的最终指向是IP。

Tomcat与Servlet初学_第8张图片

1. Web 服务器接收到 HTTP 请求 2. Web 服务器将请求转发给 servlet 容器
3. 如果容器中不存在所需的 servlet ,容器就会检索 servlet ,并将其加载到
容器的地址空间中
4. 容器调用 servlet init() 方法对 servlet 进行初始化(该方法只会在
servlet 第一次被载入时调用)
5. 容器调用 servlet service() 方法来处理 HTTP 请求,即,读取请求中的
数据,创建一个响应。 servlet 会被保留在容器的地址空间中,继续处理
其他的 HTTP 请求
6. Web 服务器将动态生成的结果返回到正确的地址。
Tomcat与Servlet初学_第9张图片

5、Servlet

Servelt 定义:
servlet 是一种应用于服务器端的 Java 程序 , 可以生成动态的 web 页面。 servlet运行在服务器端 , 是由 web 服务器负责加载的 , 是独立于平台和协议的 Java应用程序。

6、 Servlet的意义和生命周期

Servlet 其实并不是很复杂的东西,事实上, servlet 就是一个 java 接口,定 义了处理网络请求的规范。所有实现servlet 的类,都需要实现它那五个方 法,其中最主要的是三个生命周期方法 init() destroy()service(), 所有实现 servlet接口的类都需要回答这三个问题:
你初始化时要做什么     init()
你销毁时要做什么    destory()
你接受到请求时要做什么  service()

7、创建Servlet的三种方法:

1. 实现 servlet 接口,重写接口中的 init(),service(),destroy() 等方法
2. 继承 GenericServlet ,重写父类中的 service() 方法
3. 继承 HttpServlet ,重写父类中的 doGet() doPost() 方法

六、Tomcat服务器

Tomcat容器内部功能

Tomcat与Servlet初学_第10张图片

tomcat两大组件分为连接器(Connector)和容器(container)。

连接器接收socklet请求后转换成ServletRequest对象给容器处理(servlet容器处理)。处理完后响应一成一个对象ServletResponse给连接器,连接器解析ServletResponse 并且给socklet或者给http服务器。

1、Tomcat服务器概念

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。

2、Tomcat服务器与Apache服务器

apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。 换句话说,apache是一辆卡车,上面可以装一些东西如html(静态)等。但是不能装水(动态),要装水必须要有容器(桶),而这个桶(Tomcat)也可以不放在卡车上。

Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML、PHP、JSP、Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置。

Apache是web服务器(静态解析,如HTML),tomcat是java应用服务器(动态解析,如JSP)  
Tomcat只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行
同为服务器,Tomcat的特别之处在于它还是Java的Web容器,能够处理JSP;而Apache一般是与PHP结合,并不能处理JSP。

两者从以下几点可以比较的:

1、两者都是apache组织开发的   
2、两者都有HTTP服务的功能   
3、两者都是开源免费的

联系

1)Apache是普通服务器,本身只支持html即普通网页,可以通过插件支持php,还可以与Tomcat连通(Apache单向连接Tomcat,就是说通过Apache可以访问Tomcat资源,反之不然)。    
2)Apache只支持静态网页,但像Jsp动态网页就需要Tomcat来处理。  
3)Apache和Tomcat整合使用:    
如果客户端请求的是静态页面,则只需要Apache服务器响应请求;    
如果客户端请求动态页面,则是Tomcat服务器响应请求,将解析的JSP等网页代码解析后回传给Apache服务器,再经Apache返回给浏览器端。    
这是因为jsp是服务器端解释代码的,Tomcat只做动态代码解析,Apache回传解析好的静态代码,Apache+Tomcat这样整合就可以减少Tomcat的服务开销。  
4)Apache和Tomcat是独立的,在同一台服务器上可以集成。

区别

Apache是有C语言实现的,支持各种特性和模块从而来扩展核心功能;Tomcat是Java编写的,更好的支持Servlet和JSP。  
1、Apache是Web服务器,Web服务器传送(serves)页面使浏览器可以浏览,Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供 (serves)商业逻辑(business logic)。  
Tomcat是运行在Apache上的应用服务器,应用程序服务器提供的是客户端应用程序可以调用(call)的方法 (methods)。它只是一个servlet(jsp也翻译成servlet)容器,可以认为是Apache的扩展,但是可以独立于apache运行。  
2、Apache是普通服务器,本身只支持html静态普通网页。不过可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源,反之不然),Tomcat是jsp/servlet容器,同时也支持HTML、JSP、ASP、PHP、CGI等,其中CGI需要一些手动调试,不过很容易的。  
3、Apache侧重于http server,Tomcat侧重于servlet引擎,如果以standalone方式运行,功能上Tomcat与apache等效支持JSP,但对静态网页不太理想。  
4、Apache可以运行一年不重启,稳定性非常好,而Tomcat则不见得。  
5、首选web服务器是Apache,但Apache解析不了的jsp、servlet才用tomcat。  6、Apache是很最开始的页面解析服务,tomcat是后研发出来的,从本质上来说tomcat的功能完全可以替代Apache,但Apache毕竟是tomcat的前辈级人物,并且市场上也有不少人还在用Apache,所以Apache还会继续存在,不会被取代,apache不能解析java的东西,但解析html速度快。

两者例子:

Apache是一辆车,上面可以装一些东西如html等,但是不能装水,要装水必须要有容器(桶),而这个桶也可以不放在卡车上,那这个桶就是TOMCAT。

两者整合:

Apache是一个web服务器环境程序,启用他可以作为web服务器使用不过只支持静态网页,不支持动态网页,如asp、jsp、php、cgi  
如果要在Apache环境下运行jsp就需要一个解释器来执行jsp网页,而这个jsp解释器就是Tomcat  
那为什么还要JDK呢?因为jsp需要连接数据库的话就要jdk来提供连接数据库的驱程,所以要运行jsp的web服务器平台就需要APACHE+TOMCAT+JDK

整合的好处:

如果客户端请求的是静态页面,则只需要Apache服务器响应请求  如果客户端请求动态页面,则是Tomcat服务器响应请求  
因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销

七、JSP文件

1、JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

2、特点

  • 能以模板化的方式简单、高效地添加动态网页内容。

  • 可利用JavaBean和标签库技术复用常用的功能代码(设计好的组件容易实现重复利用,减少重复劳动)。标签库不仅带有通用的内置标签(JSTL),而且支持可扩展功能的自定义标签。

  • 有良好的工具支持。

  • 继承了Java语言的相对易用性。

  • 继承了Java的跨平台优势,实现“一次编写,处处运行”。因为支持Java及其相关技术的开发平台多,网站开发人员可以选择在最适合自己的系统平台上进行JSP开发;不同环境下开发的JSP项目,在所有客户端上都能顺利访问。

  • 页面中的动(控制变动内容的部分)/静(内容不需变动的部分)区域以分散但又有序的形式组合在一起,能使人更直观地看出页面代码的整体结构,也使得设计页面效果和程序逻辑这2部分工作容易分离(外观视图与逻辑分离)。从而方便分配人员并发挥各自长处,实现高效地分工合作。

  • 可与其它企业级Java技术相互配合。JSP可以只专门负责页面中的数据呈现,实现分层开发。

3、JSP与Servlet:

JSP是Servlet的扩展,在没有JSP之前,就已经出现了Servlet技术。Servlet是利用输出流动态生成HTML页面,包括每一个HTML标签和每个在HTML页面中出现的内容。 

由于包括大量的HTML标签、大量的静态文本及格式等,导致Servlet的开发效率极为低下。所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在Java代码中,这的确让人不胜其烦。 

JSP的出现弥补了这种不足,JSP通过在标准的HTML页面中插入Java代码,其静态的部分无须Java程序控制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用Java脚本控制。 

从表面上看,JSP页面已经不再需要Java类,似乎完全脱离了Java面向对象的特征。 
事实上,JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例——JSP页面由系统编译成Servlet,Servlet再负责响应用户请求。 

4、SP页面工作原理图,可以得到如下四个结论:

— JSP文件必须在JSP服务器内运行。

— JSP文件必须生成Servlet才能执行。

— 每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet。

— JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。


5、JSP和Servlet会有如下转换:

 JSP页面的静态内容、JSP脚本都会转换成Servlet的xxxService()方法,类似于自行创建Servlet时service()方法。

- JSP声明部分,转换成Servlet的成员部分。所有JSP声明部分可以使用private,protected,public,static等修饰符,其他地方则不行。

- JSP的输出表达式(<%= ..%>部分),输出表达式会转换成Servlet的xxxService()方法里的输出语句。

- 九个内置对象要么是xxxService()方法的形参,要么是该方法的局部变量,所以九个内置对象只能在JSP脚本和输出表达式中使用。

你可能感兴趣的:(java)