org.apache.catalina.Wrapper Maven / Gradle / Ivy
/*
* 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.
*/
package org.apache.catalina;
import javax.servlet.MultipartConfigElement;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.UnavailableException;
/**
* A Wrapper is a Container that represents an individual servlet definition from the deployment descriptor of
* the web application. It provides a convenient mechanism to use Interceptors that see every single request to the
* servlet represented by this definition.
*
* Implementations of Wrapper are responsible for managing the servlet life cycle for their underlying servlet class,
* including calling init() and destroy() at appropriate times, as well as respecting the existence of the
* SingleThreadModel declaration on the servlet class itself.
*
* The parent Container attached to a Wrapper will generally be an implementation of Context, representing the servlet
* context (and therefore the web application) within which this servlet executes.
*
* Child Containers are not allowed on Wrapper implementations, so the addChild()
method should throw an
* IllegalArgumentException
.
*
* @author Craig R. McClanahan
*/
public interface Wrapper extends Container {
/**
* Container event for adding a wrapper.
*/
String ADD_MAPPING_EVENT = "addMapping";
/**
* Container event for removing a wrapper.
*/
String REMOVE_MAPPING_EVENT = "removeMapping";
// ------------------------------------------------------------- Properties
/**
* @return the available date/time for this servlet, in milliseconds since the epoch. If this date/time is in the
* future, any request for this servlet will return an SC_SERVICE_UNAVAILABLE error. If it is zero, the
* servlet is currently available. A value equal to Long.MAX_VALUE is considered to mean that
* unavailability is permanent.
*/
long getAvailable();
/**
* Set the available date/time for this servlet, in milliseconds since the epoch. If this date/time is in the
* future, any request for this servlet will return an SC_SERVICE_UNAVAILABLE error. A value equal to Long.MAX_VALUE
* is considered to mean that unavailability is permanent.
*
* @param available The new available date/time
*/
void setAvailable(long available);
/**
* @return the load-on-startup order value (negative value means load on first call).
*/
int getLoadOnStartup();
/**
* Set the load-on-startup order value (negative value means load on first call).
*
* @param value New load-on-startup value
*/
void setLoadOnStartup(int value);
/**
* @return the run-as identity for this servlet.
*/
String getRunAs();
/**
* Set the run-as identity for this servlet.
*
* @param runAs New run-as identity value
*/
void setRunAs(String runAs);
/**
* @return the fully qualified servlet class name for this servlet.
*/
String getServletClass();
/**
* Set the fully qualified servlet class name for this servlet.
*
* @param servletClass Servlet class name
*/
void setServletClass(String servletClass);
/**
* Gets the names of the methods supported by the underlying servlet. This is the same set of methods included in
* the Allow response header in response to an OPTIONS request method processed by the underlying servlet.
*
* @return Array of names of the methods supported by the underlying servlet
*
* @throws ServletException If the target servlet cannot be loaded
*/
String[] getServletMethods() throws ServletException;
/**
* @return true
if this Servlet is currently unavailable.
*/
boolean isUnavailable();
/**
* @return the associated Servlet instance.
*/
Servlet getServlet();
/**
* Set the associated Servlet instance
*
* @param servlet The associated Servlet
*/
void setServlet(Servlet servlet);
// --------------------------------------------------------- Public Methods
/**
* Add a new servlet initialization parameter for this servlet.
*
* @param name Name of this initialization parameter to add
* @param value Value of this initialization parameter to add
*/
void addInitParameter(String name, String value);
/**
* Add a mapping associated with the Wrapper.
*
* @param mapping The new wrapper mapping
*/
void addMapping(String mapping);
/**
* Add a new security role reference record to the set of records for this servlet.
*
* @param name Role name used within this servlet
* @param link Role name used within the web application
*/
void addSecurityReference(String name, String link);
/**
* Allocate an initialized instance of this Servlet that is ready to have its service()
method called.
* If the Servlet class does not implement SingleThreadModel
, the (only) initialized instance may be
* returned immediately. If the Servlet class implements SingleThreadModel
, the Wrapper implementation
* must ensure that this instance is not allocated again until it is deallocated by a call to
* deallocate()
.
*
* @exception ServletException if the Servlet init() method threw an exception
* @exception ServletException if a loading error occurs
*
* @return a new Servlet instance
*/
Servlet allocate() throws ServletException;
/**
* Return this previously allocated servlet to the pool of available instances. If this servlet class does not
* implement SingleThreadModel, no action is actually required.
*
* @param servlet The servlet to be returned
*
* @exception ServletException if a deallocation error occurs
*/
void deallocate(Servlet servlet) throws ServletException;
/**
* @return the value for the specified initialization parameter name, if any; otherwise return null
.
*
* @param name Name of the requested initialization parameter
*/
String findInitParameter(String name);
/**
* @return the names of all defined initialization parameters for this servlet.
*/
String[] findInitParameters();
/**
* @return the mappings associated with this wrapper.
*/
String[] findMappings();
/**
* @return the security role link for the specified security role reference name, if any; otherwise return
* null
.
*
* @param name Security role reference used within this servlet
*/
String findSecurityReference(String name);
/**
* @return the set of security role reference names associated with this servlet, if any; otherwise return a
* zero-length array.
*/
String[] findSecurityReferences();
/**
* Increment the error count value used when monitoring.
*/
void incrementErrorCount();
/**
* Load and initialize an instance of this Servlet, if there is not already at least one initialized instance. This
* can be used, for example, to load Servlets that are marked in the deployment descriptor to be loaded at server
* startup time.
*
* @exception ServletException if the Servlet init() method threw an exception or if some other loading problem
* occurs
*/
void load() throws ServletException;
/**
* Remove the specified initialization parameter from this Servlet.
*
* @param name Name of the initialization parameter to remove
*/
void removeInitParameter(String name);
/**
* Remove a mapping associated with the wrapper.
*
* @param mapping The pattern to remove
*/
void removeMapping(String mapping);
/**
* Remove any security role reference for the specified role name.
*
* @param name Security role used within this servlet to be removed
*/
void removeSecurityReference(String name);
/**
* Process an UnavailableException, marking this Servlet as unavailable for the specified amount of time.
*
* @param unavailable The exception that occurred, or null
to mark this Servlet as permanently
* unavailable
*/
void unavailable(UnavailableException unavailable);
/**
* Unload all initialized instances of this servlet, after calling the destroy()
method for each
* instance. This can be used, for example, prior to shutting down the entire servlet engine, or prior to reloading
* all of the classes from the Loader associated with our Loader's repository.
*
* @exception ServletException if an unload error occurs
*/
void unload() throws ServletException;
/**
* @return the multi-part configuration for the associated Servlet. If no multi-part configuration has been defined,
* then null
will be returned.
*/
MultipartConfigElement getMultipartConfigElement();
/**
* Set the multi-part configuration for the associated Servlet. To clear the multi-part configuration specify
* null
as the new value.
*
* @param multipartConfig The configuration associated with the Servlet
*/
void setMultipartConfigElement(MultipartConfigElement multipartConfig);
/**
* Does the associated Servlet support async processing? Defaults to false
.
*
* @return true
if the Servlet supports async
*/
boolean isAsyncSupported();
/**
* Set the async support for the associated Servlet.
*
* @param asyncSupport the new value
*/
void setAsyncSupported(boolean asyncSupport);
/**
* Is the associated Servlet enabled? Defaults to true
.
*
* @return true
if the Servlet is enabled
*/
boolean isEnabled();
/**
* Sets the enabled attribute for the associated servlet.
*
* @param enabled the new value
*/
void setEnabled(boolean enabled);
/**
* Is the Servlet overridable by a ServletContainerInitializer?
*
* @return true
if the Servlet can be overridden in a ServletContainerInitializer
*/
boolean isOverridable();
/**
* Sets the overridable attribute for this Servlet.
*
* @param overridable the new value
*/
void setOverridable(boolean overridable);
}