Web应用不仅局限于展示在服务器上的静态页面,更多的是根据用的请求动态的生成页面信息,还可以从数据库中提取数据,生成页面返回给用户。

第一种方法:遵循HTTP协议实现一个服务器端软件

第二种方法:利用已实现HTTP协议的服务器端软件留出的扩展接口,根据相应的规则提供扩展功能

最早的Web服务器扩展机制是CGI,允许用户调用Web服务器上的CGI程序。

CGI的全称Common Gateway Interface,即公共网关接口。

大多数CGI程序用Perl编写,也有用C、Python或PHP来编写的。

用户访问CGI的过程包括:

  1. 用户通过单击某个链接或者直接在浏览器输入URL来访问CGI程序;
  2. web服务器接收到请求后,发现这个请求是给CGI程序的,于是就启动并运行这个CGI程序;
  3. CGI程序解析请求中的CGI数据,处理数据并产生一个响应,这个响应通常是HTML页面;
  4. 这个响应被返回给Web服务器,Web服务器包装这个响应,以HTTP响应的形式发送给Web浏览器。

CGI的缺点有:

CGI程序编写困难;

对用户请求的响应时间比较长;

以进程的方式导致性能受限。

CGI的其他解决方案:

Sun公司的Servlet技术(97年),JSP技术(98年);

微软公司的ASP技术(96年);

Rasmus Lerdorf在94年发明的PHP。

Servlet和Servlet容器

Java Servlet(Java服务器小程序)是一个基于Java技术的Web组件,运行在服务器端,由Servelet容器所管理,用于生成动态内容。

Servlet是平台独立的Java类,写一个Servlet实际上就是按照Servlet的规范编写一个Java类。

Servlet容器有时也叫Servlet引擎,是Web服务器或应用程序的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应;

Servlet不能独立运行,必须被部署到Servlet容器中,由容器来实例化和调用Servlet的方法;

Servlet容器在Servlet的生命周期内包容和管理Servlet。

JSP推出后,管理和运行Servlet/JSP的容器也被称为Web容器。

用户访问Servlet的过程包括:

用户通过点击链接或者在地址栏输入URL来访问Servlet;

Web服务器接收到该请求后,并不是直接将请求直接交给Servlet,而是交给Servlet容器;

Servlet容器实例化Servlet,调用Servlet的一个特定方法对请求进行处理,并产生一个响应;

这个响应由Servlet容器返回给Web服务器;

Web服务器包装该响应,以HTTP响应的形式发送给Web浏览器。

相比于CGI,Servlet有一下优势:

Servlet的单实例多线程运行方式,每个请求在一个独立的线程中运行,而提供服务的Servlet实例只有一个;

Servlet使用线程而不是操作系统进程;

Servlet使用标准的API,被更多的Web服务器所支持;

Servlet采用Java编写,具有容易开发和平台独立的优点;

Servlet可以访问Java平台丰富的类库;

Servlet容器给Servlet提供额外的功能,如错误处理和安全。

Servlet容器有三类:

独立的Servlet容器;

进程内的Servlet容器;

进程外的Servlet容器。

Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。

不过Tomcat处理静态HTML的功能不如Apache,我们可以将二者结合起来使用,Apache作为HTTP Web服务器,Tomcat作为Web容器。

Tomcat服务器接受用户请求并做出响应的过程

客户端(通常是浏览器)访问Web服务器,发送HTTP请求;

Web服务器接收到请求后,传递给Servlet容器;

Servlet容器加载Servlet,产生Servlet实例后,向其传递表示请求和响应的对象;

Servlet实例使用请求对象获得客户端的请求信息,然后进行相应的处理;

Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应正确送出,同时将控制返回给Web服务器。

Tomcat目录结构及其用途

目录 用途
/bin 存放启动和关闭Tomcat的脚本
/conf 存放Tomcat的各种配置文件,其中包括Server.xml(主要配置文件)
/lib 存放Tomcat服务器和Web应用程序需要访问的JAR文件
/logs 日志文件
/temp 临时文件
/webapps 发布Web应用程序时,将Web应用程序的目录和文件放到这个目录下
/work Tomcat将JSP生成的Servlet源文件和字节码文件放于此

Tomcat安装目录下的conf子目录用于存放Tomcat服务器的各种配置文件,其中的server.xml是Tomcat的主要配置文件,这是一个格式良好的XML文档,在这个文件中可以修改Tomcat默认监听的端口号。

<Connector port=”8080” protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

Tomcat启动分析

主要是分析几个bin下的脚本

