TOMCAT的SERVER.XML的详细说明

2023-11-02

!-- Example Server Configuration File -->
<!-- Tomcat服务器配置示例文件 -->

<!-- Note that component elements are nested corresponding to their
     parent-child relationships with each other -->
<!-- 注意,这些组件的构成是根据相互之间的父子关系进行嵌套的。-->

<!-- A "Server" is a singleton element that represents the entire JVM,
     which may contain one or more "Service" instances. The Server
     listens for a shutdown command on the indicated port.

     Note: A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" or "Loggers" at this level.
 -->
<!-- 一个“Server”是一个提供完整的JVM的独立组件,它可以包含一个或多个
     “Service”实例。服务器在指定的端口上监听shutdown命令。
     
     注意:一个“Server”自身不是一个“Container”(容器),因此在这里你
     不可以定义诸如“Valves”或者“Loggers”子组件
-->

<Server port="8005" shutdown="SHUTDOWN" debug="0">


  <!-- Comment these entries out to disable JMX MBeans support -->
  <!-- 这些指令组件关闭JMX MBeans支持 -->
  
  <!-- You may also configure custom components (e.g. Valves/Realms) by
       including your own mbean-descriptor file(s), and setting the
       "descriptors" attribute to point to a ';' seperated list of paths
       (in the ClassLoader sense) of files to add to the default list.
       e.g. descriptors="/com/myfirm/mypackage/mbean-descriptor.xml"
  -->
  <!-- 你也可以通过包含你自己的mbean描述文件配置自定义的组件,然后设置
       “descriptors”属性为以“;”为分隔的文件名列表严将它添加到默认列表
       中,例如:descriptors="/com/myfirm/mypackage/mbean-descriptor.xml"。
 -->
       
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
            debug="0"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
            debug="0"/>

  <!-- Global JNDI resources -->
  <!-- 全局JNDI资源 -->
  <GlobalNamingResources>

    <!-- Test entry for demonstration purposes -->
    <!-- 出于示例目的的测试入口 -->
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>

    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users -->
    <!-- 可编辑的,用来通过UserDatabaseRealm认证用户的用户数据库 -->
    
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
       description="User database that can be updated and saved">
    </Resource>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>

  </GlobalNamingResources>

  <!-- A "Service" is a collection of one or more "Connectors" that share
       a single "Container" (and therefore the web applications visible
       within that Container). Normally, that Container is an "Engine",
       but this is not required.

       Note: A "Service" is not itself a "Container", so you may not
       define subcomponents such as "Valves" or "Loggers" at this level.
   -->
  <!-- 一个“Service”是一个或多个共用一个单独“Container”(容器)的“Connectors”
       组合(因此,应用程序在容器中可见)。通常,这个容器是一个“Engine”
       (引擎),但这不是必须的。
       
       注意:一个“Service”自身不是一个容器,因此,在这个级别上你不可定义
       诸如“Valves”或“Loggers”子组件。
  -->

  <!-- Define the Tomcat Stand-Alone Service -->
  <!-- 定义Tomcat的标准独立服务 -->
  <Service name="Catalina">

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Each Connector passes requests on to the
         associated "Container" (normally an Engine) for processing.

         By default, a non-SSL HTTP/1.1 Connector is established on port 8080.
         You can also enable an SSL HTTP/1.1 Connector on port 8443 by
         following the instructions below and uncommenting the second Connector
         entry. SSL support requires the following steps (see the SSL Config
         HOWTO in the Tomcat 5 documentation bundle for more detailed
         instructions):
         * If your JDK version 1.3 or prior, download and install JSSE 1.0.2 or
           later, and put the JAR files into "$JAVA_HOME/jre/lib/ext".
         * Execute:
             %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)
             $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA (Unix)
           with a password value of "changeit" for both the certificate and
           the keystore itself.

         By default, DNS lookups are enabled when a web application calls
         request.getRemoteHost(). This can have an adverse impact on
         performance, so you can disable it by setting the
         "enableLookups" attribute to "false". When DNS lookups are disabled,
         request.getRemoteHost() will return the String version of the
         IP address of the remote client.
    -->
    <!-- 一个“Connector”(连接器)代表一个请求被接收和应答所需要的端点。每个连
         接器通过相关的“Container”(容器)处理请求。
         
         默认情况下,一个非SSL的HTTP/1.1的连接器被绑定在端口8080。你也可以通过
         根据后面的使用说明并取消第二个连接器入口的注释,在端口8443上建立一个
         SSL HTTP/1.1的连接器。开放SSL支持需要下面几步(参见Tomcat 5文档中怎样
         配置SSL的说明以取得更多的详细信息):
         * 如果你的JDK是1.3或1.3以前的版本,下载安装JSSE 1.0.2或以后版本,并放
           置JAR文件到“$JAVA_HOME/jre/lib/ext”目录下。
         * 带一个“changeit”的口令值执行:
             %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)
             $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA (UNIX)
           来生成它自己的证书私钥。
           
         默认情况下,当一个web应用程序调用请求时,DNS查询是可行的。这将对性能造
         成一些不利的影响,因此,你可以将“enableLookups”设置为“false”来关闭DNS
         查询。当DNS查询被关闭时,request.getRemoteHost()将返回包含远程客户IP地
         址的字符串。
  -->

    <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
    <!-- 在8080端口上定义一个非SSL的HTTP/1.1连接器 -->
    <Connector port="8080"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000"
               disableUploadTimeout="true" />
    <!-- Note : To disable connection timeouts, set connectionTimeout value
     to 0 -->
    <!-- 注意,要关闭连接超时,将connectionTimeout设置为0 -->

