Vous êtes sur la page 1sur 21

1

What is a output comment?


A: A comment that is sent to the client in the viewable page source.The JSP engine
handles an output comment as uninterpreted HTML text, returning the comment in
the HTML output sent to the client. You can see the comment by viewing the page
source from your Web browser.
JSP Syntax
<!-- comment [ <%= expression %> ] -->

Example 1
<!-- This is a commnet sent to client on
<%= (new java.util.Date()).toLocaleString() %>
-->

Displays in the page source:


<!-- This is a commnet sent to client on January 24, 2004 -->
TOP

Q:What is a Hidden Comment?


A: A comments that documents the JSP page but is not sent to the client. The JSP
engine ignores a hidden comment, and does not process any code within hidden
comment tags. A hidden comment is not sent to the client, either in the displayed
JSP page or the HTML page source. The hidden comment is useful when you want
to hide or "comment out" part of your JSP page.

You can use any characters in the body of the comment except the closing --%>
combination. If you need to use --%> in your comment, you can escape it by
typing --%\>.
JSP Syntax
<%-- comment --%>

Examples
<%@ page language="java" %>
<html>
<head><title>A Hidden Comment </title></head>
<body>
<%-- This comment will not be visible to the colent in the page source --%>
</body>
</html>
TOP

Q:What is a Expression?
A: An expression tag contains a scripting language expression that is evaluated,
converted to a String, and inserted where the expression appears in the JSP file.
Because the value of an expression is converted to a String, you can use an
expression within text in a JSP file. Like
<%= someexpression %>
<%= (new java.util.Date()).toLocaleString() %>
You cannot use a semicolon to end an expression
TOP
2

Q:What is a Declaration?
A: A declaration declares one or more variables or methods for use later in the JSP
source file.

A declaration must contain at least one complete declarative statement. You can
declare any number of variables or methods within one declaration tag, as long as
they are separated by semicolons. The declaration must be valid in the scripting
language used in the JSP file.

<%! somedeclarations %>


<%! int i = 0; %>
<%! int a, b, c; %>
TOP

Q:What is a Scriptlet?
A: A scriptlet can contain any number of language statements, variable or method
declarations, or expressions that are valid in the page scripting language.Within
scriptlet tags, you can

1.Declare variables or methods to use later in the file (see also Declaration).

2.Write expressions valid in the page scripting language (see also Expression).

3.Use any of the JSP implicit objects or any object declared with a <jsp:useBean>
tag.
You must write plain text, HTML-encoded text, or other JSP tags outside the
scriptlet.

Scriptlets are executed at request time, when the JSP engine processes the client
request. If the scriptlet produces output, the output is stored in the out object,
from which you can display it.
TOP

Q:What are implicit objects? List them?


A: Certain objects that are available for the use in JSP documents without being
declared first. These objects are parsed by the JSP engine and inserted into the
generated servlet. The implicit objects re listed below
• request
• response
• pageContext
• session
• application
• out
• config
• page

• exception
TOP
3

Q:Difference between forward and sendRedirect?


A: When you invoke a forward request, the request is sent to another resource on
the server, without the client being informed that a different resource is going to
process the request. This process occurs completly with in the web container.
When a sendRedirtect method is invoked, it causes the web container to return to
the browser indicating that a new URL should be requested. Because the browser
issues a completly new request any object that are stored as request attributes
before the redirect occurs will be lost. This extra round trip a redirect is slower
than forward.
TOP

Q:What are the different scope valiues for the <jsp:useBean>?


A: The different scope values for <jsp:useBean> are

1. page
2. request
3.session
4.application
TOP

Q:Explain the life-cycle mehtods in JSP?


