mac上间接启动tomcat
切到目录apache-tomcat-8.5.32/bin
执行命令sh startup.sh
启动胜利terminal上能够看到Tomcat started.
拜访http://localhost:8080/ bingo
敞开tomcat的时候执行命令sh shutdown.sh
跑一个tomcat目录下的我的项目apache-tomcat-8.5.32/webapps
比方这个目录下有一个manager我的项目,外面提供了一个index.jsp
拜访http://localhost:8080/manager/index.jsp
比方examples中配置的web.xml中有一条
<servlet-mapping> <servlet-name>HelloWorldExample</servlet-name> <url-pattern>/servlets/servlet/HelloWorldExample</url-pattern> </servlet-mapping>
拜访http://localhost:8080/examples/servlets/servlet/HelloWorldExample
idea 只含一个servlet的tomcat web
新建一个java web我的项目
new project -> java enterprise -> 抉择tomcat作为application server -> 勾选create project from template
创立一个servlet,在web.xml 中配置相应的servlet配置
配置tomcat (配置过程省略),配置Deployment的时候Application context配置成和我的项目一样的名字
启动tomcat,拜访http://localhost:8080/selfjavawebproj/myservlet
selfjavawebproj是web application的名字,myservet须要是在web.xml中配置的门路
tomcat的容器层级
tomcat的Servlet容器分为了四层,Engine->Host->Context->Wrapper
最内层的Wapper示意一个Servlet,Context示意一个应用程序,一个应用程序中会蕴含多个servlet,Host示意一个站点,一个站点下能够有多个应用程序,Engine示意引擎,用来治理多个站点。
在tomcat中的conf/server.xml中,能够配置多个service
以我的配置文件为例
<server> <Service name="Catalina"> //一个service下能够有多个connector,一个engine <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> <Engine name="Catalina" defaultHost="localhost">//蕴含多个host <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Engine> </service> <service> </service></server>
tomcat实现容器的时候定义了Container,外面定义了parent child这种角色,通过组合模式组装每一层级的容器
public interface Container extends Lifecycle { public void setName(String name); public Container getParent(); public void setParent(Container container); public void addChild(Container child); public void removeChild(Container child); public Container findChild(String name);}
http://localhost:8080/selfjavawebproj/myservlet
当收回这个申请时,
1 首先依据协定和端口号抉择service和Engine,对应下面的配置,只有一个service且连接器反对HTTP1.1,端口8080,所以找到了name为Catalina的service和name为Catalina的Engine
2 依据拜访的域名 localhost找到对应的host
3 依据url找到context,所以在后面配置的时候Application context配置的也是利用名称,在这里context就是selfjavawebproj
4 依据url找到Wrapper,即依据配置的门路在web.xml中找到对应的servlet实现类
然而并不是只有到了最初的Wrapper才真正开始解决申请,在两头的每一层都会对申请做这一层的解决,比方Engine先拿到申请,解决完Engine层的逻辑将申请给本人的child Host层,最初才到Wrapper ------ pipeline 责任链模式
具体在tomcat 这块是Pipeline-Valve 管道
Value示意一个解决点
public interface Valve { public Valve getNext(); public void setNext(Valve valve); public void invoke(Request request, Response response)}
Value中的invoke示意以后这个解决点的解决逻辑,getNext示意获取下一个解决点,getNext.invoke就触发了下一个解决点的解决逻辑
public interface Pipeline extends Contained { public void addValve(Valve valve); public Valve getBasic(); public void setBasic(Valve valve); public Valve getFirst();}
pipeline保护了这个value链,First是链的第一个,Basic是链的最初一个,Basic是关联下一级容器的第一个value
最初一级Wrapper的Basic指向Filter链,调用Filter链中doFilter办法,最初走到Servlet中的service办法