|
61) Is there any way to determine the
number of concurrent connections my servlet engine can
handle?
Depends on whether or not your servlet
container uses thread pooling. If you do not use a thread pool, the number of
concurrent connections accepted by Tomcat 3.1, for example, is 10. This you
can see for yourself by testing a servlet with the Apache JMeter tool.
However, if your servlet container uses a
thread pool, you can specify the number of concurrent connections to be
accepted by the container. For Tomcat 3.1, the information on how to do so is
supplied with the documentation in the TOMCAT_HOME/doc/uguide
directory.
62) What is a request dispatcher and how
does it work?
A RequestDispatcher
object can forward a client's request to a resource or include the resource
itself in the response back to the client. A resource can be another servlet,
or an HTML file, or a JSP file, etc.
You can also think of a RequestDispatcher
object as a wrapper for the resource located at a given path that is supplied
as an argument to the getRequestDispatcher method.
For constructing a RequestDispatcher
object, you can use either the ServletRequest.getRequestDispatcher()
method or the ServletContext.getRequestDispatcher() method. They both do
the same thing, but impose slightly different constraints on the argument
path. For the former, it looks for the resource in the same webapp to which
the invoking servlet belongs and the pathname specified can be relative to
invoking servlet. For the latter, the pathname must begin with '/' and is
interpreted relative to the root of the webapp.
To illustrate, suppose you want Servlet_A
to invoke Servlet_B. If they are both in the
same directory, you could accomplish this by incorporating the following code
fragment in either the service method or
the doGet method of Servlet_A:
RequestDispatcher dispatcher = getRequestDispatcher("Servlet_B");
dispatcher.forward( request, response );
where request,
of type HttpServletRequest, is the first parameter of
the enclosing service method (or the
doGet method) and response,
of type HttpServletResponse, the second. You could
accomplish the same by
RequestDispatcher dispatcher=getServletContext().getRequestDispatcher( "/servlet/Servlet_B" );
dispatcher.forward( request, response );
63) What is a Servlet
Context?
A Servlet Context is a grouping under which
related servlets (and JSPs and other web resources) run. They can share data,
URL namespace, and other resources. There can be multiple contexts in a single
servlet
container.
The ServletContext object is used by an
individual servlet to "call back" and obtain services from the container (such
as a request dispatcher). Read the JavaDoc for javax.servlet.ServletContext
for more information.
You can maintain "application global"
variables by using
Servlet Context
Attributes.
64) Does the RequestDispatcher expect a
relative URL to be relative to the originally-called servlet or to the current
servlet (if different)?
Since the RequestDispatcher will be passing
the control (request object and response object) from the current Servlet, the
relative URL must be relative to the current servlet.
The originally called servlet has passed the
control to the current servlet, and now current servlet is acting as
controller to other resourses.
65) What is the difference between
in-process and out-of-process servlet containers?
The in-process Servlet containers are the
containers which work inside the JVM of Web server, these provides good
performance but poor in scalibility.
The out-of-process containers are the containers which work in the JVM outside
the web server. poor in performance but better in scalibility
In the case of out-of-process containers, web server and container talks with
each other by using the some standard mechanism like IPC.
In addition to these types of containers, there is 3rd type which is
stand-alone servlet containers. These are an integral part of the web
server.
66) How is SingleThreadModel implemented in
Tomcat? In other containers? [I would assume that Tomcat uses its connection
thread pool, and creates a new instance of the servlet for each connection
thread, instead of sharing one instance among all threads. Is that
true?]
The question mixes together two rather
independent aspects of a servlet container: "concurrency control" and "thread
pooling".
Concurrency control, such as achieved by
having a servlet implement the SingleThreadModel
interface, addresses the issue of thread safety. A servlet will be thread-safe
or thread-unsafe regardless of whether the servlet container used a thread
pool. Thread pooling merely eliminates the overhead associated with the
creation and destruction of threads as a servlet container tries to respond to
multiple requests received simultaneously. It is for this reason that the
specification document for Servlet 2.2 API is silent on the subject of thread
pooling -- as it is merely an implementation detail. However, the document
does indeed address the issue of thread safety and how and when to use
SingleThreadModel servlets.
Section 3.3.3.1 of the Servlet 2.2 API
Specification document says that if a servlet implements the SingleThreadModel
it is guaranteed "that only one request thread at time will be allowed in the
service method." It says further that "a servlet container may satisfy this
guarantee by serializing requests on a servlet or by maintaining a pool of
servlet instances."
Obviously, for superior performance you'd want
the servlet container to create multiple instances of a SingleThreadModel
type servlet should there be many requests received in quick succession.
Whether or not a servlet container does that depends completely on the
implementation. My experiments show that Tomcat 3.1 does indeed create
multiple instances of a SingleThreadModel servlet,
but only for the first batch of requests received concurrently. For subsequent
batches of concurrent requests, it seems to use only one of those instances.
67) Which servlet containers have
persistent session support? Specifically, does Tomcat
3.1?
All servlet containers that implement the
Servlet 2.2 API must provide for session tracking through either the use of
cookies or through URL rewriting. All Tomcat servlet containers support
session tracking.
68) Can I use JAAS as the authentication
technology for servlets ?
Yes, JAAS can be used as authentication
technology for servlets. One important feature of JAAS is pure Java
implementation. The JAAS infrastructure is divided into two main components:
an authentication component and an authorization component. The JAAS
authentication component provides the ability to reliably and securely
determine who is currently executing Java code, regardless of whether the code
is running as an application, an applet, a bean, or a servlet.
69) How can I set a servlet to load on
startup of the container, rather than on the first
request?
The Servlet 2.2 spec defines a load-on-startup
element for just this purpose. Put it in the <servlet> section of your
web.xml deployment descriptor. It is either empty (<load-on-startup/>)
or contains "a positive integer indicating the order in which the servlet
should be loaded. Lower integers are loaded before higher integers. If no
value is specified, or if the value specified is not a positive integer, the
container is free to load it at any time in the startup sequence."
For example,
<servlet>
<servlet-name>foo</servlet-name>
<servlet-class>com.foo.servlets.Foo</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
Some servlet containers also have their own
techniques for configuring this; please submit feedback with information on
these.
70) Is it possible to write a servlet that
acts as a FTP server?
Yes. It would spawn a thread that opens a
ServerSocket, then listens for incoming connections and speaks the FTP
protocol.
java6 ejb3 jsf hibernate eclipse ajax groovy spring seam java struts webservice j2me guice java5 jca tapestry soa linux ria books
|