A: THe generated servlet class for a JSP page implements the HttpJspPage interface
of the javax.servlet.jsp package. Hte HttpJspPage interface extends the JspPage
interface which inturn extends the Servlet interface of the javax.servlet package.
the generated servlet class thus implements all the methods of the these three
interfaces. The JspPage interface declares only two mehtods - jspInit() and
jspDestroy() that must be implemented by all JSP pages regardless of the client-
server protocol. However the JSP specification has provided the HttpJspPage
interfaec specifically for the JSp pages serving HTTP requests. This interface
declares one method _jspService().
The jspInit()- The container calls the jspInit() to initialize te servlet instance.It is
called before any other method, and is called only once for a servlet instance.
The _jspservice()- The container calls the _jspservice() for each request, passing
it the request and the response objects.
The jspDestroy()- The container calls this when it decides take the instance out of
service. It is the last method called n the servlet instance.
How do I prevent the output of my JSP or Servlet pages from being
cached by the browser?
A: You will need to set the appropriate HTTP header attributes to prevent the
dynamic content output by the JSP page from being cached by the browser. Just
execute the following scriptlet at the beginning of your JSP pages to prevent them
from being cached at the browser. You need both the statements to take care of
some of the older browser versions.

<%
response.setHeader("Cache-Control","no-store"); //HTTP 1.1
response.setHeader("Pragma\","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
4

%>

[ Received from Sumit Dhamija ] TOP

Q:How does JSP handle run-time exceptions?


A: You can use the errorPage attribute of the page directive to have uncaught run-
time exceptions automatically forwarded to an error processing page. For
example:
<%@ page errorPage=\"error.jsp\" %> redirects the browser to the JSP page
error.jsp if an uncaught exception is encountered during request processing.
Within error.jsp, if you indicate that it is an error-processing page, via the
directive: <%@ page isErrorPage=\"true\" %> Throwable object describing the
exception may be accessed within the error page via the exception implicit object.
Note: You must always use a relative URL as the value for the errorPage attribute.
[ Received from Sumit Dhamija ] TOP

Q:How can I implement a thread-safe JSP page? What are the advantages
and Disadvantages of using it?
A: You can make your JSPs thread-safe by having them implement the
SingleThreadModel interface. This is done by adding the directive <%@ page
isThreadSafe="false" %> within your JSP page. With this, instead of a single
instance of the servlet generated for your JSP page loaded in memory, you will
have N instances of the servlet loaded and initialized, with the service method of
each instance effectively synchronized. You can typically control the number of
instances (N) that are instantiated for all servlets implementing
SingleThreadModel through the admin screen for your JSP engine. More
importantly, avoid using the tag for variables. If you do use this tag, then you
should set isThreadSafe to true, as mentioned above. Otherwise, all requests to
that page will access those variables, causing a nasty race condition.
SingleThreadModel is not recommended for normal use. There are many pitfalls,
including the example above of not being able to use <%! %>. You should try
really hard to make them thread-safe the old fashioned way: by making them
thread-safe .
[ Received from Sumit Dhamija ] TOP

Q:How do I use a scriptlet to initialize a newly instantiated bean?


A: A jsp:useBean action may optionally have a body. If the body is specified, its
contents will be automatically invoked when the specified bean is instantiated.
Typically, the body will contain scriptlets or jsp:setProperty tags to initialize the
newly instantiated bean, although you are not restricted to using those alone.

The following example shows the “today” property of the Foo bean initialized to
the current date when it is instantiated. Note that here, we make use of a JSP
expression within the jsp:setProperty action.

<jsp:useBean id="foo" class="com.Bar.Foo" >

<jsp:setProperty name="foo" property="today"


value="<%=java.text.DateFormat.getDateInstance().format(new java.util.Date())
5

%>" / >

<%-- scriptlets calling bean setter methods go here --%>

</jsp:useBean >

[ Received from Sumit Dhamija ] TOP

Q:How can I prevent the word "null" from appearing in my HTML input text
fields when I populate them with a resultset that has null values?
A: You could make a simple wrapper function, like

<%!
String blanknull(String s) {
return (s == null) ? \"\" : s;
}
%>

then use it inside your JSP form, like

<input type="text" name="lastName" value="<%=blanknull(lastName)% >" >

[ Received from Sumit Dhamija ] TOP

Q:What's a better approach for enabling thread-safe servlets and JSPs?


SingleThreadModel Interface or Synchronization?
A: Although the SingleThreadModel technique is easy to use, and works well for low
volume sites, it does not scale well. If you anticipate your users to increase in the
future, you may be better off implementing explicit synchronization for your
shared data. The key however, is to effectively minimize the amount of code that
is synchronzied so that you take maximum advantage of multithreading.

Also, note that SingleThreadModel is pretty resource intensive from the server\'s
perspective. The most serious issue however is when the number of concurrent
requests exhaust the servlet instance pool. In that case, all the unserviced
requests are queued until something becomes free - which results in poor
performance. Since the usage is non-deterministic, it may not help much even if
you did add more memory and increased the size of the instance pool.

[ Received from Sumit Dhamija ] TOP

Q:How can I enable session tracking for JSP pages if the browser has
disabled cookies?
6

A: We know that session tracking uses cookies by default to associate a session


identifier with a unique user. If the browser does not support cookies, or if cookies
are disabled, you can still enable session tracking using URL rewriting. URL
rewriting essentially includes the session ID within the link itself as a name/value
pair. However, for this to be effective, you need to append the session ID for each
and every link that is part of your servlet response. Adding the session ID to a link
is greatly simplified by means of of a couple of methods: response.encodeURL()
associates a session ID with a given URL, and if you are using redirection,
response.encodeRedirectURL() can be used by giving the redirected URL as input.
Both encodeURL() and encodeRedirectedURL() first determine whether cookies are
supported by the browser; if so, the input URL is returned unchanged since the
session ID will be persisted as a cookie.

Consider the following example, in which two JSP files, say hello1.jsp and
hello2.jsp, interact with each other. Basically, we create a new session within
hello1.jsp and place an object within this session. The user can then traverse to
hello2.jsp by clicking on the link present within the page. Within hello2.jsp, we
simply extract the object that was earlier placed in the session and display its
contents. Notice that we invoke the encodeURL() within hello1.jsp on the link used
to invoke hello2.jsp; if cookies are disabled, the session ID is automatically
appended to the URL, allowing hello2.jsp to still retrieve the session object. Try
this example first with cookies enabled. Then disable cookie support, restart the
brower, and try again. Each time you should see the maintenance of the session
across pages. Do note that to get this example to work with cookies disabled at
the browser, your JSP engine has to support URL rewriting.

hello1.jsp
<%@ page session=\"true\" %>
<%
Integer num = new Integer(100);
session.putValue("num",num);
String url =response.encodeURL("hello2.jsp");
%>
<a href=\'<%=url%>\'>hello2.jsp</a>

hello2.jsp
<%@ page session="true" %>
<%
Integer i= (Integer )session.getValue("num");
out.println("Num value in session is " + i.intValue());
%>
[ Received from Vishal Khasgiwala ]

What is the difference b/w variable declared inside a declaration


part and variable declared in scriplet part?
A: Variable declared inside declaration part is treated as a global variable.that means
after convertion jsp file into servlet that variable will be in outside of service
method or it will be declared as instance variable.And the scope is available to
complete jsp and to complete in the converted servlet class.where as if u declare a
variable inside a scriplet that variable will be declared inside a service method and
the scope is with in the service method.
7

[ Received from Neelam Gangadhar] TOP

Q:Is there a way to execute a JSP from the comandline or from my own
application?
A: There is a little tool called JSPExecutor that allows you to do just that. The
developers (Hendrik Schreiber <hs@webapp.de> & Peter Rossbach
<pr@webapp.de>) aim was not to write a full blown servlet engine, but to provide
means to use JSP for generating source code or reports. Therefore most HTTP-
specific features (headers, sessions, etc) are not implemented, i.e. no reponseline
or header is generated. Nevertheless you can use it to precompile JSP for your
Explain the life cycle methods of a Servlet.
A: The javax.servlet.Servlet interface defines the three methods known as life-cycle
method.
public void init(ServletConfig config) throws ServletException
public void service( ServletRequest req, ServletResponse res) throws
ServletException, IOException
public void destroy()
First the servlet is constructed, then initialized wih the init() method.
Any request from client are handled initially by the service() method before
delegating to the doXxx() methods in the case of HttpServlet.

The servlet is removed from service, destroyed with the destroy() methid, then
garbaged collected and finalized.
TOP

Q:What is the difference between the getRequestDispatcher(String path)


method of javax.servlet.ServletRequest interface and
javax.servlet.ServletContext interface?
A: The getRequestDispatcher(String path) method of javax.servlet.ServletRequest
interface accepts parameter the path to the resource to be included or forwarded
to, which can be relative to the request of the calling servlet. If the path begins
with a "/" it is interpreted as relative to the current context root.

The getRequestDispatcher(String path) method of javax.servlet.ServletContext


interface cannot accepts relative paths. All path must sart with a "/" and are
interpreted as relative to curent context root.
TOP

Q:Explain the directory structure of a web application.


A: The directory structure of a web application consists of two
parts.
A private directory called WEB-INF
A public resource directory which contains public resource folder.

WEB-INF folder consists of


1. web.xml
2. classes directory
3. lib directory
TOP

Q:What are the common mechanisms used for session tracking?


A: Cookies
8

SSL sessions
URL- rewriting
TOP

Q:Explain ServletContext.
A: ServletContext interface is a window for a servlet to view it's environment. A
servlet can use this interface to get information such as initialization parameters
for the web applicationor servlet container's version. Every web application has
one and only one ServletContext and is accessible to all active resource of that
application.
TOP

Q:What is preinitialization of a servlet?


A: A container doesnot initialize the servlets ass soon as it starts up, it initializes a
servlet when it receives a request for that servlet first time. This is called lazy
loading. The servlet specification defines the <load-on-startup> element, which
can be specified in the deployment descriptor to make the servlet container load
and initialize the servlet as soon as it starts up. The process of loading a servlet
before any request comes in is called preloading or preinitializing a servlet.
[ Received from Amit Bhoir ] TOP

Q:What is the difference between Difference between doGet() and


doPost()?
A: A doGet() method is limited with 2k of data to be sent, and doPost() method
doesn't have this limitation. A request string for doGet() looks like the following:
http://www.allapplabs.com/svt1?p1=v1&p2=v2&...&pN=vN
doPost() method call doesn't need a long text tail after a servlet name in a
request. All parameters are stored in a request itself, not in a request string, and
it's impossible to guess the data transmitted to a servlet only looking at a request
string.
[ Received from Amit Bhoir ] TOP

Q:What is the difference between HttpServlet and GenericServlet?


A: A GenericServlet has a service() method aimed to handle requests. HttpServlet
extends GenericServlet and adds support for doGet(), doPost(), doHead() methods
(HTTP 1.0) plus doPut(), doOptions(), doDelete(), doTrace() methods (HTTP 1.1).
Both these classes are abstract.
[ Received from Amit Bhoir ] TOP

Q:What is the difference between ServletContext and ServletConfig?


A: 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.The ServletContext object is contained within the
ServletConfig object, which the Web server provides the servlet when the servlet
is initialized

ServletConfig: The object created after a servlet is instantiated and its default
constructor is read. It is created to pass initialization information to the servlet.
[ Received from Sivagopal Balivada ]
9

RE: How does a servlet communicate with a JSP page?

A Servlet can communicate with JSP by using the RequestDispatcher


mechanism.RequestDispatching is the process hand overing the request to another web
component,and this component takes the response of generating the response.This
mechanism or interface having two methods
1)forward()
2)include()
First we need to get the rerference of the component,and then we need to use the
corresponding methods according to our requirement...
Ex...
RequestDispatcher rd=request.getRequestDispatcher("/Home.jsp");
rd.forward(request,response);