Tomcat体系结构(这里还没怎么看懂,先放一下吧

Servlet与Tomcat的更多相关文章

  1. 在eclipse中新建Dynamic web project时选择2.5和3.0的区别(里面涉及servlet和tomcat的问题)

    1.是指servlet的版本,是2.5的还是3.0的 servlet3.0以后支持异步 2.dynamic web module和对应的TOMCAT 版本 http://blog.sina.com.c ...

  2. Servlet(1)—Servlet容器tomcat和HTTP协议

    Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理他们的共享数据. Servlet容器也称JavaWeb应用容器,或者Servlet/JSP容器 ...

  3. 对于Servlet、Servlet容器以及一个Servlet容器-Tomcat

    Servlet.Servlet容器等内容讲解 转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的 ...

  4. Servlet与Tomcat运行示例

    Servlet与Tomcat运行示例 本文将写一个servlet,然后将其部署到Tomcat的全过程.本文参考<深入拆解Tomcat_Jetty>内容. 一.基于web.xml开发步骤 下 ...

  5. Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]

    目录 前言 现象 源码分析 实战例子 总结 参考资料 前言 今天研究了一下tomcat上web.xml配置文件中url-pattern的问题. 这个问题其实毕业前就困扰着我,当时忙于找工作. 找到工作 ...

  6. Servlet和Tomcat部署

    今天有空写个Servlet来玩一下.用EditPlus写一个简单的Servlet,FirstServlet.java,如下: import java.io.IOException; import ja ...

  7. Servlet、Tomcat访问(access)日志配置、记录Post请求参数

    一.运行环境: Maven:3.5.2(点击下载) ,下载页 Tomcat:8.5.29(点击下载) ,下载页 JDK:jdk1.7.0_80(点击下载) ,下载页 MavenDependency: ...

  8. 认识JavaWeb,servlet, JSP, Tomcat, http协议,Web服务器

    JavaWeb通常指服务器端的Java应用开发. 一般来说,服务器是在网络通信条件下工作的,这就离不开http协议. HTTP协议,是为服务器和客户端通信提供的规范,其中规定了信息的格式,符合规范格式 ...

  9. 【Tomcat】JVM,Tomcat,Servlet,Tomcat中的应用。彻底弄懂这些概念之间的联系

    tomcat和tomcat中的应用(即webapps下的war包)是运行在同一个jvm中的,但分工不同. tomcat的角色是“调度员”,而你的应用的角色是“工作者”,tomcat处理一个请求的大致过 ...

随机推荐

  1. TortoiseSVN,排除不想提交文件的方法(转)

    转自:tortoisesvnsubversionfilebuilddialoglist 下面是英文帮助: 利用TortoiseSVN的修改列表 功能可以实现,在新版本中TortoiseSVN特地预置了 ...

  2. JVM参数配置的线上教训

    原来规则处理业务五十台服务器经常大量fgc,load飙高,我修改了jvm配置后,五十台服务器十多天没有任何异常,双十一中轻闲度过. 可是今天突然又有一台大量fgc,load飙高.分析了半天,回头一看, ...

  3. V4L2应用程序框架-二【转】

    本文转载自:http://blog.csdn.net/tommy_wxie/article/details/11371439 V4L2驱动框架 主设备号: 81 次设备号:    0-63    64 ...

  4. stdout.read()与stdout.readlines()方法同时使用后果

    stdout.read()与stdout.readlines()方法同时使用将无法导致最后使用的stdout.readlines()读取的内容为空,原因是首先调用的stdout.read()已将数据读 ...

  5. 161028、Nginx负载均衡实现tomcat集群方案简要小结

    重点两部分:一.负载均衡二.tomcat集群 所谓tomcat集群,就是可以向外提供并行服务的多台机器,任何一台服务器宕机,其它服务器可以替代它向外提供服务,而不影响用户访问. Nginx是一个常用的 ...

  6. STM32模拟I2C

    之前为了测试, 拿最小板做了一个I2C的主发跟主读, 一开始当然是尝试用硬件I2C, 结果弄了很久, 时间紧迫, 只好用了模拟, 结果发现, 哎, 真特么挺好用的, 现在1片儿顶过去5片儿. 硬件I2 ...

  7. word2007里插入分节符

    1.打开Word文档,将鼠标定位到需要插入分页符的位置(比如第2页的末尾处),切换到"页面布局"功能区. 2.在"页面设置"分组中单击"分隔符&quo ...

  8. Java局部变量final

    局部变量和形参带final. 在一个线程A中开起另一个线程B,如果线程B要使用线程A的局部变量,那么A的局部变量需要定义成final.理由:局部变量是线程内部共享的,每一个线程内的不能访问其他线程的局 ...

  9. [转]jexus的安装

    转自http://www.cnblogs.com/xiaodiejinghong/p/3720921.html 这是一个集成了 mono3.4.0 和 jexus5.6.0 的 jexus+mono ...

  10. test if DEMO

    可参考:http://blog.chinaunix.net/uid-20671208-id-3643362.html 1.test 举例: test -d ~/auto && echo ...