# Package org.apache.catalina.valves

This package contains a variety of small Valve implementations that do not warrant being packaged separately. In addition, there is a convenience base class (`ValveBase`) that supports the usual mechanisms for including custom Valves into the corresponding Pipeline.

Other packages that include Valves include `org.apache.tomcat.logger` and `org.apache.tomcat.security`.

- Interface Summary
  Interface | Description
  --- | ---
  AbstractAccessLogValve.AccessLogElement | AccessLogElement writes the partial message into the buffer.
  AbstractAccessLogValve.CachedElement | Marks an AccessLogElement as needing to be have the value cached at the start of the request rather than just recorded at the end as the source data for the element may not be available at the end of the request.

- Class Summary
  Class | Description
  --- | ---
  AbstractAccessLogValve | Abstract implementation of the Valve interface that generates a web server access log with the detailed line contents matching a configurable pattern.
  AbstractAccessLogValve.ByteSentElement | write bytes sent, excluding HTTP headers - %b, %B
  AbstractAccessLogValve.ConnectionStatusElement | Write connection status when response is completed - %X
  AbstractAccessLogValve.CookieElement | write a specific cookie - %{xxx}c
  AbstractAccessLogValve.DateFormatCache | Cache structure for formatted timestamps based on seconds.
  AbstractAccessLogValve.ElapsedTimeElement | write time taken to process the request - %D, %T
  AbstractAccessLogValve.FirstByteTimeElement | write time until first byte is written (commit time) in millis - %F
  AbstractAccessLogValve.HeaderElement | write incoming headers - %{xxx}i
  AbstractAccessLogValve.HttpStatusCodeElement | write HTTP status code of the response - %s
  AbstractAccessLogValve.LocalAddrElement | write local IP address - %A
  AbstractAccessLogValve.LogicalUserNameElement | write remote logical username from identd (always returns '-') - %l
  AbstractAccessLogValve.MethodElement | write request method (GET, POST, etc.) - %m
  AbstractAccessLogValve.QueryElement | write Query string (prepended with a '?'
  AbstractAccessLogValve.RequestAttributeElement | write an attribute in the ServletRequest - %{xxx}r
  AbstractAccessLogValve.RequestElement | write first line of the request (method and request URI) - %r
  AbstractAccessLogValve.RequestURIElement | write requested URL path - %U
  AbstractAccessLogValve.ResponseHeaderElement | write a specific response header - %{xxx}o
  AbstractAccessLogValve.SessionAttributeElement | write an attribute in the HttpSession - %{xxx}s
  AbstractAccessLogValve.SessionIdElement | write user session ID - %S
  AbstractAccessLogValve.StringElement | write any string
  AbstractAccessLogValve.ThreadNameElement | write thread name - %I
  AbstractAccessLogValve.UserElement | write remote user that was authenticated (if any), else '-' - %u
  AccessLogValve | This is a concrete implementation of `AbstractAccessLogValve` that outputs the access log to a file.
  Constants | Manifest constants for the `org.apache.catalina.valves` package.
  Constants.AccessLog |
  CrawlerSessionManagerValve | Web crawlers can trigger the creation of many thousands of sessions as they crawl a site which may result in significant memory consumption.
  ErrorReportValve | Implementation of a Valve that outputs HTML error pages.
  ExtendedAccessLogValve | An implementation of the W3c Extended Log File Format.
  ExtendedAccessLogValve.CookieElement |
  ExtendedAccessLogValve.DateElement |
  ExtendedAccessLogValve.PatternTokenizer |
  ExtendedAccessLogValve.RequestAttributeElement |
  ExtendedAccessLogValve.RequestHeaderElement |
  ExtendedAccessLogValve.RequestParameterElement |
  ExtendedAccessLogValve.ResponseAllHeaderElement | write a specific response header - x-O(xxx)
  ExtendedAccessLogValve.ResponseHeaderElement |
  ExtendedAccessLogValve.ServletContextElement |
  ExtendedAccessLogValve.SessionAttributeElement |
  ExtendedAccessLogValve.TimeElement |
  JDBCAccessLogValve | This Tomcat extension logs server access directly to a database, and can be used instead of the regular file-based access log implemented in AccessLogValve.
  JsonErrorReportValve | Implementation of a Valve that outputs error jsons.
  LoadBalancerDrainingValve | A Valve to detect situations where a load-balanced node receiving a request has been deactivated by the load balancer (JK_LB_ACTIVATION=DIS) and the incoming request has no valid session.
  PersistentValve | Valve that implements per-request session persistence.
  RemoteAddrValve | Concrete implementation of `RequestFilterValve` that filters based on the string representation of the remote client's IP address optionally combined with the server connector port number.
  RemoteCIDRValve |
  RemoteHostValve | Concrete implementation of `RequestFilterValve` that filters based on the remote client's host name optionally combined with the server connector port number.
  RemoteIpValve | Tomcat port of mod_remoteip, this valve replaces the apparent client remote IP address and hostname for the request with the IP address list presented by a proxy or a load balancer via a request headers (e.g.
  RequestFilterValve | Implementation of a Valve that performs filtering based on comparing the appropriate request property (selected based on which subclass you choose to configure into your Container's pipeline) against the regular expressions configured for this Valve.
  SemaphoreValve | Implementation of a Valve that limits concurrency.
  SSLValve | When using mod_proxy_http, the client SSL information is not included in the protocol (unlike mod_jk and mod_proxy_ajp).
  StuckThreadDetectionValve | This valve allows to detect requests that take a long time to process, which might indicate that the thread that is processing it is stuck.
  ValveBase | Convenience base class for implementations of the Valve interface.