How can I Set and delete a cooking from Jsp page?

A cookie, mycookie, can be deleted using the following scriptlet:


<%
//creating a cookie
Cookie mycookie = new Cookie("aName","aValue");
response.addCookie(mycookie);
//delete a cookie
Cookie killMyCookie = new Cookie("mycookie", null);
killMyCookie.setMaxAge(0);
killMyCookie.setPath("/");
response.addCookie(killMyCookie);
%>

How to handle runtime exceptions in Jsp?

we can use the errorPage attribute of the page directive to have uncaught runtime
exceptions automatically forwarded to an error processing page. For example:
<%@ page errorPage="error.jsp" %>
redirects the browser to the JSP page error.jsp if an uncaught exception is encountered
during request processing. Within error.jsp, if you indicate that it is an error-processing
page, via the directive:
<%@ page isErrorPage="true" %>
the Throwable object describing the exception may be accessed within the error page via
the exception implicit object.
Note: You must always use a relative URL as the value for the errorPage attribute

How do I include static files within a JSP page?


Static resources should always be included using the JSP include directive. This way, the
inclusion is performed just once during the translation phase.
10

Can a JSP page process HTML FORM data?

Can you make use of a ServletOutputStream object from within a JSP page?
No. You are supposed to make use of only a JSPWriter object (given to you in the form of the implicit object
out) for replying to clients. A JSPWriter can be viewed as a buffered version of the stream

