一篇文章读懂Tomcat的Context配置

时间:2025-02-06 12:00:44
allowCasualMultipartParsing 设置为true时Tomcat在HttpServletRequest时自动解析multipart/form-data数据请求体。可以获取到数据。注意,除false之外的任何设置都会导致Tomcat的行为在技术上不符合规范。默认值为false。
allowMultipleLeadingForwardSlashInPath Tomcat将URI中多个/字符的序列规范化为单个/。这是为了与文件系统的行为保持一致,因为uri通常被转换为文件系统路径。因此,对于某些uri, HttpServletRequest#getContextPath()的返回值应该以多个/字符开头。如果这个值直接与HttpServletResponse#sendRedirect()一起使用,作为以//开头的重定向路径被视为协议相对重定向,这将导致问题。为了避免潜在的问题,Tomcat会将HttpServletRequest#getContextPath()返回值开头的多个前导/字符分解为一个/。该属性的默认值为false,它支持多个/字符的折叠。要禁用此行为,请将此属性设置为true。
altDDName 默认加载/WEB-INF/路径的。该值可以指定你想加载的路径。例如altDDName=“/test/”那么web配置将启用test路径下的
alwaysAccessSession 如果设置为true,那么与会话关联的每个请求都将更新会话的最后访问时间,而不管请求是否显式访问会话。如果.STRICT_SERVLET_COMPLIANCE设置为true,则该设置的默认值将为true,否则默认值将为false。
backgroundProcessorDelay 此值表示在此上下文上调用backgroundProcess方法及其子容器(包括所有包装器)之间的延迟(以秒为单位)。如果子容器的延迟值不是负的(这意味着它们正在使用自己的处理线程),则不会调用它们。将此值设置为正值将导致生成线程。在等待指定的时间之后,线程将调用此主机及其所有子容器上的backgroundProcess方法。上下文将使用后台处理来执行会话过期和类监视以便重新加载。如果不指定,该属性的默认值是-1,这意味着上下文将依赖于其父主机的后台处理线程。
className 要使用的实现的Java类名。这个类必须实现接口。如果没有指定,将使用标准值。
containerSciFilter 指定提供scsi应该被过滤掉,并且不用于此上下文中。需匹配容器的完全限定类名的子字符串,提供SCI以便将其过滤掉。如果未指定,则不会过滤。
contextGetResourceRequiresSlash 如果为true,那么传递给()或()的路径必须以“/”开头。如果为false,像getResource(“myfolder/”)这样的代码将工作,因为Tomcat将在提供的路径前加上"/"。如果.STRICT_SERVLET_COMPLIANCE设置为true,则该设置的默认值将为true,否则默认值将为false。
cookies 设置为true(这是默认值),cookie的值为session id(如果客户机支持的话),否则将不会用作session id通信
createUploadTargets 如果Tomcat尝试为Servlet创建MultipartConfig中指定的临时上传位置(如果该位置不存在),则设置为true。如果没有指定,将使用默认值false。
crossContext 设置为true,在此应用程序中调用()为运行在此虚拟主机上的其他web应用程序返回请求分配器。在安全意识强的环境中设置为false(默认值),以使getContext()总是返回null。
dispatcherWrapsSameObject 如果为true,那么将检查传递给应用程序调度器的任何已包装的请求或响应对象,以确保它已包装了原始请求或响应。如果.STRICT_SERVLET_COMPLIANCE设置为true,则此设置的默认值为true;否则,默认值为false。
docBase 此web应用程序的Document Base(也称为Context Root)目录,或web应用程序归档文件的路径名(如果该web应用程序是直接从WAR文件执行的)。可以指定此目录或WAR文件的绝对路径名,或相对于Host的appBase目录的路径名。除非在定义了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 应用程序的有效 。 有效的 是应用程序的 与 Tomcat 配置的任何默认值以及发现的任何 文件和注释相结合的结果。 如果未指定,则使用默认值 false。
mapperContextRootRedirectEnabled 如果启用,对 Web 应用程序上下文根的请求将在必要时由 Mapper 而不是默认的 Servlet 重定向(添加尾部斜杠)。 这更有效,但具有确认上下文路径存在的副作用。 如果未指定,则使用默认值 true。
mapperDirectoryRedirectEnabled 如果启用,Web 应用程序目录的请求将在必要时由 Mapper 而不是默认的 Servlet 重定向(添加尾部斜杠)。 这更有效,但具有确认目录存在的副作用。 如果未指定,则使用默认值 false。
override 设置为 true 以忽略全局或主机默认上下文中的任何设置。 默认情况下,将使用来自默认上下文的设置,但可以通过为上下文显式设置相同的属性来覆盖。
parallelAnnotationScanning 当设置为 true 时,注释扫描将使用实用程序执行器执行。 它将允许并行处理扫描,这可能会以更高的服务器负载为代价来改进部署类型。 如果未指定,则使用默认值 false。
path 此 Web 应用程序的上下文路径,与每个请求 URI 的开头相匹配,以选择适当的 Web 应用程序进行处理。 特定主机中的所有上下文路径都必须是唯一的。 如果您指定空字符串 (“”) 的上下文路径,则您正在为此主机定义默认 Web 应用程序,它将处理所有未分配给其他上下文的请求。只有在 中静态定义 Context 时才必须使用此属性。 在所有其他情况下,将从用于 .xml 上下文文件或 docBase 的文件名推断路径。即使在 中静态定义 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/ 中使用)。 确保在不存在资源时不使用与期望存在资源的 Servlet(例如 JSP Servlet)关联的欢迎文件。 这可以防止由于 Servlet 3.0 规范第 10.10 节中对欢迎文件映射的澄清而引起的问题。 如果 .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/ 文件中将此属性设置为 /。注意:一旦一个使用 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 应用程序输出到 和 的字节将被重定向到 Web 应用程序记录器。 如果未指定,则标志的默认值为 false。
tldValidation 如果设置为true,则TLD文件将在上下文启动时进行XML验证。如果.STRICT_SERVLET_COMPLIANCE系统属性设置为true,则该属性的默认值为true,否则默认值为false。将此属性设置为true将导致性能损失。
useBloomFilterForArchives 如果为true,那么将使用bloom过滤器来查找JAR的。如果未指定,将使用默认值false。
useHttpOnly 是否应该在会话cookie上设置HttpOnly标志以防止客户端脚本访问会话ID?默认值为true。
useRelativeRedirects #sendRedirect(String) 使用相对重定向还是绝对重定向。相对重定向更有效,但可能不适用于更改上下文路径的反向代理。应该注意的是,不建议使用反向代理来更改上下文路径,因为它会产生多个问题。绝对重定向应该与更改上下文路径的反向代理一起使用,如果过滤器正在更改方案和/或端口,则可能会导致问题。如果 .STRICT_SERVLET_COMPLIANCE 系统属性设置为 true,则该属性 false的默认值为 ,否则默认值为true
validateClientProvidedNewSessionId 当客户端为新会话提供 ID 时,此属性控制是否验证该 ID。使用客户端提供的会话 ID 的唯一用例是在多个 Web 应用程序中拥有一个公共会话 ID。因此,任何客户端提供的会话 ID 都应该已经存在于另一个 Web 应用程序中。如果启用此检查,则仅当会话 ID 存在于当前主机的至少一个其他 Web 应用程序中时,才会使用客户端提供的会话 ID。如果未指定,将使用默认值true
wrapperClass wrapper实现类的Java类名,它将用于此Context管理的servlet。如果未指定,则使用标准默认值。
xmlBlockExternal 如果设置为true,则解析、、、*. xml。tld, *。jspx, *。此web应用程序的tagx和文件将不允许加载外部实体。如果未指定,将使用默认值true。
xmlNamespaceAware 如果设置为true,则此web应用程序的、和文件的解析将是名称空间感知的。注意*。tld, 。jspx和。tagx文件总是使用支持名称空间的解析器进行解析,而文件(如果有的话)从不使用支持名称空间的解析器进行解析。还要注意,如果打开这个标志,可能还应该打开xmlValidation。如果.STRICT_SERVLET_COMPLIANCE系统属性设置为true,则该属性的默认值为true,否则默认值为false。将此属性设置为true将导致性能损失。
xmlValidation 如果为true,则此web应用程序的、和文件的解析将使用验证解析器。如果.STRICT_SERVLET_COMPLIANCE系统属性设置为true,则该属性的默认值为true,否则默认值为false。将此属性设置为true将导致性能损失。