<!-- Note : To use gzip compression you could set the following properties :

compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml"
-->
<!-- 注意:要使用gzip压缩需要设置如下属性:

compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml"
-->

    <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
    <!-- 在端口8443上定义一个SSL的HTTP/1.1的连接器 -->
    <!--
    <Connector port="8443"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" debug="0" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
    -->

    <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
    <!-- 在端口8009上定义一个Coyote/JK2 AJP 1.3连接器 -->
    <Connector port="8009"
               enableLookups="false" redirectPort="8443" debug="0"
               protocol="AJP/1.3" />

    <!-- Define a Proxied HTTP/1.1 Connector on port 8082 -->
    <!-- 在8082端口上定义一个代理HTTP/1.1连接器 -->
    <!-- See proxy documentation for more information about using this. -->
    <!-- 参见代理文档以取得这里使用属性的更多的信息。 -->
    <!--
    <Connector port="8082"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false"
               acceptCount="100" debug="0" connectionTimeout="20000"
               proxyPort="80" disableUploadTimeout="true" />
    -->

    <!-- 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). -->
    <!-- 一个“Engine”(引擎)代表处理每个请求的入口点(在Catalina内)。这个Tomcat
         的标准独立引擎实现分析包含在请求中的HTTP头信息,并将请求传送到适当的主机
         或虚拟主机上。-->

    <!-- You should set jvmRoute to support load-balancing via JK/JK2 ie :
    <Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="jvm1">
    -->
    <!-- 你应该这样设置jvmRoute以便在JK/JK2通道上支持负载平衡:
    <Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="jvm1">
    -->
         
    <!-- Define the top level container in our container hierarchy -->
    <!-- 在我们的容器体系中定义最高级别的容器 -->
    <Engine name="Catalina" defaultHost="localhost" debug="0">

      <!-- The request dumper valve dumps useful debugging information about
           the request headers and cookies that were received, and the response
           headers and cookies that were sent, for all requests received by
           this instance of Tomcat. If you care only about requests to a
           particular virtual host, or a particular application, nest this
           element inside the corresponding <Host> or <Context> entry instead.

           For a similar mechanism that is portable to all Servlet 2.4
           containers, check out the "RequestDumperFilter" Filter in the
           example application (the source for this filter may be found in
           "$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters").

           Request dumping is disabled by default. Uncomment the following
           element to enable it. -->
      <!-- 请求转储器值转储非常有用的通过Tomcat这个实例接收到的所有请求的,关于
           接收到的请求头和cookies,以及发送出的回应头和cookies的调试信息。如果
           你只在意一个特定的虚拟主机或者一个特定应用程序的请求,在对应的<Host>
           或<Context>入口中套用这个元素。
           
           对于所有的Servlet(小服务程序)2.4来所,在示例程序中检验
           “RequestDumperFilter”过滤是非常容易的(这个过滤器源代码可以在
           “$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters”下找到。
           
           请求转储默认情况下是关闭的,如果要使用它,取消下面行的注释符。-->
      <!--
      <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
      -->

      <!-- Global logger unless overridden at lower levels -->
      <!-- 全局日志设置,除非在更低的级别上覆盖它的设置 -->
      <Logger className="org.apache.catalina.logger.FileLogger"
              prefix="catalina_log." suffix=".txt"
              timestamp="true"/>

      <!-- Because this Realm is here, an instance will be shared globally -->
      <!-- 因为这个Realm(区域)在这儿,因此这个实例将被全局共享。 -->

      <!-- 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(区域)使用在全局JNDI资源下,由“UserDatabase”配置的用户
           数据库。通过使用Realm将使对于这个用户数据库的任何编辑都将会立即可用
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                 debug="0" resourceName="UserDatabase"/>

      <!-- Comment out the old realm but leave here for now in case we
           need to go back quickly -->
      <!-- 注释掉旧有的Realm以便我们能很快速的恢复旧有配置。 -->
      <!--
      <Realm className="org.apache.catalina.realm.MemoryRealm" />
      -->

      <!-- Replace the above Realm with one of the following to get a Realm
           stored in a database and accessed via JDBC -->
      <!-- 下面的属性用于从储存在数据库或从JDBC通道中得到的Realm以取代上面的
           Realm配置。-->

      <!--
      <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
             driverName="org.gjt.mm.mysql.Driver"
          connectionURL="jdbc:mysql://localhost/authority"
         connectionName="test" connectionPassword="test"
              userTable="users" userNameCol="user_name" userCredCol="user_pass"
          userRoleTable="user_roles" roleNameCol="role_name" />
      -->

      <!--
      <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
             driverName="oracle.jdbc.driver.OracleDriver"
          connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
         connectionName="scott" connectionPassword="tiger"
              userTable="users" userNameCol="user_name" userCredCol="user_pass"
          userRoleTable="user_roles" roleNameCol="role_name" />
      -->

      <!--
      <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
             driverName="sun.jdbc.odbc.JdbcOdbcDriver"
          connectionURL="jdbc:odbc:CATALINA"
              userTable="users" userNameCol="user_name" userCredCol="user_pass"
          userRoleTable="user_roles" roleNameCol="role_name" />
      -->

      <!-- Define the default virtual host
           Note: XML Schema validation will not work with Xerces 2.2.
       -->
      <!-- 定义默认的虚拟主机
           注意:XML模式确认将不能与Xerces 2.2同工作。
      -->
      <Host name="localhost" debug="0" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

        <!-- Defines a cluster for this node,
             By defining this element, means that every manager will be changed.
             So when running a cluster, only make sure that you have webapps in there
             that need to be clustered and remove the other ones.
             A cluster has the following parameters:
             为这个结点定义一个群集,通过定义这个元素,意味着每个管理员都将被改变。
             因此,当运行一个群集时,只有确认在必须被聚集和移除其他的地方有你的
             web软件。
             一个群集有下面这些参数:

             className = the fully qualified name of the cluster class
             className = 这个群集类的全限定名

             name = a descriptive name for your cluster, can be anything
             name = 你的群集的描述名,可以是任何描述

             debug = the debug level, higher means more output
             debug = 调试级别,更高意味着更多的输出

             mcastAddr = the multicast address, has to be the same for all the nodes
             mcastAddr = 多播地址,所有的节点都必须有同样的多播地址

             mcastPort = the multicast port, has to be the same for all the nodes
             mcastPort = 多播端口,对所有的节点都必须有同样的多播端口
             
             mcastBindAddr = bind the multicast socket to a specific address
             mcastBindAddr = 绑定多播套接字到一个指定的地址
             
             mcastTTL = the multicast TTL if you want to limit your broadcast
             mcastTTL = 多播生存期,如果你想要限制你的广播的话
             
             mcastSoTimeout = the multicast readtimeout
             mcastSoTimeout = 多播读取超时

             mcastFrequency = the number of milliseconds in between sending a "I'm alive" heartbeat
             mcastFrequency = 发送“I'm alive”(我还活着)信息的间隔毫秒数

             mcastDropTime = the number a milliseconds before a node is considered "dead" if no heartbeat is received
             mcastDropTime = 多长时间没有收到“I'm alive”就将这个节点标识为死节点(单位:毫秒)

             tcpThreadCount = the number of threads to handle incoming replication requests, optimal would be the same amount of threads as nodes
             tcpThreadCount = 用于处理重复引入请求的线程数,最好是每个节点都有相同的线程数

             tcpListenAddress = the listen address (bind address) for TCP cluster request on this host,
                                in case of multiple ethernet cards.
                                auto means that address becomes
                                InetAddress.getLocalHost().getHostAddress()
             tcpListenAddress = 在有多块以太网卡的主机上的监听TCP群集请求的地址(绑定地址),
                                auto意味着地址由InetAddress.getLocalHost().getHostAddress()取得。

             tcpListenPort = the tcp listen port
             tcpListenPort = tcp监听端口

             tcpSelectorTimeout = the timeout (ms) for the Selector.select() method in case the OS
                                  has a wakup bug in java.nio. Set to 0 for no timeout
             tcpSelectorTimeout = 在操作系统中有java.nio唤醒错的情况下,使用Selector.select()的超时
                                  毫秒数。设为0则没有超时限制

             printToScreen = true means that managers will also print to std.out
             printToScreen = true意味着管理员的相关信息也将打印输出到std.out

             expireSessionsOnShutdown = true means that
             expireSessionsOnShutdown = true 意味着?????

             useDirtyFlag = true means that we only replicate a session after setAttribute,removeAttribute has been called.
                            false means to replicate the session after each request.
                            false means that replication would work for the following piece of code:
                            <%
                            HashMap map = (HashMap)session.getAttribute("map");
                            map.put("key","value");
                            %>
             useDirtyFlag = true意味着我们只能在调用setAttribute,removeAttribute后才能复制一个会话;
                            false意味着在每个请求后复制会话。
                            false意味着复制将以下列代码方式工作:
                            <%
                            HashMap map = (HashMap)session.getAttribute("map");
                            map.put("key","value");
                            %>
                            
             replicationMode = can be either 'pooled', 'synchronous' or 'asynchronous'.
                               * Pooled means that the replication happens using several sockets in a synchronous way. Ie, the data gets replicated, then the request return. This is the same as the 'synchronous' setting except it uses a pool of sockets, hence it is multithreaded. This is the fastest and safest configuration. To use this, also increase the nr of tcp threads that you have dealing with replication.
                               * Synchronous means that the thread that executes the request, is also the
                               thread the replicates the data to the other nodes, and will not return until all
                               nodes have received the information.
                               * Asynchronous means that there is a specific 'sender' thread for each cluster node,
                               so the request thread will queue the replication request into a "smart" queue,
                               and then return to the client.
                               The "smart" queue is a queue where when a session is added to the queue, and the same session
                               already exists in the queue from a previous request, that session will be replaced
                               in the queue instead of replicating two requests. This almost never happens, unless there is a
                               large network delay.
             replicationMode = 可以是“pooled”、“synchronous”或者“asynchronous”
                               * Pooled意味着在多个套接字上同步进行复制。例如,先复制数据,然后请求返回。
                               这与“synchronous”相同,除了它使用一个套接字池,因此,它是多线程的。它是
                               最快和最高级的设置,使用这个配置也增加了处理复制的tcp线程的域。
                               * Synchronous指执行请求的线程,它也是向其他节点复制数据的线程,并且直到
                               所有的节点都己经收到信息后才返回。
                               * Asynchronous,对每个群集节点而言,这是一个特别的“sender”(发送者)线程,
                               因此请求线程将复制请求排队到一个小队列中,然后,返回给用户。
                               这个小队列是一个当会话被添加到队列中,而从先前的请求中,同一个会话己经存在
                               ,这个会话将被放置在队列中以代替重复的两个请求。这几乎从不会发生,除非存在
                               较大的网络延迟。
        -->
        <!--
            When configuring for clustering, you also add in a valve to catch all the requests
            coming in, at the end of the request, the session may or may not be replicated.
            A session is replicated if and only if all the conditions are met:
            1. useDirtyFlag is true or setAttribute or removeAttribute has been called AND
            2. a session exists (has been created)
            3. the request is not trapped by the "filter" attribute

            The filter attribute is to filter out requests that could not modify the session,
            hence we don't replicate the session after the end of this request.
            The filter is negative, ie, anything you put in the filter, you mean to filter out,
            ie, no replication will be done on requests that match one of the filters.
            The filter attribute is delimited by ;, so you can't escape out ; even if you wanted to.

            filter=".*\.gif;.*\.js;" means that we will not replicate the session after requests with the URI
            ending with .gif and .js are intercepted.
        -->
        <!-- 当配置群集时,你也添加一个值来捕获所有传入的请求,在请求结束时,这个会话可能被子复制,
             也可能不被复制。一个会话是否复制取决于下列条件是否发生:
             1. useDirtyFlag为真,或者setAttribute或者removeAttribute己经被调用。
             2. 会话己经存在(己经被创建了)。
             3. 请求没有被“filter”属性所捕获。
             
             这个filter(过滤器)属性用于过滤那些不能修改会话的请求,因此,我们在这个请求结束后不复制
             会主。这个过滤器是消极的,例如,你向过滤器发送了一些东西,然后被过滤出去,在那个匹配的过
             滤器上不会发生复制。
             过滤器属性以分号为分隔,因此你不能换行,即使你想这么做。
             
             filter=".*\.gif;.*\.js;"意味着在进行以.gif和.js结束的URI请求后不复制会话。
        
        <!--
        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                 expireSessionsOnShutdown="false"
                 useDirtyFlag="true">

            <Membership
                className="org.apache.catalina.cluster.mcast.McastService"
                mcastAddr="228.0.0.4"
                mcastPort="45564"
                mcastFrequency="500"
                mcastDropTime="3000"/>

            <Receiver
                className="org.apache.catalina.cluster.tcp.ReplicationListener"
                tcpListenAddress="auto"
                tcpListenPort="4001"
                tcpSelectorTimeout="100"
                tcpThreadCount="6"/>

            <Sender
                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                replicationMode="pooled"/>

            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
        </Cluster>
        -->



        <!-- Normally, users must authenticate themselves to each web app
             individually. Uncomment the following entry if you would like
             a user to be authenticated the first time they encounter a
             resource protected by a security constraint, and then have that
             user identity maintained across *all* web applications contained
             in this virtual host. -->
        <!-- 通常,对每一个应用程序,用户必须逐个的认证他们自己。当他们遇到被
             某种安全约束所保护的资源时,如果你想让用户只在第一次被认证,那么,
             取消下面入口行的注释,然后在这个虚拟主机中包含这个用户的,横跨所有
             web应用程序的用户身份识别。-->
             
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn"
                   debug="0"/>
        -->

        <!-- Access log processes all requests for this virtual host. By
             default, log files are created in the "logs" directory relative to
             $CATALINA_HOME. If you wish, you can specify a different
             directory with the "directory" attribute. Specify either a relative
             (to $CATALINA_HOME) or absolute path to the desired directory.
        -->
        <!-- 这个虚拟主机的所有请求的访问日志过程。默认情况下,日志文件被创建在相对
             于$CATALINA_HOME目录下的logs目录下。通过directory属性,你也可以指定一个
             不同的目录,如果你想的话。可以使用相对路径(相对于$CATALINA_HOME),也
             可以使用绝对路径。-->
        <!--
        <Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs" prefix="localhost_access_log." suffix=".txt"
                 pattern="common" resolveHosts="false"/>
        -->

        <!-- Logger shared by all Contexts related to this virtual host. By
             default (when using FileLogger), log files are created in the "logs"
             directory relative to $CATALINA_HOME. If you wish, you can specify
             a different directory with the "directory" attribute. Specify either a
             relative (to $CATALINA_HOME) or absolute path to the desired
             directory.-->
        <!-- 与这个虚拟主机有关系所有上下文所共享的日志。默认情况下(使用FileLogger时),
             日志文件被创建在相对于$CATALINA_HOME目录下的logs目录下。如果你希望,你也可
             以给directory指定一个不同的路径。可以使用相对于$CATALINA_HOME的相对路径,也
             可以使用绝对路径。
        <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs" prefix="localhost_log." suffix=".txt"
            timestamp="true"/>

      </Host>

    </Engine>

  </Service>

</Server>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TOMCAT的SERVER.XML的详细说明 的相关文章

  • 您是否对基于 GWT 的应用程序的客户端和服务器端使用单个项目或单独的项目?

    您的 GWT 项目设置如何 您是否有一个针对客户端的项目和针对服务器端的单独项目 您能分享一下您为 GWT 前端 Spring 后端系统组织项目的经验吗 我希望在这个项目中使用 Spring GWT Tomcat Hibernate 除非您
  • Python - 对象 MagicMock 不能在“await”表达式中使用

    当我尝试使用 MagicMock 在单元测试中模拟异步函数时 出现以下异常 类型错误 对象 MagicMock 不能在 await 表达式中使用 示例代码如下 source code class Service async def comp
  • 在 Tomcat 中触发内部 ServletRequest

    我正在使用 Quartz 来安排 Web 应用程序的后台任务 其中一些任务只是针对同一 Web 应用程序发出请求 我想避免依赖于任何类型的网络设置 例如 如果从数据中心内发出带有我自己域名的请求 则可能无法正确路由 是否有一个 Java A
  • 在此异步设置中,我在哪里捕获 KeyboardInterrupt 异常

    我正在开发一个使用ccxt异步库 它要求通过显式调用该类的资源来释放某个类使用的所有资源 close 协程 我想退出程序ctrl c并等待异常中的关闭协程 然而 它永远不会被等待 该应用程序由模块组成harvesters strategie
  • 访问 webapp 外部的文件(Tomcat V6 和 Spring)

    我提供上传图像的选项 并且图像正在上传到 opt uploads contactImages 在 Windows 中为 C opt uploads contactImages 我想在我的 JSP 中显示图像 为此 我尝试通过在主机标签下添加
  • JavaScript fetch API - 为什么response.json()返回一个promise对象(而不是JSON)? [复制]

    这个问题在这里已经有答案了 我刚刚开始学习 Fetch API https developer mozilla org en US docs Web API Fetch API Using Fetch https developer moz
  • 异步编程设计模式

    我正在为 CF NET 开发一个小型技术框架 我的问题是 我应该如何编写异步部分的代码 在 MSDN 上阅读了很多内容 但我不太清楚 所以 这是代码 public class A public IAsyncResult BeginExecu
  • YouTube 播放器 API:getDuration()、getCurrentTime()、getVideoData() 不起作用

    对于我的应用程序 我尝试使用 YouTube Iframe 播放器 API 来播放视频 并允许用户更改视频而无需重新加载页面 我通过使用来实现这一点player loadVideoById video id 方法 通过YouTube视频id
  • PHP 可以解压缩使用 .NET GZipStream 类压缩的文件吗?

    我有一个 C 应用程序 它与基于 PHP 的 SOAP Web 服务进行通信以进行更新和许可 我现在正在开发一个反馈系统 供用户通过软件自动提交错误和跟踪日志 根据我之前发布的问题 我认为 Web 服务将是实现此目的的最佳方法 最有可能以最
  • 运行时高压缩的 AS3 视频编码(H.264?)

    我需要在运行时将 AS3 中的视频图像数据 比如说显示对象 压缩为高压缩的字节数组 帧速率只需在 5 左右 但 1024x768 视频需要达到 使用 JPG 或 PNG 编码器可提供更高的 KB s 有没有开源方法可以在运行时对 as3 中
  • Tomcat - 多个 webapps 文件夹

    是否可以有多个文件夹来放置要部署的应用程序 这些是如何定义的 是否可以将一个文件夹限制为仅是 domain com 的应用程序 而不是其他域 Thanks 看一眼conf server xml
  • 无法在 Netbeans 9 中设置 apache tomcat

    我正在尝试在 Netbeans IDE 9 中设置 apache tomcat 我已尝试以下步骤 但无法设置 在 工具 gt 服务器 中 我单击 添加服务器 按钮 显示以下消息 因此 我尝试从 工具 gt 插件 安装插件 会显示一个对话框
  • Page.AsyncTimeout - 无休止的超时?

    I saw 一个例子 http www webreference com programming javascript rg30 index html of forever iframe实现 彗星模拟 所以我决定测试它 但添加了异步方法 这
  • 在 MVC4 中使函数异步时 HttpContext.Current null

    我目前正在 VS2010 SP1 中开发 MVC4 我做了其中一个功能 控制器类异步 作为其中的一部分 我制作了控制器类 派生自 AsyncController 并添加了以下两个方法 参见代码部分 1 和 2 下 一种以 Async 结尾的
  • Swift 对异步编程有什么语言级别的支持(如果有)?

    当应用程序必须通过不可预测的网络 例如智能手机应用程序 进行通信时 异步编程对于响应式用户界面来说是必须的 用户界面必须保持响应 同时等待结果从互联网上某处的服务器返回 在大多数语言中 应用程序程序员必须实现自己的状态机 可能使用闭包 来响
  • 仅在 Tomcat Web 应用程序上为表单登录设置 SSL

    我是否可以将 Tomcat 或我的 web 应用程序 如果这样做 设置为需要 SSL 来保证内置基于表单的登录机制的机密性 即保护用户凭据 并使用标准 http 进行任何其他交易 您可以将登录表单放在自己的目录中 并且只需对该目录要求 SS
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 角度 2 ngIf 与可观察?

    我有一个非常简单的服务 它的工作是从 api authenticate url 获取 200 或 401 auth service ts Injectable export class AuthService constructor pri
  • 等待异步 grunt 任务完成

    我收到了 grunt 设置 其中一个新任务应该执行 grunt task run 已经存在的任务 要执行的任务是异步的 新任务应该等待异步任务完成 执行此操作的首选方法是什么 grunt 已经涵盖了这一点 你应该将你的任务声明为异步任务 并
  • Java 中处理异步响应的设计模式

    我读过类似问答的答案 如何在 JAVA 中创建异步 HTTP 请求 https stackoverflow com questions 3142915 how do you create an asynchronous http reque

随机推荐

  • vue 生成条形码、二维码

    条形码 1 安装 cnpm install jsbarcode save 2 引入 import JsBarcode from jsbarcode 3 二维码容器
  • STM32理论 —— 定时器、时钟

    文章目录 1 定时器 1 1 分类与简介 1 1 1 分类与主要功能特点 1 1 2 三种常用的定时器简介 1 1 3 三种计数模式 1 1 4 定时器计数原理 1 1 5 如何快速定位定时器对应IO 引脚 1 2 时钟来源 1 3 通用定
  • MFC中传递消息的方法

    通过自定义消息实现进程间通信的方法 消息分为两种 即系统消息和用户 程序设计者 自定义消息 系统消息定义从0到0x3FF 可以使用0x400到0x7FFF定义自己的消息 Windows把0x400定义为WM USER 如果想定义自己的一个消
  • YOLOv5改进系列(23)——替换主干网络之MobileViTv2(移动视觉 Transformer 的高效可分离自注意力机制)

    YOLOv5改进系列 前期回顾 YOLOv5改进系列 0 重要性能指标与训练结果评价及分析 YOLOv5改进系列 1 添加SE注意力机制
  • 使用Python,OpenCV沿着轮廓寻找极值点

    使用Python OpenCV沿着轮廓寻找极值点 这篇博客将介绍如何使用Python OpenCV沿着轮廓寻找极值点 找到最北 最南 最东和最西 x y 坐标 虽然这项技能本身并不有用 但它通常被用作更高级计算机视觉应用程序的预处理步骤 这
  • 组态王和plc之间如何建立通讯?

    这两者之间可以有很多种通讯方式 比如 PROFIBUS MPI 以太网 DDE OPC MODBUS 自由口等 主要还是要看你的PLC选型 以及组网方式 现在最常见 也最常用的大概要数RS485 MODBUS协议下的无线通讯方式了 我们假定
  • 中国十大最狠的流氓网站曝光!

    动了流氓软件的发展 谁又从流氓软件中获利 揭开流氓软件背后的始佣者 网易科技独家选出中国十大流氓网站 以下是网易科技评选的十大流氓网站 1 3721 com 中文实名 这个是流氓软件的开山鼻祖 就是因它将中国互联网带入到一个流氓时代 这里就
  • 今日头条2018年校招视频面试过程 一面(编程题两道)

    首先面试官让自我介绍一下 然后问你做过的项目问你擅长的语言 你与其他同学相比的优点 等等 有两道笔试题 1 0 9a z表示36进制 写一个方法计算36进制的和 2 单链表进行反转 附上我写的代码 仅供参考 java代码实现 1 36进制求
  • elementUI 框架组件

    文章目录 elementUI 框架学习笔记 1 创建一个vue cli脚手架 2 Container 布局容器 3 Layout 布局 4 按钮 button 5 链接 6 表单系列 6 1 input 输入框 6 1 1 基础用法 6 1
  • vue 项目中使用 Loading 组件

    当在vue项目中请求后台接口时 常常会使用 loding 过渡数据的加载时间 如果 loading 作为一个全局的加载状态 应该写在项目中的App vue中
  • 大数据项目实战——基于某招聘网站进行数据采集及数据分析(五)

    大数据项目实战 第五章 数据分析 文章目录 大数据项目实战 学习目标 一 设计 Hive 数据仓库 1 事实表 ods jobdata origin 2 维度表 t salary detail 3 维度表 t company detail
  • 15 jQuery Plugins For A Better Photo Gallery And Slideshow

    Photo Gallery picture gallery or slideshow are the best way to showcase your images photos to your readers There are a l
  • 设计原则之组合复用原则的概念及实例代码操作

    场景 例题 教育局的学校管理中包括小学 初中和高中等三个级别老师与学生 不使用组合复用原则的解法 代码实现 采用继承实现 class Person class Teachers extends Person class Students e
  • 基于stm32f1的lora开发基础通信实验

    一 实验条件 环境 win10专业版 keil uv5 串口调试助手 stm32f1系列单片机 as32lora模块 这里是泽耀科技的as32 ttl 100 二 实现功能 1 使用定时器将底层数据通过as32每隔1秒向上层串口发送一段数据
  • 二、RabbitMQ在某商城项目中的使用案例

    一 在对商品增删改查的时候发送消息 在item service中引入amqp依赖
  • 七牛云完整详细配置(从零到一)

    创建存储空间 自定义域名 配置域名的 CNAME 1 复制刚刚新建的域名的CNAME 2 登录域名服务商 这里以阿里云为例 的控制台 添加域名解析 保存后回到七牛存储空间的控制台 可以看到加速域名绑定状态为处理中 最久应该是10分钟 使用七
  • 【Ubuntu】systemd 及其工具

    什么是 systemd systemd 是一个用于管理 Linux 系统启动过程和系统服务的初始化系统 它是现代 Linux 发行版中广泛采用的初始化系统 负责启动和管理操作系统的各个组件 systemd 的设计目标是提高系统启动速度 优化
  • 内网穿透-frp

    frp的作用 1 利用处于内网或防火墙后的机器 对外网环境提供 http 或 https 服务 2 对于 http https 服务支持基于域名的虚拟主机 支持自定义域名绑定 使多个域名可以共用一个80端口 3 利用处于内网或防火墙后的机器
  • Myeclipse10下载,安装,破解,插件,优化介绍(CSDN首发)

    一 Myeclipse10下载与破解 Genuitec公司发布了MyEclipse 10 一款Genuitec旗下的商业化Eclipse集成开发工具的升级版本 MyEclipse 10基于Eclipse Indigo构建 为Java和Jav
  • TOMCAT的SERVER.XML的详细说明

    Example Server Configuration File gt