Can I invoke a JSP error page from a servlet?


Yes, you can invoke the JSP error page and pass the exception object to it from within a
servlet. The trick is to create a request dispatcher for the JSP error page, and pass the
exception object as a

How do I perform browser redirection from a JSP page?


You can use the response implicit object to redirect the browser to a different resource,
as:

response.sendRedirect("http://www.foo.com/path/error.html");

You can also physically alter the Location HTTP header attribute, as shown below:

<%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/index.html";
response.setHeader("Location",newLocn);
%>

How do I have the JSP-generated servlet subclass my own custom servlet class, instead
of the default?
One should be very careful when having JSP pages extend custom servlet classes as
opposed to the default one generated by the JSP engine. In doing so, you may lose out on
any advanced optimization that may be provided by the JSPengine. In any case, your new
superclass has to fulfill the contract with the JSPngine by: Implementing the HttpJspPage
interface, if the protocol used is HTTP, or implementing JspPage otherwise Ensuring that
all the methods in the Servlet interface are declared final Additionally, your servlet
superclass also needs to do the following:
The service() method has to invoke the _jspService() method
The init() method has to invoke the jspInit() method
The destroy() method has to invoke jspDestroy()
If any of the above conditions are not satisfied, the JSP engine may throw a translation
error. Once the superclass has been developed, you can have your JSP extend it as
follows:
<%@ page extends="packageName.ServletName" %>
11

