一篇文章读懂Tomcat的Context配置

Context简介

  • Context元素代表一个Web 应用程序,它在特定的虚拟主机中运行。
  • 处理每个 HTTP 请求的 Web 应用程序,都是基于将请求 URI的前缀与每个定义的Context的*Context路径进行匹配。* 一旦选择,该Context将根据 Web应用程序部署定义的 servlet 映射选择适当的 servlet 来处理传入请求。
  • 可以根据需要定义任意数量的Context元素。每个Context必须在Host中具有唯一的Context名称。Context路径不需要是唯一的(参考并行部署)。此外,必须定义一个0长度的Context路径。这个Context成为此虚拟主机的默认 Web 应用程序,用于处理与任何其他 ContextContext路径不匹配的所有请求。
定义一个Context
  • 不建议将元素直接放在server.xml文件中。这是因为它使修改Context配置更具侵入性,因为在不重新启动Tomcat的情况下无法重新加载conf/server.xml文件。默认Context元素(见下面)也会覆盖直接放在server.xml中的任何元素的配置。为了防止这种情况,应该将server.xml中定义的元素的override属性设置为true

单个Context元素可以显式定义:

  • 在应用程序文件中的/META-INF/context.xml单独文件中。
  • $CATALINA_BASE/conf/[enginename]/[hostname]/目录下的单个文件(扩展名为".xml")中。context路径和版本将从文件的基本名称(文件名减去.xml扩展名)派生。这个文件总是优先于web应用程序的META-INF目录中打包的任何context.xml文件。
  • conf/server.xmlHost元素中。
    属性
公共属性:

Context的所有实现都支持以下属性:

属性描述
allowCasualMultipartParsing设置为true时Tomcat在HttpServletRequest时自动解析multipart/form-data数据请求体。HttpServletRequest.getPart可以获取到数据。注意,除false之外的任何设置都会导致Tomcat的行为在技术上不符合规范。默认值为false。
allowMultipleLeadingForwardSlashInPathTomcat将URI中多个/字符的序列规范化为单个/。这是为了与文件系统的行为保持一致,因为uri通常被转换为文件系统路径。因此,对于某些uri, HttpServletRequest#getContextPath()的返回值应该以多个/字符开头。如果这个值直接与HttpServletResponse#sendRedirect()一起使用,作为以//开头的重定向路径被视为协议相对重定向,这将导致问题。为了避免潜在的问题,Tomcat会将HttpServletRequest#getContextPath()返回值开头的多个前导/字符分解为一个/。该属性的默认值为false,它支持多个/字符的折叠。要禁用此行为,请将此属性设置为true。
altDDName默认加载/WEB-INF/web.xml路径的web.xml。该值可以指定你想加载的web.xml路径。例如altDDName=“/test/test.xml”那么web配置将启用test路径下的test.xml
alwaysAccessSession如果设置为true,那么与会话关联的每个请求都将更新会话的最后访问时间,而不管请求是否显式访问会话。如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE设置为true,则该设置的默认值将为true,否则默认值将为false。
backgroundProcessorDelay此值表示在此上下文上调用backgroundProcess方法及其子容器(包括所有包装器)之间的延迟(以秒为单位)。如果子容器的延迟值不是负的(这意味着它们正在使用自己的处理线程),则不会调用它们。将此值设置为正值将导致生成线程。在等待指定的时间之后,线程将调用此主机及其所有子容器上的backgroundProcess方法。上下文将使用后台处理来执行会话过期和类监视以便重新加载。如果不指定,该属性的默认值是-1,这意味着上下文将依赖于其父主机的后台处理线程。
className要使用的实现的Java类名。这个类必须实现org.apache.catalina.Context接口。如果没有指定,将使用标准值。
containerSciFilter指定提供scsi应该被过滤掉,并且不用于此上下文中。需匹配容器的完全限定类名的子字符串,提供SCI以便将其过滤掉。如果未指定,则不会过滤。
contextGetResourceRequiresSlash如果为true,那么传递给ServletContext.getResource()或servletcontext.getresourcestream()的路径必须以“/”开头。如果为false,像getResource(“myfolder/myresource.txt”)这样的代码将工作,因为Tomcat将在提供的路径前加上"/"。如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE设置为true,则该设置的默认值将为true,否则默认值将为false。
cookies设置为true(这是默认值),cookie的值为session id(如果客户机支持的话),否则将不会用作session id通信
createUploadTargets如果Tomcat尝试为Servlet创建MultipartConfig中指定的临时上传位置(如果该位置不存在),则设置为true。如果没有指定,将使用默认值false。
crossContext设置为true,在此应用程序中调用ServletContext.getContext()为运行在此虚拟主机上的其他web应用程序返回请求分配器。在安全意识强的环境中设置为false(默认值),以使getContext()总是返回null。
dispatcherWrapsSameObject如果为true,那么将检查传递给应用程序调度器的任何已包装的请求或响应对象,以确保它已包装了原始请求或响应。如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE设置为true,则此设置的默认值为true;否则,默认值为false。
docBase此web应用程序的Document Base(也称为Context Root)目录,或web应用程序归档文件的路径名(如果该web应用程序是直接从WAR文件执行的)。可以指定此目录或WAR文件的绝对路径名,或相对于Host的appBase目录的路径名。除非在server.xml定义了Context元素或docBase不在Host的appBase下,否则不能设置此字段的值。
dispatchersUseEncodedPaths控制在调用中用于获取请求分派器的路径是否应该被编码。 这会影响 Tomcat 如何处理调用以获取请求调度程序以及 Tomcat 如何生成用于在内部获取请求调度程序的路径。 如果未指定,则使用默认值 true。 在为请求调度程序编码/解码路径时,始终使用 UTF-8。
failCtxIfServletStartFails如果设置为 true,任何加载时启动servlet自身启动失败,上下文启动失败。如果未指定,则使用父 Host 配置中的同名属性(如果指定)。 否则使用默认值 false。
fireRequestListenersOnForwards设置为 true 以在 Tomcat 转发请求时触发任何已配置的 ServletRequestListener。 这主要用于使用 ServletRequestListeners 为请求配置必要环境的 CDI 框架的用户。 如果未指定,则使用默认值 false。
logEffectiveWebXml设置为 true在应用程序启动时记录(在 INFO 级别)用于 Web 应用程序的有效 web.xml。 有效的 web.xml 是应用程序的 web.xml 与 Tomcat 配置的任何默认值以及发现的任何 web-fragment.xml 文件和注释相结合的结果。 如果未指定,则使用默认值 false。
mapperContextRootRedirectEnabled如果启用,对 Web 应用程序上下文根的请求将在必要时由 Mapper 而不是默认的 Servlet 重定向(添加尾部斜杠)。 这更有效,但具有确认上下文路径存在的副作用。 如果未指定,则使用默认值 true。
mapperDirectoryRedirectEnabled如果启用,Web 应用程序目录的请求将在必要时由 Mapper 而不是默认的 Servlet 重定向(添加尾部斜杠)。 这更有效,但具有确认目录存在的副作用。 如果未指定,则使用默认值 false。
override设置为 true 以忽略全局或主机默认上下文中的任何设置。 默认情况下,将使用来自默认上下文的设置,但可以通过为上下文显式设置相同的属性来覆盖。
parallelAnnotationScanning当设置为 true 时,注释扫描将使用实用程序执行器执行。 它将允许并行处理扫描,这可能会以更高的服务器负载为代价来改进部署类型。 如果未指定,则使用默认值 false。
path 此 Web 应用程序的上下文路径,与每个请求 URI 的开头相匹配,以选择适当的 Web 应用程序进行处理。 特定主机中的所有上下文路径都必须是唯一的。 如果您指定空字符串 (“”) 的上下文路径,则您正在为此主机定义默认 Web 应用程序,它将处理所有未分配给其他上下文的请求。只有在 server.xml 中静态定义 Context 时才必须使用此属性。 在所有其他情况下,将从用于 .xml 上下文文件或 docBase 的文件名推断路径。即使在 server.xml 中静态定义 Context 时,也不得设置此属性,除非 docBase 不在 Host 的 appBase 下,或者 deployOnStartup 和 autoDeploy 都为 false。 如果不遵守此规则,很可能导致双重部署。
preemptiveAuthentication当设置为 true 并且用户为不受安全约束保护的资源提供凭据时,如果身份验证器支持抢先式身份验证(Tomcat 提供的标准身份验证器支持),则将处理用户的凭据。 如果未指定,则使用默认值 false。
privileged设置为 true 以允许此上下文使用容器 servlet,如管理器 servlet。 使用特权属性会将上下文的父类加载器更改为服务器类加载器而不是共享类加载器。 请注意,在默认安装中,公共类加载器用于服务器和共享类加载器。
reloadable设置为 true,会监视 /WEB-INF/classes/ 和 /WEB-INF/lib 中的类的更改,并在检测到更改时自动重新加载 Web 应用程序。 此功能在应用程序开发期间非常有用,但它需要大量运行时开销,因此不建议在已部署的生产应用程序中使用。 这就是该属性的默认设置为 false 的原因。 但是,可以使用 Manager Web 应用程序来按需触发重新加载已部署的应用程序。
resourceOnlyServlets期望资源存在的 Servlet 名称的逗号分隔列表(在 /WEB-INF/web.xml 中使用)。 确保在不存在资源时不使用与期望存在资源的 Servlet(例如 JSP Servlet)关联的欢迎文件。 这可以防止由于 Servlet 3.0 规范第 10.10 节中对欢迎文件映射的澄清而引起的问题。 如果 org.apache.catalina.STRICT_SERVLET_COMPLIANCE 系统属性设置为 true,则该属性的默认值为空字符串,否则默认值为 jsp。
sendRedirectBody如果为 true,则重定向响应将包含一个简短的响应正文,其中包含 RFC 2616 建议的重定向详细信息。默认情况下禁用此功能,因为包含响应正文可能会导致某些应用程序组件(例如压缩过滤器)出现问题。
sessionCookieDomain用于为此上下文创建的所有会话 cookie 的域。 如果设置,这将覆盖 Web 应用程序设置的任何域。 如果未设置,将使用 Web 应用程序指定的值(如果有)。
sessionCookieName用于为此上下文创建的所有会话 cookie 的名称。 如果设置,这将覆盖 Web 应用程序设置的任何名称。 如果未设置,则将使用 Web 应用程序指定的值(如果有),或者如果 Web 应用程序未明确设置,则使用名称 JSESSIONID。
sessionCookiePath用于为此上下文创建的所有会话 cookie 的路径。 如果设置,这将覆盖 Web 应用程序设置的任何路径。 如果未设置,则将使用 Web 应用程序指定的值,如果 Web 应用程序未明确设置,则使用上下文路径。 要将所有 Web 应用程序配置为使用空路径(这对于 portlet 规范实现很有用),请在全局 CATALINA_BASE/conf/context.xml 文件中将此属性设置为 /。注意:一旦一个使用 sessionCookiePath=“/” 的 Web 应用程序获得一个会话,同一主机中的任何其他 Web 应用程序的所有后续会话也配置了 sessionCookiePath=“/” 将始终使用相同的会话 ID。 即使会话无效并创建了一个新会话,这仍然成立。 这使得会话固定保护更加困难,并且需要自定义的 Tomcat 特定代码来更改多个应用程序共享的会话 ID。
sessionCookiePathUsesTrailingSlash某些浏览器,如 Internet Explorer、Safari 和 Edge,将发送一个会话 cookie,用于一个路径为 /foo 的上下文,并违反 RFC6265 对 /foobar 的请求。这可能会将部署在 /foo 的应用程序的会话 ID 暴露给部署在 /foobar 的应用程序。如果部署在 /foobar 的应用程序不受信任,则可能会产生安全风险。但是,应该注意的是,RFC 6265 第 8.5 节明确指出,仅路径不应被视为足以防止不受信任的应用程序从其他应用程序访问 cookie。为了降低这种风险,可以将此属性设置为 true,并且 Tomcat 将在与会话 cookie 关联的路径中添加一个斜杠,因此,在上面的示例中,cookie 路径变为 /foo/。但是,使用 /foo/ 的 cookie 路径,浏览器将不再将 cookie 与 /foo 的请求一起发送。除非有映射到 /* 的 servlet,否则这应该不是问题。在这种情况下,需要将此属性设置为 false 以禁用此功能。此属性的默认值为 false。
swallowAbortedUploads如果 Tomcat 不应该为中止的上传读取任何额外的请求正文数据,而是中止客户端连接,则设置为 false。 此设置用于以下情况:1、请求正文的大小大于连接器中配置的 maxPostSize。2、已达到 MultiPart 上传的大小限制3、servlet 将响应状态设置为 413(请求实体太大)。不读取附加数据将更快地释放请求处理线程。 不幸的是,如果大多数 HTTP 客户端无法写入完整的请求,他们将不会读取响应。默认值为 true,因此将读取附加数据。请注意,如果在请求处理过程中发生触发 5xx 响应的错误,任何未读请求数据将始终被忽略,并且一旦写入错误响应,客户端连接将被关闭。
swallowOutput如果此标志的值为 true,则 Web 应用程序输出到 System.out 和 System.err 的字节将被重定向到 Web 应用程序记录器。 如果未指定,则标志的默认值为 false。
tldValidation如果设置为true,则TLD文件将在上下文启动时进行XML验证。如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE系统属性设置为true,则该属性的默认值为true,否则默认值为false。将此属性设置为true将导致性能损失。
useBloomFilterForArchives如果为true,那么将使用bloom过滤器来查找JAR的。如果未指定,将使用默认值false。
useHttpOnly是否应该在会话cookie上设置HttpOnly标志以防止客户端脚本访问会话ID?默认值为true。
useRelativeRedirectsjakarta.servlet.http.HttpServletResponse#sendRedirect(String) 使用相对重定向还是绝对重定向。相对重定向更有效,但可能不适用于更改上下文路径的反向代理。应该注意的是,不建议使用反向代理来更改上下文路径,因为它会产生多个问题。绝对重定向应该与更改上下文路径的反向代理一起使用,如果org.apache.catalina.filters.RemoteIpFilter过滤器正在更改方案和/或端口,则可能会导致问题。如果 org.apache.catalina.STRICT_SERVLET_COMPLIANCE 系统属性设置为 true,则该属性 false的默认值为 ,否则默认值为true
validateClientProvidedNewSessionId当客户端为新会话提供 ID 时,此属性控制是否验证该 ID。使用客户端提供的会话 ID 的唯一用例是在多个 Web 应用程序中拥有一个公共会话 ID。因此,任何客户端提供的会话 ID 都应该已经存在于另一个 Web 应用程序中。如果启用此检查,则仅当会话 ID 存在于当前主机的至少一个其他 Web 应用程序中时,才会使用客户端提供的会话 ID。如果未指定,将使用默认值true
wrapperClasswrapper实现类的Java类名,它将用于此Context管理的servlet。如果未指定,则使用标准默认值。
xmlBlockExternal如果设置为true,则解析web.xml、web-fragment.xml、tomcat-web.xml、*. xml。tld, *。jspx, *。此web应用程序的tagx和tagPlugins.xml文件将不允许加载外部实体。如果未指定,将使用默认值true。
xmlNamespaceAware如果设置为true,则此web应用程序的web.xml、web-fragment.xml和tomcat-web.xml文件的解析将是名称空间感知的。注意*。tld, 。jspx和。tagx文件总是使用支持名称空间的解析器进行解析,而tagPlugins.xml文件(如果有的话)从不使用支持名称空间的解析器进行解析。还要注意,如果打开这个标志,可能还应该打开xmlValidation。如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE系统属性设置为true,则该属性的默认值为true,否则默认值为false。将此属性设置为true将导致性能损失。
xmlValidation如果为true,则此web应用程序的web.xml、web-fragment.xml和tomcat-web.xml文件的解析将使用验证解析器。如果org.apache.catalina.STRICT_SERVLET_COMPLIANCE系统属性设置为true,则该属性的默认值为true,否则默认值为false。将此属性设置为true将导致性能损失。
附加属性:

Context的标准实现是org.apache.catalina.core.StandardContext。它支持以下附加属性(除了上面列出的常见属性):

属性描述
addWebinfClassesResources这个属性控制的是,除了从web应用程序JAR文件中的META-INF/资源提供静态资源外,静态资源还从web - inf /classes/META-INF/resources提供。这只适用于主要版本为3或更高的web应用程序。由于这是Servlet 3规范的专有扩展,默认情况下是禁用的。要启用该特性,请将该属性设置为true。
antiResourceLocking如果为true, Tomcat将阻止任何文件锁定。这将显著影响应用程序的启动时间,但允许在可能发生文件锁定的平台或配置上进行完整的webapp热部署和取消部署。如果不指定,默认值为false。注意,将此设置为true会产生一些副作用,包括禁用正在运行的服务器中的JSP重新加载:请参阅Bugzilla 37668。在主机的appBase(默认为webapps目录)之外的应用程序中将此标志设置为true将导致应用程序在Tomcat关闭时被删除。所以在为主机在appBase之外的webapp上设置antiResourceLocking=true之前要三思。
clearReferencesHttpClientKeepAliveThread如果为true并且sun.net.www.http.HttpClient keep-alive计时器线程已经被这个web应用程序启动并且仍然在运行,Tomcat将会把该线程的上下文类装载器从web应用程序类装载器更改为web应用程序类装载器的父类装载器,以防止内存泄漏。注意,当所有的保持活动都过期时,保持活动计时器线程将自动停止,但是在一个繁忙的系统上,这可能在一段时间内都不会发生。如果未指定,将使用默认值true。
clearReferencesObjectStreamClassCaches如果为true,当web应用程序停止时,Tomcat在用于序列化的ObjectStreamClass类中查找web应用程序加载的类的SoftReferences,并清除它找到的任何SoftReferences。该特性使用反射来识别SoftReferences,因此需要命令行选项-XaddExports:java.base/java. properties.io = ALL-UNNAMED设置。如果未指定,将使用默认值true。与ObjectStreamClass相关的内存泄漏在Java 19以后、Java 17.0.4以后和Java 11.0.16以后都得到了修复。在包含修复程序的Java版本上运行时,将禁用该检查。
clearReferencesRmiTargets如果为true, Tomcat将查找与RMI Targets相关的内存泄漏,并清除所找到的任何内存泄漏。该特性使用反射来识别泄漏,因此需要命令行选项-XaddExports:java.rmi/sun.rmi.transport=ALL-UNNAMED设置。如果将此属性设置为false,没有内存泄漏的应用程序应该能够正确运行。如果未指定,将使用默认值true。
clearReferencesStopThreads如果为true, Tomcat将尝试终止web应用程序已经启动的线程。停止线程是通过已弃用的Thread.stop()方法执行的,这很可能导致不稳定。因此,应该将启用此功能视为开发环境中的最后选择,不建议在生产环境中使用。如果没有指定,将使用默认值false。如果启用了此功能,web应用程序可能需要多花两秒的时间来停止,因为执行程序线程在任何剩余线程上调用Thread.stop()之前将被优雅地停止至多两秒。
clearReferencesStopTimerThreads如果为true, Tomcat会尝试终止web应用程序已经启动的java.util.Timer线程。与标准线程不同,计时器线程可以安全地停止,尽管仍然可能对应用程序产生副作用。如果没有指定,将使用默认值false。
clearReferencesThreadLocals如果为true, Tomcat会尝试清除java.lang.ThreadLocal变量,这些变量已经被web应用程序加载的类填充。如果未指定,将使用默认值true。
copyXML如果希望在部署应用程序时将嵌入在应用程序(位于/META-INF/context. XML)中的Context XML复制到所属Host的xmlBase,则设置为true。在随后的启动中,复制的Context XML将优先于应用程序中嵌入的任何Context XML。默认值为false。注意,如果所属Host的deployXML属性为false,或者所属Host的copyXML属性为true,则此属性将不起作用。
jndiExceptionOnFailedWrite如果为true,应用程序通过调用bind()、unbind()、createSubContext()、destroySubContext()或close()来修改所提供的JNDI上下文的任何尝试都将触发javax.naming.OperationNotSupportedException,这是Jakarta EE规范的EE.5.3.4节所要求的。可以通过将此属性设置为false禁用此异常,在这种情况下,任何修改JNDI上下文的调用都将返回,而不做任何更改,返回值的方法将返回null。如果没有指定,将使用符合规范的默认值true。
renewThreadsWhenStoppingContext如果为true,则当此上下文停止时,Tomcat将更新用于服务此上下文的线程池中的所有线程。这也要求在server.xml中配置threadlocalleakpreventonlistener,并且Executor的threadRenewalDelay属性为>=0。如果未指定,将使用默认值true。
skipMemoryLeakChecksOnJvmShutdown如果为true,当web应用程序作为JVM关闭的一部分被停止时,Tomcat将不会执行通常的内存泄漏检查。如果没有指定,将使用默认值false。
unloadDelay容器将等待servlet卸载的毫秒数。如果不指定,默认值是2000毫秒。
unpackWAR如果为false,则所属主机的unpackWARs属性将被覆盖,WAR文件将不会被解包。如果为true,则所属主机的unpackWARs属性的值将决定WAR是否被解包。如果不指定,默认值为true。
useNaming设置为true(默认值)可以让Catalina为这个与Jakarta EE平台约定兼容的web应用程序启用JNDI InitialContext。
workDirPathname到该Context提供的临时目录,供相关web应用程序中的servlet临时读写使用。这个目录将通过servlet上下文属性(类型为java.io.File)使web应用程序中的servlet可见,该属性名为jakarta.servlet.context.tempdir,如servlet规范中所述。如果没有指定,将在$CATALINA_BASE/work下面提供一个合适的目录。

属性参考Tomcat10.1

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Tomcatcontext.xml文件是用来配置Web应用程序上下文的文件。它包含了一些重要的配置信息,如数据库连接、JNDI资源、安全性等。下面是一些常见的配置项: 1. 数据库连接:可以在context.xml中配置数据库连接池,以便在应用程序中使用。例如: <Context> <Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="myuser" password="mypassword" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb"/> </Context> 2. JNDI资源:可以在context.xml中配置JNDI资源,以便在应用程序中使用。例如: <Context> <Resource name="mail/Session" auth="Container" type="javax.mail.Session" mail.smtp.host="smtp.gmail.com" mail.smtp.port="587" mail.smtp.auth="true" mail.smtp.starttls.enable="true" username="myuser@gmail.com" password="mypassword"/> </Context> 3. 安全性:可以在context.xml中配置安全性相关的信息,如SSL证书、安全策略等。例如: <Context> <SSLHostConfig> <Certificate certificateKeystoreFile="/path/to/keystore" certificateKeystorePassword="mypassword"/> </SSLHostConfig> <SecurityConstraint> <web-resource-collection> <web-resource-name>Protected Area</web-resource-name> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </SecurityConstraint> </Context> 总之,context.xml文件是一个非常重要的配置文件,它可以帮助我们配置Web应用程序的各种资源和安全性,使得我们的应用程序更加灵活和安全。 ### 回答2: Tomcat Context.xml 是 web 应用程序配置文件的主要配置文件之一,用于管理 Web 应用程序的上下文。它定义了一个特定 Web 应用程序的环境变量、上下文资源和各种参数设置。 Context.xml 文件通常保存在作为 web 应用程序的根目录下的 META-INF 目录下,并可以包含一系列指定参数和值的元素。下面是一些常见的 context.xml 配置选项和详解: 1. path:定义 Web 应用程序的上下文路径,该路径将被用于在浏览器中找到该应用程序。 例如,假设我们在 Tomcat 中安装了一个名为“myapp”的 web 应用程序,则该应用程序的 URL 将为:http://localhost:8080/myapp。 2. docBase:定义要部署的 Web 应用程序的文档根目录。 3. reloadable:指定 Tomcat 是否应该在 Web 应用程序代码或配置更改时重新加载应用程序。 4. crossContext:指定是否允许在多个 Web 应用程序之间共享 session。 5. jmxEnabled:使 Tomcat 使用 Java Management Extensions (JMX) API 标准的配置选项。 6. privileged:此选项是可选的,如果设置为 true,则 Tomcat 将使用当前线程的 Java 运行时,而不是使用一个新的线程。 7. resources:定义上下文资源,如数据库连接池和 JMS 队列管理器等。 在 context.xml 文件中,还可以使用以下元素: - Environment 元素:定义环境变量,如数据库登录和路径变量。 - Resource 元素:定义要公开的 JNDI 上下文资源(如 datasources、JMS connections 和 JavaMail sessions 等)。 - Manager 元素:指定会话管理器,可以配置会话 ID 超时值和其他相关属性。 - Listener 元素:提供 Web 应用程序生命周期事件,如 ContextServletRequest 和 HttpSession 等。 总之,通过配置 context.xml 文件,我们可以对 Tomcat 中的 Web 应用程序进行更细粒度的管理和控制。而上述配置选项中的每一个都是非常重要的,具体的配置方案可以根据具体需求进行选择。 ### 回答3: Tomcat是一个开源的Java Servlet容器,用于将Java代码转换为可运行的服务器端Web应用程序。在Tomcat中,context.xml文件用于配置上下文的环境设置和资源参数。本文将详细介绍Tomcat context.xml的配置方法。 1. context.xml文件的位置 (1)对于整个Tomcat实例而言,context.xml文件位于Tomcat的conf目录中,即$CATALINA_BASE/conf。 (2)对于特定的Web应用程序而言,context.xml文件位于Web应用程序的META-INF目录下。 2. context.xml文件的结构 context.xml文件的根元素是ContextContext元素有一个docBase属性,用于指定Web应用程序的根目录路径(相对路径或绝对路径)。Context元素中可以包含多个元素,比如Parameter、Resource、ResourceLink、Environment等。 3. Parameter元素 Parameter元素用于设置Web应用程序的初始化参数。它有两个属性:name和value。其中,name属性代表参数的名称,value属性代表参数的值。 例如,在context.xml文件中设置一个名为“dbUrl”的初始化参数: <Parameter name="dbUrl" value="jdbc:mysql://localhost:3306/test"/> 4. Resource元素 Resource元素用于配置Tomcat中的资源。例如,数据库连接池、JMS连接和JNDI对象等。Resource元素有多个属性,包括name、auth、type、url、username、password等。这些属性用于指定资源的名称、认证方式、类型、URL和访问权限等信息。 例如,在context.xml文件中设置一个名为“jdbc/TestDB”的JDBC数据源: <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" username="root" password="123456" maxTotal="20" maxIdle="10" maxWaitMillis="-1"/> 5. ResourceLink元素 ResourceLink元素用于将Web应用程序中定义的资源链接到Tomcat服务器上的资源。<Resource />元素定义了资源的位置,而<ResourceLink />元素定义了如何在Web应用程序中引用该资源。ResourceLink元素有两个属性:name和global。其中,name属性代表资源的名称,global属性代表是否在整个Tomcat实例中共享该资源。 例如,在context.xml文件中链接一个名为“jdbc/TestDB”的JDBC数据源: <ResourceLink name="jdbc/TestDB" global="jdbc/TestDB" type="javax.sql.DataSource"/> 6. Environment元素 Environment元素用于设置Web应用程序的环境变量。Environment元素有多个属性,包括name、value、type等。其中,name属性代表环境变量的名称,value属性代表环境变量的值,type属性代表环境变量的类型。 例如,在context.xml文件中设置一个名为“appVersion”的环境变量: <Environment name="appVersion" value="1.0.0" type="java.lang.String" /> 7. 直接在web.xml文件中设置资源参数 除了context.xml文件外,还可以在Web应用程序的web.xml文件中直接设置资源参数。这些参数将覆盖context.xml文件中的配置。在web.xml文件中,可以使用<env-entry>和<resource-env-ref>元素分别设置环境变量和资源参数。 例如,在web.xml文件中设置一个名为“dbUrl”的环境变量: <env-entry> <env-entry-name>dbUrl</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>jdbc:mysql://localhost:3306/test</env-entry-value> </env-entry> 总之,context.xml是Tomcat的一个重要配置文件,可以用于配置Web应用程序的初始化参数、资源、环境变量等信息。熟练掌握context.xml的配置方法,对于管理和运行Tomcat服务器上的Web应用程序非常重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文安初心忆往昔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值