(十一)How Tomcat Works - Tomcat ShutdownHook
Tomcat启动后应该使用shutdown.sh脚本,给Server发送”SHUTDOWN”进行关闭,完成Tomcat lifecycle的stop阶段。但是如果用户直接强制退出了,还能执行清理阶段吗? ShutdownHook Catalina注册shutdownhook ShutdownHook Java有关闭机制。在jvm退出(只有守护线程、或者Linux命令行Ctrl...
Tomcat启动后应该使用shutdown.sh脚本,给Server发送”SHUTDOWN”进行关闭,完成Tomcat lifecycle的stop阶段。但是如果用户直接强制退出了,还能执行清理阶段吗? ShutdownHook Catalina注册shutdownhook ShutdownHook Java有关闭机制。在jvm退出(只有守护线程、或者Linux命令行Ctrl...
回顾之前所说的“关联”,比如Server关联Service,Service关联Connector和Container,Container关联子Container等等,都是通过setXXX方法将后者放入前者,使前者持有后者的引用,以此达成“关联”的效果。 Tomcat作为一个servlet容器,让用户部署web应用,这些“关联”应该由用户来决定,用户怎么告诉Tomcat哪个组件关联哪个组件?...
之前定义完Connector和Container,直接手动分别启动二者,并使用read来阻止主线程退出,过于简陋,不能算是一个生产环境的Tomcat。至少存在三个不太好的地方: 手动启动Connector和Container,启动方式不够优雅; 关闭方式不够优雅; 只有一个Connector,如果有多个Connector,就可以一个处理http请求,一个处理https请求; ...
session可以让Tomcat识别多个请求来自于同一个用户,既然涉及到用户,就涉及到权限。比如有的servlet只有管理员才能访问,其他的普通用户也可以访问。 org.apache.catalina.Realm org.apache.catalina.Authenticator 关于认证的知识 权限配置 http认证过程 ...
http是无状态的,但是很多应用都要记住不同的请求来自同一个用户,比如需要登录的网站。servlet规范定义了javax.servlet.http.HttpSession来做这件事:Provides a way to identify a user across more than one page request or visit to a Web site and to store in...
Tomcat是一个servlet容器,要载入程序猿开发的servlet才能使用servlet的功能。servlet类的载入本质上使用的是jdk提供的ClassLoader,但是Tomcat很有必要制定一套自己的Loader,在load servlet class时制定一些规则。 org.apache.catalina.Loader WebappLoader &am...
servlet是有生命周期的,需要在不同的阶段调用init/destory等。同时Tomcat包含有很多组件,他们的启动必然是有先后顺序的,也是有联系的,不能漏掉任何一个。为了统一启动关闭这些组件,最好的办法就是给组件都加上生命周期。 org.apache.catalina.Lifecycle Lifecycle vs. Pipeline or...
上一节讲了半天,经历了“client request -> server http connector -> processor -> parse http request”,终于才提到“使用servlet处理请求”。 而处理请求的代码就两行——使用container处理请求: ((HttpServletResponse) response...
显然,servlet容器承担了两部分的职责:作为web server处理http请求;作为servlet容器处理servlet相关的内容。Tomcat在实现时按照这两部分,可以被归类为两个主要模块: 连接器(Connector):处理http相关内容; servlet容器(Container):处理servlet相关内容; 朴素connector和processor ...
web server搭建完成了,servlet server(或者说servlet容器)又是什么东西?和web server又有什么区别? javax.servlet.Servlet:servlet是什么 引入servlet javax.servlet.ServletRequest & javax.servlet.ServletResp...