关于tomcat:部署tomcat项目

24次阅读

共计 2730 个字符,预计需要花费 7 分钟才能阅读完成。

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 办法

正文完
 0