Is there a way I can set the inactivity lease period on a per-session


basis?
ypically, a default inactivity lease period for all sessions is set within your JSPengine
admin screen or associated properties file. However, if your JSP engine supports the
Servlet 2.1 API, you can manage the inactivity lease period on a per-session basis. This is
done by invoking the HttpSession.setMaxInactiveInterval() method, right after the
session has been created. For example:
<%
session.setMaxInactiveInterval(300);
%>
would reset the inactivity period for this session to 5 minutes. The inactivity interval is
set in seconds.

2. What is difference between custom JSP tags and beans?

Custom JSP tag is a tag you defined. You define how a tag, its attributes and its body are

interpreted, and then group your tags into collections called tag libraries that can be used in any

number of JSP files. To use custom JSP tags, you need to define three separate components:

1. the tag handler class that defines the tag\'s behavior

2. the tag library descriptor file that maps the XML element names to the tag implementations

3. the JSP file that uses the tag library

When the first two components are done, you can use the tag by using taglib directive:

Then you are ready to use the tags you defined. Let's say the tag prefix is test:

MyJSPTag or

JavaBeans are Java utility classes you defined. Beans have a standard format for Java classes. You

use tags

to declare a bean and use

to set value of the bean class and use

to get value of the bean class.


12

Custom tags and beans accomplish the same goals -- encapsulating complex behavior into simple

and accessible forms. There are several differences:

Custom tags can manipulate JSP content; beans cannot.

