|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
|
What is JSP? Describe its concept
|
| JSP is a technology that
combines HTML/XML markup languages and elements of Java programming
Language to return dynamic content to the Web client, It is normally
used to handle Presentation logic of a web application, although it may
have business logic. |
| What
are the lifecycle phases of a JSP? |
JSP page looks like a HTML page
but is a servlet. When presented with JSP page the JSP engine does the
following 7 phases.
|
| What
is a translation unit? |
| JSP page can include the
contents of other HTML pages or other JSP files. This is done by using
the include directive. When the JSP engine is presented with such a JSP
page it is converted to one servlet class and this is called a
translation unit, Things to remember in a translation unit is that page
directives affect the whole unit, one variable declaration cannot occur
in the same unit more than once, the standard action jsp:useBean cannot
declare the same bean twice in one unit. |
| How
is JSP used in the MVC model |
| JSP is usually used for
presentation in the MVC pattern (Model View Controller ) i.e. it plays
the role of the view. The controller deals with calling the model and
the business classes which in turn get the data, this data is then
presented to the JSP for rendering on to the client. |
| What
are context initialization parameters |
|
Context initialization
parameters are specified by the context-param in the web.xml
file, these are initialization parameter for the whole application and
not specific to any servlet or JSP. |
| What
is a output comment |
| A comment that is sent to the
client in the viewable page source. The JSP engine handles an output
comment as un-interpreted 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. |
| What
is a Hidden Comment |
| A comment 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. |
| What
is a Expression |
| Expressions are act as place
holders for language expression, expression is evaluated each time the
page is accessed. |
| What
is a Declaration |
| It 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 semicolons separate them. The declaration
must be valid in the scripting language used in the JSP file. |
| What
is a Scriptlet |
| 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 declare variables or methods to use later in
the file, write expressions valid in the page scripting language, use
any of the JSP implicit objects or any object declared with a |
| What
are the implicit objects |
List them. 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 are:
|
| What is the difference between forward and sendRedirect |
| 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 completely with in the web container
And then returns to the calling method. When a sendRedirect 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 completely 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. |
| What
are the different scope values for the |
The different scope values for
|
| Why
are JSP pages the preferred API for creating a web-based client program |
| Because no plug-ins or security
policy files are needed on the client systems(applet does). Also, JSP
pages enable cleaner and more module application design because they
provide a way to separate applications programming from web page
design. This means personnel involved in web page design do not need to
understand Java programming language syntax to do their jobs. |
| Is
JSP technology extensible |
| Yes, it is. JSP technology is
extensible through the development of custom actions, or tags, which
are encapsulated in tag libraries. |
| 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. Custom tags and
beans accomplish the same goals — encapsulating complex
behavior into
simple and accessible forms. There are several differences:
|
| How
can I implement a thread-safe JSP page? What are the advantages and
Disadvantages of using it? |
| 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 |
| How
does JSP handle run-time exceptions |
| 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. |
| How
do I prevent the output of my JSP or Servlet pages from being cached by
the browser |
| 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 %> |
| How
do I use comments within a JSP page |
| You can use JSP-style comments
to selectively block out code while debugging or simply to comment your
scriptlets. JSP comments are not visible at the client. For example: <%-- the scriptlet is now commented out <% out.println("Hello World"); %> --%> You can also use HTML-style comments anywhere within your JSP page. These comments are visible at the client. For example: <!-- (c) 2004 -->Of course, you can also use comments supported by your JSP scripting language within your scriptlets. For example, assuming Java is the scripting language, you can have: <% //some comment /** yet another comment **/ %> |
| Response
has already been commited error. What does it mean |
| This error show only when you
try to redirect a page after you already have written something in your
page. This happens because HTTP specification force the header to be
set up before the lay out of the page can be shown (to make sure of how
it should be displayed, content-type="?text/html" or
"text/xml" or
"plain-text"? or "image/jpg", etc.) When
you try to send a redirect
status (Number is line_status_402), your HTTP server cannot send it
right now if it hasn't finished to set up the header. If not
starter to
set up the header, there are no problems, but if it's already
begin to
set up the header, then your HTTP server expects these headers to be
finished setting up and it cannot be the case if the stream of the page
is not over.. In this last case it's like you
have a file started with |
| How
do I use a scriptlet to initialize a newly instantiated bean |
| 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. value="<%=java.text.DateFormat.getDateInstance().format(new java.util.Date()) %>"/ > <%-- scriptlets calling bean setter methods go here --%>" |
| How
can I enable session tracking for JSP pages if the browser has disabled
cookies |
| 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"); %> hello2.jsp <%@ page session="true" %> <% Integer i= (Integer )session.getValue("num"); out.println("Num value in session is "+i.intValue()); |
| How
can I declare methods within my JSP page |
| You can declare methods for use
within your JSP page as declarations. The methods can then be invoked
within any other methods you declare, or within JSP scriptlets and
expressions. Do note that you do not have direct access to any of the
JSP implicit objects like request, response, session and so forth from
within JSP methods. However, you should be able to pass any of the
implicit JSP variables as parameters to the methods you declare. For
example: <%! public String whereFrom(HttpServletRequest req) { HttpSession ses = req.getSession(); ... return req.getRemoteHost(); } %> <% out.print("Hi there, I see that you are coming in from "); %> <%= whereFrom(request) %> Another Example file1.jsp: <%@page contentType="text/html"%> <%! public void test(JspWriter writer) throws IOException{ writer.println("Hello!"); } %> file2.jsp <%@include file="file1.jsp"%> <%test(out);% > |
| Is
there a way I can set the inactivity lease period on a per-session basis |
| Typically, a default inactivity
lease period for all sessions is set within your JSP engine 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. |
| How
can I set a cookie and delete a cookie from within a 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
does a servlet communicate with a JSP page |
| The following code snippet shows
how a servlet instantiates a bean and initializes it with FORM data
posted by a browser. The bean is then placed into the request, and the
call is then forwarded to the JSP page, Bean1.jsp, by means of a
request dispatcher for downstream processing. public void doPost (HttpServletRequest request, HttpServletResponse response) { try { govi.FormBean f = new govi.FormBean(); String id = request.getParameter("id"); f.setName(request.getParameter("name")); f.setAddr(request.getParameter("addr")); f.setAge(request.getParameter("age")); //use the id to compute //additional bean properties like info //maybe perform a db query, etc. // . . . f.setPersonalizationInfo(info); request.setAttribute("fBean",f); getServletConfig().getServletContext().getRequestDispatcher ("/jsp/Bean1.jsp").forward(request, response); } catch (Exception ex) { . . . } } The JSP page Bean1.jsp can then process fBean, after first extracting it from the default request scope via the useBean action. jsp:useBean id="fBean" class="govi.FormBean" scope="request" / jsp:getProperty name="fBean" property="name" / jsp:getProperty name="fBean" property="addr" / jsp:getProperty name="fBean" property="age" / jsp:getProperty name="fBean" property="personalizationInfo" / |
| 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 JSP engine. In
any case, your new superclass has to fulfill the contract with the JSP
engine 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" %> |
| 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 |
| 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="shoesize" value="<%=blanknull(shoesize)% >" > |
| How
can I get to print the stacktrace for an exception occuring within my
JSP page |
| By printing out the
exception’s
stack trace, you can usually diagonse a problem better when debugging
JSP pages. By looking at a stack trace, a programmer should be able to
discern which method threw the exception and which method called that
method. However, you cannot print the stacktrace using the JSP out
implicit variable, which is of type JspWriter. You will have to use a
PrintWriter object instead. The following snippet demonstrates how you
can print a stacktrace from within a JSP error page: <%@ page isErrorPage="true" %> <% out.println(" "); PrintWriter pw = response.getWriter(); exception.printStackTrace(pw); out.println(" "); %> |
| How
do you pass an InitParameter to a JSP |
| The JspPage interface defines
the jspInit() and jspDestroy() method which the page writer can use in
their pages and are invoked in much the same manner as the init() and
destory() methods of a servlet. The example page below enumerates
through all the parameters and prints them to the console. <%@ page import="java.util.*" %> <%! ServletConfig cfg =null; public void jspInit(){ ServletConfig cfg=getServletConfig(); for (Enumeration e=cfg.getInitParameterNames(); e.hasMoreElements();) { String name=(String)e.nextElement(); String value = cfg.getInitParameter(name); System.out.println(name+"="+value); } } %> |
| How
can my JSP page communicate with an EJB Session Bean |
| The following is a code snippet
that demonstrates how a JSP page can interact with an EJB session bean:
<%@ page import="javax.naming.*, javax.rmi.PortableRemoteObject, foo.AccountHome, foo.Account" %> <%! //declare a "global" reference to an instance of the home interface of the session bean AccountHome accHome=null; public void jspInit() { //obtain an instance of the home interface InitialContext cntxt = new InitialContext( ); Object ref= cntxt.lookup("java:comp/env/ejb/AccountEJB"); accHome = (AccountHome)PortableRemoteObject.narrow(ref,AccountHome.class); } %> <% //instantiate the session bean Account acct = accHome.create(); //invoke the remote methods acct.doWhatever(...); // etc etc... %> |
| Can
we implement an interface in a JSP |
| No |
| What
is the difference between ServletContext and PageContext |
| ServletContext: Gives the
information about the container. PageContext: Gives the information
about the Request |
| What
is the difference in using request.getRequestDispatcher() and
context.getRequestDispatcher() |
| request.getRequestDispatcher(path):
In order to create it we need to give the relative path of the
resource, context.getRequestDispatcher(path): In order to create it we need to give the absolute path of the resource. |
| How
to pass information from JSP to included JSP |
| Using <%jsp:param> tag. |
| What
is the difference between directive include and jsp include |
| <%@ include>: Used to
include static resources during translation time. JSP include: Used to
include dynamic content or static content during runtime. |
| What
is the difference between RequestDispatcher and sendRedirect |
| RequestDispatcher: server-side
redirect with request and response objects. sendRedirect : Client-side
redirect with new request and response objects. |
| How
do I mix JSP and SSI #include |
| If you're just including
raw
HTML, use the #include directive as usual inside your .jsp file. But it's a little trickier if you want the server to evaluate any JSP code that's inside the included file. If your data.inc file contains jsp code you will have to use <%@ vinclude="data.inc" %> The is used for including non-JSP files. |