Asyncjetty continuationn cannot be cast to org.eclipse.jetty.jetty continuationn.jetty continuationn

下次自动登录
现在的位置:
& 综合 & 正文
jetty continuation基本原理及实现
在io密集型的web 应用,如何能更好地提升后台性能,jetty continuation是一个选择
现在特别流行的说法就是事件驱动,看看node.js以及redis,
jetty continuation也不例外
package org.kaka.
import java.io.IOE
import java.io.PrintW
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.eclipse.jetty.continuation.C
import org.eclipse.jetty.continuation.ContinuationS
public class SimpleSuspendResumeServlet extends HttpServlet {
private static final long serialVersionUID = 2978130L;
private MyAsyncHandler myAsyncH
public void init() throws ServletException {
myAsyncHandler = new MyAsyncHandler() {
public void register(final MyHandler myHandler) {
new Thread(new Runnable() {
public void run() {
Thread.sleep(10000);
myHandler.onMyEvent("complete!");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}).start();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// if we need to get asynchronous results
//Object results = request.getAttribute("results");
final PrintWriter writer = response.getWriter();
final Continuation continuation = ContinuationSupport
.getContinuation(request);
//if (results == null) {
if (continuation.isInitial()) {
//request.setAttribute("results","null");
sendMyFirstResponse(response);
// suspend the request
continuation.suspend(); // always suspend before registration
// register with async service. The code here will depend on the
// the service used (see Jetty HttpClient for example)
myAsyncHandler.register(new MyHandler() {
public void onMyEvent(Object result) {
continuation.setAttribute("results", result);
continuation.resume();
// or continuation.undispatch();
if (continuation.isExpired()) {
sendMyTimeoutResponse(response);
//Send the results
Object results = request.getAttribute("results");
if(results==null){
response.getWriter().write("why reach here??");
continuation.resume();
sendMyResultResponse(response, results);
private interface MyAsyncHandler {
public void register(MyHandler myHandler);
private interface MyHandler {
public void onMyEvent(Object result);
private void sendMyFirstResponse(HttpServletResponse response) throws IOException {
//必须加上这一行,否者flush也没用,为什么?
response.setContentType("text/html");
response.getWriter().write("start");
response.getWriter().flush();
private void sendMyResultResponse(HttpServletResponse response,
Object results) throws IOException {
//response.setContentType("text/html");
response.getWriter().write("results:" + results);
response.getWriter().flush();
private void sendMyTimeoutResponse(HttpServletResponse response)
throws IOException {
response.getWriter().write("timeout");
这个例子到底干了什么?
出于演示的目的,这个例子格外简单。模拟了在web请求中如何处理一个耗时阻塞10s的io操作
常规的遇到这种情况(假设没有设置超时),通常会等待10s,线程会白白浪费在哪,一旦请求一多,线程池及等待队列会满掉,从而导致网站无法服务
稍微好点的程序恐怕会使用futuretask来解决问题,但无论怎样,futuretask带有轮询的性质,或多或少会带有阻塞
jetty continuation更进了一步, 采用事件驱动的方式来通知请求完成,丝毫不浪费一点io时间,一旦遇到阻塞,当前worker线程会结束,这样就可以服务其他请求,等耗时操作处理完毕通知jetty,此时jetty会再动用一个新的worker线程再次处理请求
具体流程1,耗时操作在AsyncContinuation默认超时(30s,可以设置)之内完成
当请求到来,被selector线程感知
selector线程,会实例化org.eclipse.jetty.server.Request以及org.eclipse.jetty.server.AsyncContinuation
AsyncContinuation实例此时状态为__IDLE
worker线程A会获取到selector线程派发的这个请求
流程进入org.eclipse.jetty.server.AsyncHttpConnection(AbstractHttpConnection).handleRequest()
调用_request._async.handling(),AsyncContinuation实例的状态__IDLE--&__DISPATCHED
调用真正的业务逻辑server.handle(this);业务逻辑中调用AsyncContinuation.suspend(ServletContext, ServletRequest, ServletResponse) ,会将AsyncContinuation实例的状态__DISPATCHED--&__ASYNCSTARTED
最后调用_request._async.unhandle(),AsyncContinuation实例的状态__ASYNCSTARTED--&__ASYNCWAIT
会将suspend的那个请求任务放入selector线程的超时队列(和redis 事件框架的做法非常类似)
为了简单期间,假设在上诉过程中,耗时操作还没完成,此时worker线程A被回收将会服务其他请求,虽然当前请求并未完成
匿名应用线程(在jetty woker线程另外启动的线程)完成耗时操作
调用AsyncContinuation.resume() ,此时AsyncContinuation实例的状态__ASYNCWAIT--&__REDISPATCH
然后会往worker线程队列或者selector线程队列中添加一个请求task,以此来触发jetty再次完成未完成的请求
worker线程B再次处理那个请求
流程进入org.eclipse.jetty.server.AsyncHttpConnection(AbstractHttpConnection).handleRequest()
调用_request._async.handling(),AsyncContinuation实例的状态__REDISPATCH--&__REDISPATCHED
调用server.handleAsync(this);再次进入业务逻辑,此时耗时操作已完成,可以输出最后的结果
调用_request._async.unhandle()
AsyncContinuation实例的状态__REDISPATCHED--&__UNCOMPLETED
调用_request._async.doComplete(),AsyncContinuation实例的状态__UNCOMPLETED--&__COMPLETED
具体流程2,耗时操作超过了AsyncContinuation默认超时时间
selector线程轮询中感知到耗时任务超时
此时在轮询中能感知并获取这个task,见org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect()
将此task丢入worker线程队列
worker线程C处理超时任务
调用AsyncContinuation.expired() ,此时AsyncContinuation实例的状态__ASYNCWAIT--&__REDISPATCH
然后会往worker线程队列或者selector线程队列中添加一个请求task,以此来触发jetty再次完成未完成的请求
具体流程3,耗时操作非常快
worker线程A会获取到selector线程派发的这个请求
流程进入org.eclipse.jetty.server.AsyncHttpConnection(AbstractHttpConnection).handleRequest()
调用_request._async.handling(),AsyncContinuation实例的状态__IDLE--&__DISPATCHED
调用真正的业务逻辑server.handle(this);业务逻辑中调用AsyncContinuation.suspend(ServletContext, ServletRequest, ServletResponse) ,会将AsyncContinuation实例的状态__DISPATCHED--&__ASYNCSTARTED
匿名应用线程(在jetty woker线程另外启动的线程)完成耗时操作,在2)中调用_request._async.unhandle()之前完成
调用AsyncContinuation.resume() ,此时AsyncContinuation实例的状态__ASYNCSTARTED--&__REDISPATCHING
还是那个work线程A,注意此时3已经完成
调用_request._async.unhandle(),,AsyncContinuation实例的状态__REDISPATCHING--&__REDISPATCHED
由于此时_request._async.unhandle()返回false,再次进入循环调用server.handleAsync(this);再次进入业务逻辑,此时耗时操作已完成,可以输出最后的结果
调用_request._async.unhandle()
AsyncContinuation实例的状态__REDISPATCHED--&__UNCOMPLETED
调用_request._async.doComplete(),AsyncContinuation实例的状态__UNCOMPLETED--&__COMPLETED
jetty continuation需要在应用中使用应用级的线程池来完成一些io任务,这个在普通的web编程并不常见
在应用的第一次请求中需要
调用AsyncContinuation.suspend(完成一个状态的转换,以及产生一个超时任务)
将耗时任务派发给应用线程池
完毕后,jetty回收该请求线程
io任务在应用线程中完成后,然后通过AsyncContinuation.resume或者complete等方法通知jetty任务完成
jetty然后会再次分配一个worker线程处理该请求(如果逻辑复杂,如并行的多次Io会分配多个worker线程)
引入jetty continuation带来的负面作用是编程模型会变得复杂,需要仔细的切割各类io任务
此例子在jetty7.2和jetty7.6中测试通过,但在jetty8中运行失败(因为调用flush导致request中_header为空从而引发NPE[jetty8的bug?],但如果不掉用有达不大展示效果)
&&&&推荐文章:
【上篇】【下篇】ServletContext (Servlet 3.0 API Documentation - Apache Tomcat 7.0.77)
JavaScript is disabled on your browser.
Interface ServletContext
public interface ServletContext
Defines a set of methods that a servlet uses to communicate with its servlet
container, for example, to get the MIME type of a file, dispatch requests, or
write to a log file.
There is one context per "web application" per Java Virtual Machine. (A
"web application" is a collection of servlets and content installed under a
specific subset of the server's URL namespace such as /catalog
and possibly installed via a .war file.)
In the case of a web application marked "distributed" in its deployment
descriptor, there will be one context instance for each virtual machine. In
this situation, the context cannot be used as a location to share global
information (because the information won't be truly global). Use an external
resource like a database instead.
The ServletContext object is contained within the
object, which the Web server provides the servlet when
the servlet is initialized.
See Also:,
Field Summary
Modifier and Type
Field and Description
static java.lang.String
static java.lang.String
Method Summary
Modifier and Type
Method and Description
(java.lang.String&filterName,
java.lang.Class&? extends &&filterClass)&
(java.lang.String&filterName,
(java.lang.String&filterName,
java.lang.String&className)&
(java.lang.Class&? extends java.util.EventListener&&listenerClass)&
(java.lang.String&className)&
&T extends java.util.EventListener&&void
(java.lang.String&servletName,
java.lang.Class&? extends &&servletClass)&
(java.lang.String&servletName,
&servlet)&
(java.lang.String&servletName,
java.lang.String&className)&
&T extends &&T
(java.lang.Class&T&&c)&
&T extends java.util.EventListener&&T
(java.lang.Class&T&&c)&
&T extends &&T
(java.lang.Class&T&&c)&
(java.lang.String...&roleNames)&
java.lang.Object
(java.lang.String&name)
Returns the servlet container attribute with the given name, or
null if there is no attribute by that name.
java.util.Enumeration&java.lang.String&
Returns an Enumeration containing the attribute names
available within this servlet context.
java.lang.ClassLoader
(java.lang.String&uripath)
Returns a ServletContext object that corresponds to a
specified URL on the server.
java.lang.String
java.util.Set&&
java.util.Set&&
(java.lang.String&filterName)&
java.util.Map&java.lang.String,? extends &
java.lang.String
(java.lang.String&name)
Returns a String containing the value of the named
context-wide initialization parameter, or null if the
parameter does not exist.
java.util.Enumeration&java.lang.String&
Returns the names of the context's initialization parameters as an
Enumeration of String objects, or an empty
Enumeration if the context has no initialization parameters.
Returns the major version of the Java Servlet API that this servlet
container supports.
java.lang.String
(java.lang.String&file)
Returns the MIME type of the specified file, or null if the
MIME type is not known.
Returns the minor version of the Servlet API that this servlet container
(java.lang.String&name)
object that acts as a wrapper for the
named servlet.
java.lang.String
(java.lang.String&path)
Returns a String containing the real path for a given
virtual path.
(java.lang.String&path)
object that acts as a wrapper for the
resource located at the given path.
java.net.URL
(java.lang.String&path)
Returns a URL to the resource that is mapped to a specified path.
java.io.InputStream
(java.lang.String&path)
Returns the resource located at the named path as an
InputStream object.
java.util.Set&java.lang.String&
(java.lang.String&path)
Returns a directory-like listing of all the paths to resources within the
web application whose longest sub-path matches the supplied path
java.lang.String
Returns the name and version of the servlet container on which the
servlet is running.
(java.lang.String&name)
Deprecated.&
As of Java Servlet API 2.1, with no direct replacement.
This method was originally defined to retrieve a servlet from
a ServletContext. In this version, this method
always returns null and remains only to preserve
binary compatibility. This method will be permanently removed
in a future version of the Java Servlet API.
In lieu of this method, servlets can share information using
the ServletContext class and can perform shared
business logic by invoking methods on common non-servlet
java.lang.String
Returns the name of this web application corresponding to this
ServletContext as specified in the deployment descriptor for this web
application by the display-name element.
java.util.Enumeration&java.lang.String&
Deprecated.&
As of Java Servlet API 2.1, with no replacement.
This method was originally defined to return an
Enumeration of all the servlet names known to
this context. In this version, this method always returns an
empty Enumeration and remains only to preserve
binary compatibility. This method will be permanently removed
in a future version of the Java Servlet API.
(java.lang.String&servletName)
Obtain the details of the named servlet.
java.util.Map&java.lang.String,? extends &
java.util.Enumeration&&
Deprecated.&
As of Java Servlet API 2.0, with no replacement.
This method was originally defined to return an
Enumeration of all the servlets known to this
servlet context. In this version, this method always returns
an empty enumeration and remains only to preserve binary
compatibility. This method will be permanently removed in a
future version of the Java Servlet API.
(java.lang.Exception&exception,
java.lang.String&msg)
Deprecated.&
As of Java Servlet API 2.1, use
This method was originally defined to write an exception's
stack trace and an explanatory error message to the servlet
(java.lang.String&msg)
Writes the specified message to a servlet log file, usually an event log.
(java.lang.String&message,
java.lang.Throwable&throwable)
Writes an explanatory message and a stack trace for a given
Throwable exception to the servlet log file.
(java.lang.String&name)
Removes the attribute with the given name from the servlet context.
(java.lang.String&name,
java.lang.Object&object)
Binds an object to a given attribute name in this servlet context.
(java.lang.String&name,
java.lang.String&value)&
(java.util.Set&&&sessionTrackingModes)&
Field Detail
static final&java.lang.String TEMPDIR
ORDERED_LIBS
static final&java.lang.String ORDERED_LIBS
Servlet 3.0
Method Detail
getContext
&getContext(java.lang.String&uripath)
Returns a ServletContext object that corresponds to a
specified URL on the server.
This method allows servlets to gain access to the context for various
parts of the server, and as needed obtain
objects from the context. The given path must be begin with "/", is
interpreted relative to the server's document root and is matched against
the context roots of other web applications hosted on this container.
In a security conscious environment, the servlet container may return
null for a given URL.
Parameters:uripath - a String specifying the context path of another
web application in the container.
Returns:the ServletContext object that corresponds to the
named URL, or null if either none exists or the container wishes
to restrict this access.See Also:
getContextPath
java.lang.String&getContextPath()
getMajorVersion
int&getMajorVersion()
Returns the major version of the Java Servlet API that this servlet
container supports. All implementations that comply with Version 3.0 must
have this method return the integer 3.
getMinorVersion
int&getMinorVersion()
Returns the minor version of the Servlet API that this servlet container
supports. All implementations that comply with Version 3.0 must have this
method return the integer 0.
getEffectiveMajorVersion
int&getEffectiveMajorVersion()
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
getEffectiveMinorVersion
int&getEffectiveMinorVersion()
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
getMimeType
java.lang.String&getMimeType(java.lang.String&file)
Returns the MIME type of the specified file, or null if the
MIME type is not known. The MIME type is determined by the configuration
of the servlet container, and may be specified in a web application
deployment descriptor. Common MIME types are "text/html" and
"image/gif".
Parameters:file - a String specifying the name of a file
Returns:a String specifying the file's MIME type
getResourcePaths
java.util.Set&java.lang.String&&getResourcePaths(java.lang.String&path)
Returns a directory-like listing of all the paths to resources within the
web application whose longest sub-path matches the supplied path
argument. Paths indicating subdirectory paths end with a '/'. The
returned paths are all relative to the root of the web application and
have a leading '/'. For example, for a web application containing
/welcome.html
/catalog/index.html
/catalog/products.html
/catalog/offers/books.html
/catalog/offers/music.html
/customer/login.jsp
/WEB-INF/web.xml
/WEB-INF/classes/com.acme.OrderServlet.class,
getResourcePaths("/") returns {"/welcome.html", "/catalog/",
"/customer/", "/WEB-INF/"}
getResourcePaths("/catalog/") returns {"/catalog/index.html",
"/catalog/products.html", "/catalog/offers/"}.
Parameters:path - the partial path used to match the resources, which must start
Returns:a Set containing the directory listing, or null if there are no
resources in the web application whose path begins with the
supplied path.Since:
Servlet 2.3
getResource
java.net.URL&getResource(java.lang.String&path)
throws java.net.MalformedURLException
Returns a URL to the resource that is mapped to a specified path. The
path must begin with a "/" and is interpreted as relative to the current
context root.
This method allows the servlet container to make a resource available to
servlets from any source. Resources can be located on a local or remote
file system, in a database, or in a .war file.
The servlet container must implement the URL handlers and
URLConnection objects that are necessary to access the
This method returns null if no resource is mapped to the
Some containers may allow writing to the URL returned by this method
using the methods of the URL class.
The resource content is returned directly, so be aware that requesting a
.jsp page returns the JSP source code. Use a
RequestDispatcher instead to include results of an
execution.
This method has a different purpose than
java.lang.Class.getResource, which looks up resources based
on a class loader. This method does not use class loaders.
Parameters:path - a String specifying the path to the resource
Returns:the resource located at the named path, or null if
there is no resource at that path
java.net.MalformedURLException - if the pathname is not given in the correct form
getResourceAsStream
java.io.InputStream&getResourceAsStream(java.lang.String&path)
Returns the resource located at the named path as an
InputStream object.
The data in the InputStream can be of any type or length.
The path must be specified according to the rules given in
getResource. This method returns null if no
resource exists at the specified path.
Meta-information such as content length and content type that is
available via getResource method is lost when using this
The servlet container must implement the URL handlers and
URLConnection objects necessary to access the resource.
This method is different from
java.lang.Class.getResourceAsStream, which uses a class
loader. This method allows servlet containers to make a resource
available to a servlet from any location, without using a class loader.
Parameters:path - a String specifying the path to the resource
Returns:the InputStream returned to the servlet, or
null if no resource exists at the specified path
getRequestDispatcher
&getRequestDispatcher(java.lang.String&path)
object that acts as a wrapper for the
resource located at the given path. A RequestDispatcher
object can be used to forward a request to the resource or to include the
resource in a response. The resource can be dynamic or static.
The pathname must begin with a "/" and is interpreted as relative to the
current context root. Use getContext to obtain a
RequestDispatcher for resources in foreign contexts. This
method returns null if the ServletContext
cannot return a RequestDispatcher.
Parameters:path - a String specifying the pathname to the resource
Returns:a RequestDispatcher object that acts as a wrapper for
the resource at the specified path, or null if the
ServletContext cannot return a
RequestDispatcherSee Also:,
getNamedDispatcher
&getNamedDispatcher(java.lang.String&name)
object that acts as a wrapper for the
named servlet.
Servlets (and JSP pages also) may be given names via server
administration or via a web application deployment descriptor. A servlet
instance can determine its name using
This method returns null if the ServletContext
cannot return a RequestDispatcher for any reason.
Parameters:name - a String specifying the name of a servlet to wrap
Returns:a RequestDispatcher object that acts as a wrapper for
the named servlet, or null if the
ServletContext cannot return a
RequestDispatcherSee Also:,
getServlet
&getServlet(java.lang.String&name)
Deprecated.&As of Java Servlet API 2.1, with no direct replacement.
This method was originally defined to retrieve a servlet from
a ServletContext. In this version, this method
always returns null and remains only to preserve
binary compatibility. This method will be permanently removed
in a future version of the Java Servlet API.
In lieu of this method, servlets can share information using
the ServletContext class and can perform shared
business logic by invoking methods on common non-servlet
getServlets
java.util.Enumeration&&&getServlets()
Deprecated.&As of Java Servlet API 2.0, with no replacement.
This method was originally defined to return an
Enumeration of all the servlets known to this
servlet context. In this version, this method always returns
an empty enumeration and remains only to preserve binary
compatibility. This method will be permanently removed in a
future version of the Java Servlet API.
getServletNames
java.util.Enumeration&java.lang.String&&getServletNames()
Deprecated.&As of Java Servlet API 2.1, with no replacement.
This method was originally defined to return an
Enumeration of all the servlet names known to
this context. In this version, this method always returns an
empty Enumeration and remains only to preserve
binary compatibility. This method will be permanently removed
in a future version of the Java Servlet API.
void&log(java.lang.String&msg)
Writes the specified message to a servlet log file, usually an event log.
The name and type of the servlet log file is specific to the servlet
container.
Parameters:msg - a String specifying the message to be written to
the log file
void&log(java.lang.Exception&exception,
java.lang.String&msg)
Deprecated.&As of Java Servlet API 2.1, use
This method was originally defined to write an exception's
stack trace and an explanatory error message to the servlet
void&log(java.lang.String&message,
java.lang.Throwable&throwable)
Writes an explanatory message and a stack trace for a given
Throwable exception to the servlet log file. The name and
type of the servlet log file is specific to the servlet container,
usually an event log.
Parameters:message - a String that describes the error or exceptionthrowable - the Throwable error or exception
getRealPath
java.lang.String&getRealPath(java.lang.String&path)
Returns a String containing the real path for a given
virtual path. For example, the path "/index.html" returns the absolute
file path on the server's filesystem would be served by a request for
"http://host/contextPath/index.html", where contextPath is the context
path of this ServletContext..
The real path returned will be in a form appropriate to the computer and
operating system on which the servlet container is running, including the
proper path separators. This method returns null if the
servlet container cannot translate the virtual path to a real path for
any reason (such as when the content is being made available from a
.war archive).
Parameters:path - a String specifying a virtual path
Returns:a String specifying the real path, or null if the
translation cannot be performed
getServerInfo
java.lang.String&getServerInfo()
Returns the name and version of the servlet container on which the
servlet is running.
The form of the returned string is
servername/versionnumber. For example, the JavaServer Web
Development Kit may return the string
JavaServer Web Dev Kit/1.0.
The servlet container may return other optional information after the
primary string in parentheses, for example,
JavaServer Web Dev Kit/1.0 (JDK 1.1.6; Windows NT 4.0 x86).
Returns:a String containing at least the servlet container
name and version number
getInitParameter
java.lang.String&getInitParameter(java.lang.String&name)
Returns a String containing the value of the named
context-wide initialization parameter, or null if the
parameter does not exist.
This method can make available configuration information useful to an
entire "web application". For example, it can provide a webmaster's email
address or the name of a system that holds critical data.
Parameters:name - a String containing the name of the parameter
whose value is requested
Returns:a String containing the value of the initialization
parameterSee Also:
getInitParameterNames
java.util.Enumeration&java.lang.String&&getInitParameterNames()
Returns the names of the context's initialization parameters as an
Enumeration of String objects, or an empty
Enumeration if the context has no initialization parameters.
Returns:an Enumeration of String objects
containing the names of the context's initialization parametersSee Also:
setInitParameter
boolean&setInitParameter(java.lang.String&name,
java.lang.String&value)
Parameters:name - value -
Returns:TODO
java.lang.IllegalStateException
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
getAttribute
java.lang.Object&getAttribute(java.lang.String&name)
Returns the servlet container attribute with the given name, or
null if there is no attribute by that name. An attribute
allows a servlet container to give the servlet additional information not
already provided by this interface. See your server documentation for
information about its attributes. A list of supported attributes can be
retrieved using getAttributeNames.
The attribute is returned as a java.lang.Object or some
subclass. Attribute names should follow the same convention as package
names. The Java Servlet API specification reserves names matching
java.*, javax.*, and sun.*.
Parameters:name - a String specifying the name of the attribute
Returns:an Object containing the value of the attribute, or
null if no attribute exists matching the given nameSee Also:
getAttributeNames
java.util.Enumeration&java.lang.String&&getAttributeNames()
Returns an Enumeration containing the attribute names
available within this servlet context. Use the
method with an attribute name to get the value of an attribute.
Returns:an Enumeration of attribute namesSee Also:
setAttribute
void&setAttribute(java.lang.String&name,
java.lang.Object&object)
Binds an object to a given attribute name in this servlet context. If the
name specified is already used for an attribute, this method will replace
the attribute with the new to the new attribute.
If listeners are configured on the ServletContext the
container notifies them accordingly.
If a null value is passed, the effect is the same as calling
removeAttribute().
Attribute names should follow the same convention as package names. The
Java Servlet API specification reserves names matching
java.*, javax.*, and sun.*.
Parameters:name - a String specifying the name of the attributeobject - an Object representing the attribute to be bound
removeAttribute
void&removeAttribute(java.lang.String&name)
Removes the attribute with the given name from the servlet context. After
removal, subsequent calls to
to retrieve the
attribute's value will return null.
If listeners are configured on the ServletContext the
container notifies them accordingly.
Parameters:name - a String specifying the name of the attribute to
be removed
getServletContextName
java.lang.String&getServletContextName()
Returns the name of this web application corresponding to this
ServletContext as specified in the deployment descriptor for this web
application by the display-name element.
Returns:The name of the web application or null if no name has been
declared in the deployment descriptor.Since:
Servlet 2.3
addServlet
&addServlet(java.lang.String&servletName,
java.lang.String&className)
Parameters:servletName - className -
Returns:TODO
java.lang.IllegalStateException - If the context has already been initialised
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
addServlet
&addServlet(java.lang.String&servletName,
Parameters:servletName - servlet -
Returns:TODO
java.lang.IllegalStateException - If the context has already been initialised
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
addServlet
&addServlet(java.lang.String&servletName,
java.lang.Class&? extends &&servletClass)
Parameters:servletName - servletClass -
Returns:TODO
java.lang.IllegalStateException - If the context has already been initialised
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
createServlet
&T extends &&T&createServlet(java.lang.Class&T&&c)
Parameters:c -
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
getServletRegistration
&getServletRegistration(java.lang.String&servletName)
Obtain the details of the named servlet.
Parameters:servletName - The name of the Servlet of interest
Returns:The registration details for the named Servlet or
null if no Servlet has been registered with the
given name
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0
getServletRegistrations
java.util.Map&java.lang.String,? extends &&getServletRegistrations()
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
&addFilter(java.lang.String&filterName,
java.lang.String&className)
Parameters:filterName - className -
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.
java.lang.IllegalStateException - If the context has already been initialisedSince:
Servlet 3.0 TODO SERVLET3 - Add comments
&addFilter(java.lang.String&filterName,
Parameters:filterName - filter -
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.
java.lang.IllegalStateException - If the context has already been initialisedSince:
Servlet 3.0 TODO SERVLET3 - Add comments
&addFilter(java.lang.String&filterName,
java.lang.Class&? extends &&filterClass)
Parameters:filterName - filterClass -
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.
java.lang.IllegalStateException - If the context has already been initialisedSince:
Servlet 3.0 TODO SERVLET3 - Add comments
createFilter
&T extends &&T&createFilter(java.lang.Class&T&&c)
Parameters:c -
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.
Servlet 3.0 TODO SERVLET3 - Add comments
getFilterRegistration
&getFilterRegistration(java.lang.String&filterName)
Parameters:filterName -
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
getFilterRegistrations
java.util.Map&java.lang.String,? extends &&getFilterRegistrations()
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
getSessionCookieConfig
&getSessionCookieConfig()
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
setSessionTrackingModes
void&setSessionTrackingModes(java.util.Set&&&sessionTrackingModes)
throws java.lang.IllegalStateException,
java.lang.IllegalArgumentException
Parameters:sessionTrackingModes -
java.lang.IllegalArgumentException - If sessionTrackingModes specifies
in combination with any other
java.lang.IllegalStateException - If the context has already been initialised
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
getDefaultSessionTrackingModes
java.util.Set&&&getDefaultSessionTrackingModes()
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
getEffectiveSessionTrackingModes
java.util.Set&&&getEffectiveSessionTrackingModes()
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
addListener
void&addListener(java.lang.String&className)
Parameters:className -
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
addListener
&T extends java.util.EventListener&&void&addListener(T&t)
Type Parameters:T - Parameters:t -
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
addListener
void&addListener(java.lang.Class&? extends java.util.EventListener&&listenerClass)
Parameters:listenerClass -
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
createListener
&T extends java.util.EventListener&&T&createListener(java.lang.Class&T&&c)
Type Parameters:T - Parameters:c -
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
declareRoles
void&declareRoles(java.lang.String...&roleNames)
Parameters:roleNames -
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.
java.lang.IllegalArgumentException
java.lang.IllegalStateExceptionSince:
Servlet 3.0 TODO SERVLET3 - Add comments
getClassLoader
java.lang.ClassLoader&getClassLoader()
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.
java.lang.SecurityExceptionSince:
Servlet 3.0 TODO SERVLET3 - Add comments
getJspConfigDescriptor
&getJspConfigDescriptor()
Returns:TODO
java.lang.UnsupportedOperationException - If called from a
method of a
that was not defined in a
web.xml file, a web-fragment.xml file nor annotated with
. For example, a
defined in a TLD would not be able to
use this method.Since:
Servlet 3.0 TODO SERVLET3 - Add comments
Copyright ©
Apache Software Foundation. All Rights Reserved.

参考资料

 

随机推荐