Complex operations can be reduced to a significantly simpler form with custom tags than with

beans. Custom tags require quite a bit more work to set up than do beans.

Custom tags usually define relatively self-contained behavior, whereas beans are often defined in

one servlet and used in a different servlet or JSP page.

Custom tags are available only in JSP 1.1 and later, but beans can be used in all JSP 1.x versions

What is the difference between RequestDispatcher's forward(ServletRequest request,

ServletResponse response) method and HttpServletResponse's sendRedirect(String location)

method

The forward method of RequestDispatcher will forward the ServletRequest and


ServletResponse that it is passed to the path that was specified in
getRequestDispatcher(String path). The response will not be sent back to the client
and so the client will not know about this change of resource on the server. This
method is useful for communicating between server resources, (servlet to servlet).
Because the request and response are forwarded to another resource all request
parameters are maintained and available for use. Since the client does not know
about this forward on the server, no history of it will be stored on the client, so using
the back and forward buttons will not work. This method is faster than using
sendRedirect as no network round trip to the server and back is required.

An example using forward:


protected void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
RequestDispatcher rd = request.getRequestDispatcher("pathToResource");
rd.forward(request, response);
}

The sendRedirect(String path) method of HttpServletResponse will tell the client that
it should send a request to the specified path. So the client will build a new request
and submit it to the server, because a new request is being submitted all previous
parameters stored in the request will be unavailable. The client's history will be
updated so the forward and back buttons will work. This method is useful for
redirecting to pages on other servers and domains.

An example using sendRedirect:


protected void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
response.sendRedirect("pathToResource");

}
13

What is the scope of <%@ page errorPage="" %>? Does it get passed to
jsp:forwarded pages? Does it get passed to jsp:included pages?

The errorPage="SomePage" attribute can be present in either the JSP that includes
or forwards to another JSP OR in the included or forwarded JSP OR in both the
parent/calling JSP and the JSPs included/forwarded. In all these cases the attribute
will work.

The control will 'not be' redirected to the errorPage specified from these JSP pages,
in case the exception is explicitly caught in them.

To redirect the control to the errorPage either do not catch an exception in the JSP
page OR throw an exception explicitly.

What's the Difference between Forward and Include?

The <jsp:forward> action enables you to forward the request to a static HTML file, a
servlet, or another JSP.

<jsp:forward page="url" />

The JSP that contains the <jsp:forward> action stops processing, clears its buffer,
and forwards the request to the target resource. Note that the calling JSP should not
write anything to the response prior to the <jsp:forward> action.

You can also pass additional parameters to the target resource using the
<jsp:param> tag.

<jsp:forward page="test.htm" >

<jsp:param name="name1" value="value1" />


14

<jsp:param name="name2" value="value2" />

</jsp:forward>

In this example, test.jsp can access the value of name1 using


request.getParameter("name1").

To "include" another resource with a JSP, you have two options: the include directive
and the include action.

The include directive executes when the JSP is compiled, which parses any JSP
elements in the included file for a static result that is the same for every instance of
that JSP. The syntax for the include directive is <@ include file="some-filename"
%>.

The include action, on the other hand, executes for each client request of the JSP,
which means the file is not parsed but included in place. This provides the capability
to dynamically change not only the content that you want to include, but also the
output of that content. The syntax for the include action is <jsp:include
page="some-filename" flush="true" />. Note that the flush attribute must always be
included (in JSP 1.1) to force a flush of the buffer in the output stream.

You can also pass parameters to the included file using the same process as the
<jsp:forward> action:

<jsp:include page="template.htm" flush="true" >

<jsp:param name="name1" value="value1" />

</jsp:include>

emember that template.jsp can access the value of name1 using


request.getParameter("name1").
15

Why should I use the <jsp:useBean> tag, instead of just instantiating beans directly
inside scriptlets?

The arguments in favor of using the useBean tag are:

The tag syntax is arguably less intimidating to HTML designers.

