1.3. For each of the following operations, identify
the interface and method name that should be used:
1.3.1. Retrieve HTML form parameters from the request:
1.3.1.1. Enumeration ServletRequest.getParameterNames()
- returns empty enum if no parameters
1.3.1.2. String
ServletRequest.getParameter(String name) - returns null
if does not exist
1.3.1.3. String[] ServletRequest.getParameterValues(String
name) - returns null if does not exist
1.3.2. Retrieve
a servlet initialization parameter:
1.3.2.1. Enumeration
ServletConfig.getInitParameterNames() - returns empty enum
if no init parameters
1.3.2.2. String ServletConfig.getInitParameter(String
name) - returns null if does not exist
1.3.3. Retrieve
HTTP request header information:
1.3.3.1. Enumeration
HttpServletRequest.getHeaderNames() - returns empty enum
if no headers
1.3.3.2. String HttpServletRequest.getHeader(String
name) - returns null if does not exist
1.3.3.3. Enumeration
HttpServletRequest.getHeaders(String name) - returns empty
enum if no headers
1.3.3.4. long getDateHeader(String
name) - returns -1 if does not exist
1.3.3.5. int getIntHeader(String
name) - returns -1 if does not exist
1.3.4. Set an HTTP
response header; set the content type of the response
1.3.4.1. void HttpServletResponse.setHeader(String name,
String value) - if header already exists, overwrites its
value
1.3.4.2. void HttpServletResponse.setIntHeader(String
name, int value)
1.3.4.3. void HttpServletResponse.setDateHeader(String
name, long date)
1.3.4.4. void HttpServletResponse.addHeader(String
name, String value) - if header already exists, adds an
additional value
1.3.4.5. void HttpServletResponse.addIntHeader(String
name, int value)
1.3.4.6. void HttpServletResponse.addDateHeader(String
name, long date)
1.3.4.7. void HttpServletResponse.setContentType(String
type) - if calling getWriter(), then setContentType should
be called first
1.3.5. Acquire a text stream for the response
1.3.5.1.
PrintWriter ServletResponse.getWriter() throws IOException
- character encoding may be set by calling setContentType,
which must be called before calling getWriter()
1.3.6.
Acquire a binary stream for the response
1.3.6.1. ServletOutputStream
ServletResponse.getOutputStream() throws IOException
1.3.7. Redirect an HTTP request to another URL
1.3.7.1.
void HttpServletResponse.sendRedirect(String location) throws
IllegalStateException IOException
1.3.7.2. sets status
to SC_MOVED_TEMPORARILY, sets the Location header, and performs
an implicit reset on the response buffer before generating
the redirect page; headers set before sendRedirect() remain
set
1.3.7.3. must be called before response body is committed,
else throws IllegalStateException
1.3.7.4. the path may
be relative or absolute
1.3.7.5. to support clients without
redirect capability, method writes a short response body
that contains a hyperlink to the new location; so do not
write your own msg body
1.4. Identify the interface and method to access values
and resources and to set object attributes within the following
three Web scopes:
1.4.1. Request (Interfaces: ServletRequest and HttpServletRequest)
1.4.1.1. Enumeration ServletRequest.getAttributeNames()
- returns empty enumeration if no attributes
1.4.1.2.
Object ServletRequest.getAttribute(String name) - returns
null if does not exist
1.4.1.3. void setAttribute(String
name, Object obj) - most often used in conjunction with
RequestDispatcher; attrib names should follow same convention
as pkg names
1.4.1.4. void removeAttribute(String name)
1.4.1.5. String ServletRequest.getCharacterEncoding() -
returns encoding used in request body, or null if not specified
1.4.1.6. int ServletRequest.getContentLength() - returns
length of request body or -1 if unknown
1.4.1.7. String
ServletRequest.getContentType() - returns mime type of request
body or null if unknown
1.4.1.8. String ServletRequest.getProtocol()
- returns protocol/version, e.g. HTTP/1.1
1.4.1.9. String
ServletRequest.getScheme() - scheme used to make this request,
e.g. ftp, http, https
1.4.1.10. String ServletRequest.getServerName()
1.4.1.11. int ServletRequest.getServerPort()
1.4.1.12.
String HttpServletRequest.getAuthType() - e.g. BASIC, SSL,
or null if not protected
1.4.1.13. String HttpServletRequest.getContextPath()
- e.g. "/myservlet"
1.4.1.14. String HttpServletRequest.getMethod()
- e.g. GET, POST, HEAD, PUT
1.4.1.15. String HttpServletRequest.getPathInfo()
- returns extra path info (string following servlet path
but preceding query string); null if does not exist
1.4.1.16.
String HttpServletRequest.getPathTranslated() - translates
extra path info to a real path on the server
1.4.1.17.
String HttpServletRequest.getQueryString() - returns query
string; null if does not exist
1.4.1.18. String HttpServletRequest.getRemoteUser()
- returns null if user not authenticated
1.4.1.19. Principal
HttpServletRequest.getUserPrincipal() - returns null if
user not authenticated
1.4.1.20. String HttpServletRequest.getRequestURI()
- e.g. if request is "POST /some/path.html HTTP/1.1",
then returns "/some/path.html"
1.4.1.21. String
HttpServletRequest.getServletPath() - returns servlet path
and name, but no extra path info
1.4.1.22. HttpSession
HttpServletRequest.getSession(boolean create)
1.4.1.23.
HttpSession HttpServletRequest.getSession() - calls getSession(true)
1.4.2. Session (Interface: HttpSession)
1.4.2.1. Enumeration
HttpSession.getAttributeNames() - returns empty enumeration
if no attributes; IllegalStateException if session invalidated
1.4.2.2. Object HttpSession.getAttribute(String name) -
returns null if no such object
1.4.2.3. void HttpSession.setAttribute(java.lang.String
name, java.lang.Object value)
1.4.2.4. void HttpSession.removeAttribute(java.lang.String
name)
1.4.2.5. String HttpSession.getId() - returns unique
session identifier assigned by servlet container
1.4.2.6.
long HttpSession.getLastAccessedTime() - time when client
last sent a request associated with this session
1.4.2.7.
int HttpSession.getMaxInactiveInterval() - returns number
of seconds this session remains open between client requests;
-1 if session should never expire
1.4.2.8. void HttpSession.setMaxInactiveInterval(int
interval)
1.4.3. Context (Interface: ServletContext)
1.4.3.1. Enumeration getAttributeNames() - Returns an Enumeration
containing the attribute names available within this servlet
context.
1.4.3.2. Object getAttribute(String name) -
Returns the servlet container attribute with the given name,
or null if there is no attribute by that name.
1.4.3.3.
void setAttribute(String name, java.lang.Object object)
- Binds an object to a given attribute name in this servlet
context.
1.4.3.4. void removeAttribute(String name) -
Removes the attribute with the given name from the servlet
context.
1.4.3.5. ServletContext getContext(String uripath)
- Returns a ServletContext object that corresponds to a
specified URL on the server.
1.4.3.6. String getInitParameter(String
name) - Returns a String containing the value of the named
context-wide initialization parameter, or null if does not
exist.
1.4.3.7. Enumeration getInitParameterNames() -
Returns names of the context's initialization parameters
as Enumeration of String objects
1.4.3.8. int getMajorVersion()
- Returns the major version of the Java Servlet API that
this servlet container supports.
1.4.3.9. int getMinorVersion()
- Returns the minor version of the Servlet API that this
servlet container supports.
1.4.3.10. String getMimeType(String
file) - Returns the MIME type of the specified file, or
null if the MIME type is not known.
1.4.3.11. RequestDispatcher
getNamedDispatcher(String name) - Returns a RequestDispatcher
object that acts as a wrapper for the named servlet.
1.4.3.12. RequestDispatcher getRequestDispatcher(String
path) - Returns a RequestDispatcher object that acts as
a wrapper for the resource located at the given path.
1.4.3.13. String getRealPath(String path) - Returns a String
containing the real path for a given virtual path.
1.4.3.14.
java.net.URL getResource(String path) - Returns a URL to
the resource that is mapped to a specified path.
1.4.3.15.
InputStream getResourceAsStream(String path) - Returns the
resource located at the named path as an InputStream object.
1.4.3.16. String getServerInfo() - Returns the name and
version of the servlet container on which the servlet is
running.
1.5. For each of the following life-cycle method,
identify its purpose and how and when it is invoked:
1.5.1. public void init() throws ServletException:
1.5.1.1. called after server constructs the servlet instance
and before the server handles any requests
1.5.1.2. depending
on the server and web app configuration, init() may be called
at any of these times: (a) when server starts, (b) when
the servlet is first requested, just before the service()
method is invoked, (c) at the request of the server administrator
1.5.1.3. if servlet specifies <load-on-startup/> in
its web.xml file, then upon server startup, the server will
create an instance of the servlet and call its init() method.
1.5.1.4. typically used to perform servlet initialization,
e.g. loading objects used by servlet to handle requests,
reading in servlet init parameters, starting a background
thread.
1.5.1.5. servlet cannot be placed into service
if init method throws ServletException or does not return
within a server-defined time period
1.5.1.6. init() can
only be called once per servlet instance; so would still
need to synchronize access to class variables
1.5.2.
public void service() throws ServletException, IOException:
1.5.2.1. called by the servlet container to allow the servlet
to respond to a request.
1.5.2.2. this method is only
called after the servlet's init() method has completed successfully.
1.5.2.3. servlets typically run inside multithreaded servlet
containers that can handle multiple requests concurrently.
developers must be aware to synchronize access to any shared
resources such as files and network connections, as well
as the servlet's class and instance variables.
1.5.3.
public void destroy():
1.5.3.1. called after the servlet
has been taken out of service and all pending requests to
the servlet have been completed or timed out
1.5.3.2.
gives the servlet an opportunity to clean up any resources
that are being held (for example, memory, file handles,
threads) and make sure that any persistent state is synchronized
with the servlet's current state in memory
1.5.3.3. calling
super.destroy() causes GenericServlet.destroy() to write
a note to the log that the servlet is being destroyed
1.5.3.4. destroy()called once per servlet instance; destroy()
not called if server crashes, so should save state (if needed)
periodically after servicing requests
1.5.4. Note: servlet
reloading
1.5.4.1. most servers automatically reload
a servlet after its class file (under servlet dir, e.g.
WEB-INF/classes) changes. when a server dispatches a request
to a servlet, it first checks whether the servlet's class
file has changed on disk. If it has, then the server creates
a new custom class loader, and reloads the entire web application
context.
1.5.4.2. class reloading is not based on support
class changes or on changes in classes found in the server's
classpath, which are loaded by the core, primordial class
loader.
1.6. Use a RequestDispatcher to include or forward
to a Web resource
1.6.1. include:
1.6.1.1. public void include(ServletRequest
request, ServletResponse response) throws ServletException,
IOException
1.6.1.2. Includes the content of a resource
(servlet, JSP page, HTML file) in the response. In essence,
this method enables programmatic server-side includes.
1.6.1.3. The ServletRequest object has its path elements
(e.g. attributes request_uri, context_path, and servlet_path)
and parameters remain unchanged from the caller's. If the
included element requires information on its own path elements,
it's available in request attributes (javax.servlet.include.request_uri,
context_path etc)
1.6.1.4. The included servlet cannot
change the response status code or set headers; any attempt
to make a change is ignored.
1.6.1.5. The request and
response parameters must be the same objects as were passed
to the calling servlet's service method.
1.6.1.6. The
included resource must use the same output mechanism (e.g.
PrintWriter or ServletOutputStream) as the caller's
1.6.1.7.
Information can be passed to target using attached query
string or using request attributes set with setAttribute()
method.
1.6.1.8. include can be called at any time, even
after the flush is called on the response.
1.6.2. forward:
1.6.2.1. public void forward(ServletRequest request, ServletResponse
response) throws ServletException, IOException
1.6.2.2.
Forwards a request from a servlet to another resource (servlet,
JSP file, or HTML file) on the server. This method allows
one servlet to do preliminary processing of a request and
another resource to generate the response. The forwarding
servlet generates no output, but may set headers.
1.6.2.3.
The ServletRequest object has its path attributes adjusted
to match the path of the target resource. Any new request
parameters are added to the original.
1.6.2.4. forward()
should be called before the response has been committed
to the client (before response body output has been flushed).
If the response already has been committed, this method
throws an IllegalStateException. Uncommitted output in the
response buffer is automatically cleared before the forward.
1.6.2.5. The request and response parameters must be the
same objects as were passed to the calling servlet's service
method.
1.6.2.6. Information can be passed to target
using attached query string or using request attributes
set with setAttribute() method.
1.6.2.7. forwarding to
an html page containing relative url's included (e.g. <IMG>
tags) is a bad idea, because forward() does not notify client
about the directory from which the page is served, hence
the links may be broken. Instead, use sendRedirect().
1.6.3. Note: to get a request dispatcher object:
1.6.3.1.
public javax.servlet.RequestDispatcher ServletRequest.getRequestDispatcher(String
path) - path may be relative, and cannot extend outside
current servlet context
1.6.3.2. public javax.servlet.RequestDispatcher
ServletRequest.getNamedDispatcher(String name) - name is
the registered name in web.xml file
1.6.3.3. ServletContext
also supports these methods, but its getRequestDispatcher
method accepts only absolute paths, and not relative paths.
Use the request's methods, ServletContext method may be
depracted in future.
Previous Contents Next