CGI概述:
CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程,能够使应用程序(通常称为CGI程序或CGI脚本)同web服务器和客户端进行交互
CGI工作步骤如下:
- 客户端发出请求
- Web服务器激活CGI程序
- CGI程序对客户端的请求做出反应
- Web服务器将CGI的处理结果传送给客户端
- Web服务器中断和客户端浏览器的链接
- Web 浏览器将CGI程序的输出显示到浏览器的窗体
简单讲讲Tomcat:
Web服务器有好比如Tomcat,Jetty,.NET开发—IIS等。HTTP服务器是使用HTTP(超文本传输协议)与客户机浏览器进行信息交流。
Tomcat架构
Tomcat Server核心是一个 Servlet/JSPContainer。
对每一个HTTP请求,过程如下:
- 获取请求连接(比如"/a.html")
- Tomcat Connector将请求传送给Container模块
- Container组装HttpServletRequest对象,根据路由配置,搜索相应的Servlet,并创建一个线程处理本次请求。此时线程会将上面Request和Response对象的索引,传递给Servlet。
- Servlet来分析请求(HttpServletRequest),调用其service方法,进行业务处理
- 返回响应(HttpServletResponse)
-
关闭连接
Tomcat_process.jpg
Servlet是线程安全的吗?
不是,一个servlet实现类只会有一个实例对象,多个线程是可能会访问同一个servlet实例对象的,线程安全问题都是由全局变量及静态变量引起的。
Servlet是单例吗?
不一定是,在一个ServeltName情况下是的。在多个ServletName匹配到一个Servlet类时,该Servlet不是单例。
代码相关:
继承了HttpServlet(抽象类)的类需要在类定义前面添加注解WebServlet且至少要有一个urlPatterns
@WebServlet(urlPatterns = {"/helloWorld01.html", "/helloWorld02.html")
根据http请求为那种请求方式重写doGet、doPost、doPut、doDelete方法,但至少实现一个方法
Servlet概述:
servlet是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
服务器上需要一些程序,常常是根据用户输入访问数据库的程序。
在通信量大的服务器上,Java Servlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程。这意味着服务器端处理请求的系统开销将明显降低。Servlet由java编写,因此是平台独立的。
Servlet执行过程:
- 客户端发送请求至服务器端
- 服务器将请求信息发送至Servlet容器对应的servlet
- Servlet生成响应内容并将其传给服务器
- 服务器将响应返回给客户端
时序图如下
servlet.pngServlet的初始化
- 如果没有设置loadOnStartup,则第一次请求的时候实例化
- loadOnStartup < 0
即负数的情况下,web容器启动的时候不做实例化处理,servlet首次被调用时做实例化,这种情况和没有设置loadOnStartup是一样的。 - loadOnStartup > 0
web容器启动的时候做实例化处理,顺序是由小到大,正整数小的先被实例化 - loadOnStartup = 0
web容器启动的时候做实例化处理,相当于是最大整数,因此web容器启动时,最后被实例化
网友评论