useBean has a "scope" parameter that automatically determines whether the bean
should be stored as a local variable, a request variable, a session variable, or an
application attribute. If you were to create beans explicitly you'd have to do it 4
different ways for the 4 different scopes.

If the variable is persistent (session or application), useBean initializes it if


necessary, but fetches the variable if it already exists.

The tags are potentially more portable to future versions of the JSP spec, or
alternate implementations (for example, a hypothetical JSP engine that stores
variables in a database, or shares them across server processes).

How can I print the stack trace of an Exception out to my JSP page?

To print a stack trace out to your JSP page, you need to wrap the implicit object 'out'
in a printWriter and pass the object to the printStackTrace method in Exception. ie:

<% // JSP scriptlet


try{
// An Exception is thrown
}catch(Exception e){
e.printStacktrace(new java.io.PrintWriter(out));
}
%>
16

Why do I get the error "IllegalStateException" when using the RequestDispatcher?

When you use RequestDispatcher.forward or RequestDispatcher.include to call


another servlet, you must pay very close attention to a fairly tricky detail of the
servlet "chain of command."

When a servlet is first called, the response object is fresh and new: its headers have
not been set, its buffers are empty, and no data has been written to the client.

However, as soon as either the status code or any of the headers have been written
-- or potentially written -- to the client, or when data has been -- or may have been
-- written to the body stream, then you may be susceptible to the
IllegalStateException error. The problem that this exception is signalling is the new
data that you are (or may be) writing is inconsistent with the data that's already
been set and then irretrivably sent ("committed") to the client. Two common variants
of this exception are "java.lang.IllegalStateException: Header already sent" and
"java.lang.IllegalStateException: Cannot forward as Output Stream or Writer has
already been obtained". "Header already sent" means that one or more headers have
been committed to the client, so you can't set that header again.

"Output Stream or Writer has already been obtained" means that since the calling
servlet has already called response.getWriter() or response.getOutputStream(), that
contaminates the data stream, since the response has been (or may have been)
written to already, making it unsuitable for forwarding.

What are the advantages of using beanName in the jsp:useBean syntax?

What are the advantages of using beanName in the jsp:useBean syntax?

The beanName tag uses Beans.instantiate() method to instantiate a bean. This


method can instantiate a bean from either a class or a serialized template. The value
of beanName can be either a fully qualified class name or an expression that
evaluates to a fully qualified class name. This value is passed to Beans.instantiate()
17

method which checks whether this is a class or a serialized template. In case of a


serialized template, a class loader is called. The instantiated bean is then cast to the
type specified by type attribute.

Is it possible to give different session timeouts for different groups of users? I think
session timeouts are set in the server and is the same for all users...meaning if you
dont use something the web app for 30 mins yr session expires...and it is the same
for all users?

Ans: The session timeout set in the web.xml is common for all sessions in the
application. But you can override that for a "particluar" session, by using the
HttpSession.setMaxInactiveInterval(int secs)
on your session instance.

So, for your requirement, you can check that if a particular user belongs to the John-
Q group, change his session timeout using the above method or else the default
session timeout of 30 min remains.

Is the HTTP Session maintained even when the network connection goes down? Can
the same browser instance resume a previous session after re-establishing the
network connection

Ans: In the Servlets API, HttpSessions are implemented as objects in memory on


the web app server. Therefore, the session will be maintained on ther server as long
as the server is running (or until it "times out" after the max inactive interval has
passed). Even if the server "goes offline" and then "goes online," the session will be
maintained if the web app server process is still running (and the session has not
timed out). Session cookies are sent to the browser to allow the browser to identify
itself to the server, thereby allowing the server to "look up" the user's session. The
session cookies are deleted when the browser process exits, so if the user "goes
offline" and then "goes online" and makes a request, the session cookie will still be
available--assuming the same browser process. However, even if the cookie is
available and sent to the server, if the session has timed out, the session is not
available (the user would get a new session with a call to request.getSession()).

Are Page scoped variables available across multiple requests to the same page? If
this is not the case, what is the difference between request scope and page scope for
JSP? Also, is this data available even when something like a query string is changed?

