Tomcat

web相关概念回顾

# 软件架构
  * C/S:客户端/服务器端
  * B/S:浏览器/服务器端

# 资源分类
  * 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源。静态资源可以直接被浏览器解析
    * 如:HTML、CSS、JavaScript
  * 动态资源:每个用户访问相同资源后,得到的结果可能不一样,称为动态资源。动态资源被访问后,需要先转换为静态资源,再返回给浏览器
    * 如:Servlet/JSP,PHP,ASP

# 网络通信三要素
  * IP:电子设备(计算机)在网络中的唯一标识
  * 端口:应用程序在计算机中的唯一标识。0 ~ 65535
  * 传输协议:规定了数据传输的规则
    * 基础协议
      * TCP:安全协议,三次握手,速度稍慢
      * UDP:不安全协议,速度快

web服务器软件

# 服务器软件:软件的容器,接收用户的请求,处理请求,作出响应
  * 在 web服务器软件中,可以部署 web项目,让用户通过浏览器来访问这些项目

# 常见的 java 相关的 web 服务器软件
  * webLogic:Oracle公司开发,大型的 JavaEE 服务器,支持所有的 JavaEE规范,收费的
  * webSphere:IBM公司开发,大型的 JavaEE 服务器,支持所有的 JavaEE规范,收费的
  * JBOSS:JBOSS公司开发,大型的 JavaEE 服务器,支持所有的 JavaEE规范,收费的
  * Tomcat:Apache基金组织开发,中小型的 JavaEE 服务器,仅仅支持少量的 JavaEE 规范 Servlet/JSP,开源且免费的

# JavaEE
  * Java 语言在企业级开发中使用的技术规范的总和,一共规定了 13 项大的规范

# Tomcat:web 服务器软件
  * 下载http://tomcat.apache.org/
  * 安装:解压压缩包,把文件夹放到合适的路径下即可(建议目录中不要有中文和空格)
  * 卸载:删除目录即可
  * 启动
    * 找到 bin/startup.bat 文件,双击运行即可
    * 访问 http://localhost:8080 验证(冒号前面也可以输入 IP 地址)

  * 可能遇到的问题
    1)黑色窗口一闪而过
      * 原因:没有正确配置 JAVA_HOME 环境变量
    2)启动报错
      * 暴力解决:在 cmd 中 输入 netstat -ano,找到占用该端口的进程号,在任务管理器中关闭它
      * 温柔解决:修改自己的端口号
        * conf/server.xml
        * <Connector port="8080" protocol="HTTP/1.1"
         connectionTimeout="20000"
         redirectPort="8443" />
        *
 一般会将 tomcat 的默认端口号修改为 80,因为这是 HTTP协议的默认端口号,在访问时可以不用再输入端口号了

  * 关闭
    1)正常关闭:
      * 运行 bin/shutdown.bat  或者 在打开的dos窗口中按 ctrl + c
    2)强制关闭:
      * 点击启动窗口的 x
  * 配置
    * 部署项目的方式:
      1)直接将项目放到 webapps 目录下即可
        * /hello:项目的访问路径  --->  虚拟路径
        * 简化部署:将项目达成一个 war 包,再将 war 包放置到 webapps目录下,war 包会自动解压

      2)配置 conf/server.xml 文件
        * 在<Host>标签中配置
        * <Context docBase="D:hello" path="/hehe" />
          * docBase:项目存放的路径
          * path:虚拟目录

      3)在 conf/Catalina/localhost 创建任意名称的 xml文件,在文件中编写
        * <Context docBase="D:hello">
          * 虚拟目录:xml文件的名称

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- Note:  A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/server.html
 -->
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <!-- A "Service" is a collection of one or more "Connectors" that share
       a single "Container" Note:  A "Service" is not itself a "Container",
       so you may not define subcomponents such as "Valves" at this level.
       Documentation at /docs/config/service.html
   -->
  <Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->


    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation. The default
         SSLImplementation will depend on the presence of the APR/native
         library and the useOpenSSL attribute of the
         AprLifecycleListener.
         Either JSSE or OpenSSL style configuration may be used regardless of
         the SSLImplementation selected. JSSE style configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
         This connector uses the APR/native implementation which always uses
         OpenSSL for TLS.
         Either JSSE or OpenSSL style configuration may be used. OpenSSL style
         configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host).
         Documentation at /docs/config/engine.html -->

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <Engine name="Catalina" defaultHost="localhost">

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>
server.xml

    * java动态项目的目录结构
      -- 项目的根目录
       -- WEB-INF 目录
        -- web.xml文件:web项目的核心配置文件
        -- classes目录:放置字节码文件的目录
        -- lib目录:放指依赖的 jar包

    * 将 Tomcat 集成到 IDEA 中,并且创建 JavaEE项目,部署项目

 

  * 在IDEA中创建JavaWeb项目

 

原文地址:https://www.cnblogs.com/zhaochuming/p/13466810.html