Answer
18

No, the page scope has a life that ends with the end of the page, but it does not
propagate to other page (included or forwarded).

The request scope life ends when the response is send back to the client, and its
visibility is to all the pages that are included or forwarded.

How can I retrieve an expired session?

I don't think there's a way of doing that. Once the session has expired, the session
object is flagged for garbage collection and later destroyed

Is it possible to call a custom tag from another custom tag? If so how?

Answer
You can have nested tags and the value of a tag attribute also may be evaluated by
JSP engine. Please see bodycontent and rtexprvalue element in the following
example of a tld file.
<tag>
<name>..</name>
<tagclass>...</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>name</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
...
...
</tag>

Does Buffer size affects the performance in any way? I am using buffer size
as 100kb.will it in anyway affect the performance? If yes what is the
optimum size that can be used? If no why?

I would say that it depends on the pages you normally handle. Bigger buffers are
normally faster but they use a bigger amount of memory that, in a Servlet/JSP
system could have a negative impact on server's performances.
Default value should be 8K, and except few cases, I've always considered it a
reasonable value. I change it only when I have to send out very big pages.

Can I instantiate the same JavaBean multiple times within a JSP page by
associating each instance with a different scope?

Answer
Yes, you can instantiate the same bean within a page multiple times by associating
them with different scopes. Needless to say, the bean's "id" must also be unique for
the specified scope. For example, you can have the following within a page:
<jsp:useBean class="foo.Bar" id="requestBar" scope="request" />
19

<jsp:useBean class="foo.Bar" id="sessionBar" scope="session" />

How to return a value from a servlet to a JSP?

There are couple of ways to do this.

1. You can put the information you like in a HTTPSession object. This object is
created for you and stays with the user during the time they are in the site.
This is done like this:
2. HttpSession s = request.getSession(true);
3. s.setAttribute("returnVal", callMethod());

The first row creates the session if there are no sessions. Next row sets the
value you like in to the session object. Remember that in the JSP page you
have to cast this object back to whatever object it is. All "things" in a session
object are stored as java.lang.Objects.
here is how that is done inside the JSP page:

myObject = (myObject)
session.getAttribute("returnVal");

4. The other way of doing this is to put the value in the request object. It is
similar to the previous example, only it is the request object.
Here is how that is done:
5. RequestDispatcher rd =
getServletContext().getRequestDispatcher("/yourjsppage.jsp");
6. request.setAttribute("myObject", getMyObject());
rd.forward(request, response);

The first row gets the requestDispatcher, the second line adds your object to
the request object and the last line forwards the request. In the JSP page you
use the "request" object like this:

myObject = (myObject)request.getAttribute("myObject");

Can two web applications (servlet contexts) share the same session object?

Answer
By default, the session object is context-specific. Although a few servlet containers
(Tomcat, Resin) may allow web applications to share session contexts by means of
20

the "crosscontext" setting within the deployment descriptor, by default, that should
not be allowed for security purposes and must be used cautiously only for admin-
type applications.

[For example:

<Context path="/myapp" docBase="/home/web/myapp'" crossContext="true"


debug="0" reloadable="false" trusted="false" />

• It looks like "crossContext" allows you to get the ServletContext. According to


the servlet docs, "There is one context per 'web application' per Java Virtual
Machine." This would appear to be a server-wide piece of information, not tied
to the particular browser's session.

I need to trap all kinds 500 error on my jsp page. I have tried the <%@
page errorPage="myerror.jsp"> but it only works on selected errors. How
can I trap all errors, including syntax errors?

Answer
You can setup your web application to have error pages associated with a type of
exception/error that occurs when pages are executed. You can setup a generic error
page for Throwable and then more specific error pages from more specific
exceptions/erros that occur. Here is a sample web deployment descriptor that
outlines the strategy:
<web-app>
<!-- servlet definitions, resource refs.. -->
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error-pages/generic.htm</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error-pages/500.htm</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error-pages/notThere.htm</location>
</error-page>
21

Vous aimerez peut-être aussi