Vous êtes sur la page 1sur 28

JSP API Introduction 1.

Every class which is generated for the JSP must implement


eitherjavax.servlet.jsp.JspPage or javax.servlet.jsp.HttpJspPage Interface either directly or indirectly. 2. Tomcat people provided a base classorg.apache.jasper.runtime.HttpJapBase for implementing the above two interfaces. 3. Hence any servlet which is generated by Tomcat is extending theHttpJspBase class.

jsp API javax.servlet.jsp.JspPage:

JspPage ======
<< - PRIOR INDEX NEXT ->>

Introduction: This interface defines the following two life cycle methods.

1. jspInit() 2. jspDestroy() 1.jspInit() : syntax : public void jspInit() This method will be executed only once at the time of first request to perform initialization activities.Web container always calls init(ServletConfig config) present in HttpJspBase class which intern calls jspInit() method present in our JSP . Test.jsp: <%! public void jspInit() { System.out.println (my own initialization activities); } %> We cant override init(ServletConfig config) in our JSP, because it is declared as final in parent class (HttpJspBase). Init() method syntax in HttpJspBase class

public final void init(javax.servlet.ServletConfig config) throws javax.servlet.ServletException

HttpJspBase: <%! public final void init(serveletconfig config) { System.out.println (my own initialization activities) } %> Cannot override the final method from HttpJspBase. 2. jspDestroy(): Syntax: public void jspDestroy() This method will be executed only once to perform cleanup activities just before taking JSP from out of service. Web container always calls destroy() method present in HttpJspBase class which intern calls JspDestroy(). Test.jsp:

<%!

public void jspDestroy(){

// put your custom code here

// to clean up resources

%> We cant override destroy() method directly in the JSP.Because it is declared as the final in HttpJspBase class. Test.jsp <%! public void destroy( ) { System.out.println(my own clean up operations); } %> C.E: cannot override the final method from HttpJspBase.
jsp API javax.servlet.jsp.HttpJspBase

HttpJspBase
<< - PRIOR INDEX NEXT ->>

javax.servlet.jsp.HttpJspBase This interface defines only one method : 1. _jspService( ) Syntax: public abstract void _jspService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException 1. This method will be executed for each client request. 2. Web container always calls service () method available in HttpJspBase class which intern calls _jspService() . 3. We cant override service () method in our jsp, because it is declared as final in HtpJspBase class. 4. Web container will always generate _jspService() in the generated servlet at the time of translation page. 5. If we are placing _jspService() method explicitly in jsp then generated servlet class contains two _jspService() methods which causes compile time

error and a java class never allow to contain more than one method an same signature. Hence we cant over ride _ JspService() method explicitly in the jsp. Note:The following three methods are considered as life cycle methods of the jsp. 1. jspInit() 2. jspDestroy() 3. _jspService()

How to pre-compile JSP?


Add jsp_precompile as a request parameter and send a request to the JSP file. This will make the jsp pre-compile. Why it is mentioned as pre compile instead of compilation is that, the request is not served. That is, the JSP will not be executed and the request will not be serviced. Just it will be compiled and the implementation class will be generated. The jsp_precompile parameter may have no value, or may have values true or false. It should not have any other values like ?jsp_precompile=yes this will result in HTTP error 500. So the example for query strings to pre compile jsp files are ?jsp_precompile ?jsp_precompile=true ?jsp_precompile=false ?foobar=foobaz&jsp_precompile=true

?foobar=foobaz&jsp_precompile=false

The benefits of pre-compiling a JSP page:


It removes the start-up lag that occurs when a container must translate a JSP page upon receipt of the first request. Since the Java compiler is not needed, there will be a reduction of the footprint needed to run a JSP container. In include directives, tag library references, and translation-time actions used in custom actions, compilation of a JSP page provides resolution of relative URL specifications.

How to do pre compile for a bunch of JSP files? for all JSPs in a folder or application?
There are no special features available for this in the JSP specification. But the application servers (JSP containers) provide methods to do this on their own way. But if you want to pre compile in server independent manner you have to use jsp_precompile request parameter and no other option available. To do it for the whole application, you can custome write a servlet or jsp file which will raise a request for all the JSPs available with jsp_precompi le added as parameter.

1. JSP container provides a list of objects for you to access different kind of

data in a web application. Those objects are called implicit object because it is automatically available to access.
2.

These implicit objects are Java objects that implement interfaces in the Servlet and JSP API. There are nine (9) JSP implicit objects available. Object 1. request 2. response 3. application 4. session 5. page 6. config 7. exception 8. pageContext 9. out Class javax.servlet.ServletRequest javax.servlet.ServletResponse javax.servlet.ServletContext javax.servlet.http.HttpSession java.lang.Object javax.servlet.ServletConfig java.lang.Throwable javax.servlet.jsp.PageContext javax.servlet.jsp.JspWriter

Note : out & pageContext implicit objects are specially designed for Jsps

Implicit objects summary : 1. Except session and exception implicit objects all are by default available to every Jsp. 2. We cant make them unavailable.

3. But session objects are always available to every Jsp. But we can make it unavailable by using session attribute of page directive. <%@ page session = false %> 4. Exception implicit object is not available by default but we can make it available by using isErrorPage of the page directive. <%@ page isErrorPage = true %> 5. Among all 9 Jsp implicit objects the most powerful object is pageContext. The most rarely used implicit object is page. 1. request object 1. For each request the JSP engine creates a new object to represents that request called request object. 2. The request object is an instance of class javax.servlet.http.HttpServletRequest . 3. The request object contains all information about the HTTP header, query string, cookies 4. Be noted that request object only available in a scope of the current request. It is re-created each time new request is made. Methods of request Object: There are numerous methods available for request Object. Some of them are: 1.getCookies() The getCookies() method of request object returns all cookies sent with the request information by the client. The cookies are returned as an array of Cookie Objects.

2.getHeader(String name)

The method getHeader(String name) of request object is used to return the value of the requested header.

3.getHeaderNames()

The method getHeaderNames() of request object returns all the header names in the request.

4.getAttribute(String name) The method getAttribute() of request object is used to return the value of the attribute. The getAttribute() method returns the objects associated with the attribute. 5.getAttributeNames() The method getAttribute() of request object is used to return the object associated with the particular given attribute. 6.getMethod() The getMethod() of request object is used to return the methods GET, POST, or PUT corresponding to the requested HTTP method used. 7.getParameter(String name) 8.getParameterNames() getParameter() method of request object is used to return the value of a requested parameter. The getParameterNames() method of request object is used to return the names of the parameters given in the current request. 9.getParameterValues(Strin The getParameter(String name) method of request object g name) was used to return the value of a requested given parameter. 10.getQueryString() The getQueryString() method of request object is used to return the query string from the request. 11.getRequestURI() The getRequestURI() method of request object is used for

returning the URL of the current JSP page. 12.getServletPath() The getServletPath() method of request object is used to return the part of request URL that calls the servlet. 13.setAttribute(String,Obje ct) 14.removeAttribute(String) The setAttribute method of request object is used to set object to the named attribute. The removeAttribute method of request object is used to remove the object bound with specified name from the corresponding session.

Example: Test.jsp: <%@ page import = " java.util.* " %> <html> <head> <title>Getting a header in Jsp</title> </head> <body> <% Enumeration enumeration = request.getHeaderNames(); out.print("<table border= 2>"); while (enumeration.hasMoreElements()) { String string = (String)enumeration.nextElement(); out.println("<tr><td><h3>" +string +":</h3></td><td><h3> " +

request.getHeader(string)+ "</h3></td></tr>"); } out.print("</table>"); %> </body> </html> Output:

Introduction: 1. response is an instance of class javax.servlet.http.HttpServletResponse. The response object represents the response to the client.
2. By using this object you can add new cookies, change content type of the

page and redirect the response. Methods of response Object:

There are numerous methods available for response object. Some of them are: 1.setContentType() setContentType method of response object is used to set the MIME type and character encoding for the page. 2.addCookie(Cookie cookie) 3.addHeader(String name, String value) addCookie method of response object is used to add the specified cookie to the response. addHeader method of response object is used to write the header as a pair of name and value to the response. 4.containsHeader(String name) containsHeader method of response object is used to check whether the response already includes the header given as parameter. 5.setHeader(String name, String value) setHeader method of response object is used to create an HTTP Header with the name and value given as string. 6.sendRedirect(String) sendRedirect method of response object is used to send a redirect response to the client temporarily by making use of redirect location URL given in parameter. 7.sendError(int status_code) sendError method of response object is used to send an error response to the client containing the specified status code given in parameter.

Example: test.jsp
<%@ page language="java" %> <% response.setContentType("text/html"); response.setHeader("Cache-Control","no-cache"); response.setHeader("Pragma","no-cache"); response.setDateHeader ("Expires", 0); out.print("Is cache-controle available :"+response.containsHeader("CacheControl")); %> <html> <head> <title>Response object in cache controlling</title> </head> </html>

APPLICATION OBJECT =====================


<< - PRIOR INDEX NEXT ->>

Introduction: 1. The JSP implicit application object is an instance of a java class that implements the javax.servlet.ServletContext interface. 2. It gives facility for a JSP page to obtain and set information about the web application in which it is running.

Methods of Application Object: There are numerous methods available for Application object. Some of the methods of Application object are: 1.getAttribute(String name) The method getAttribute of Application object is used to return the attribute with the specified name. 2,getAttributeNames The method getAttributeNames of Application object is used to return the attribute names available within the application. 3.setAttribute(String objName, Object object) 4.removeAttribute(String objName) The method setAttribute of Application object is used to store the object with the given object name in the application. The method removeAttribute of Application object is used to remove the name of the object mentioned in parameter of this method from the object of the application. 5.getMinorVersion() The method getMinorVersion of Application object is used to return the minor version of the Servlet API for the JSP Container. 6.getServerInfo() The method getServerInfo of Application

object is used to return the name and version number of the JRun servlet engine. 7.getInitParameter(String name) The method getInitParameter of Application object is used to return the value of an initialization parameter. 8.getInitParameterNames The method getInitParameterNames of Application object is used to return the name of each initialization parameter. 9.getResourceAsStream(Path) The method getResourceAsStream of Application object is used to translate the resource URL mentioned as parameter in the method into an input stream to read. 10.log(Message) The method log of Application object is used to write a text string to the JSP Containers default log file. 11.getMajorVersion() The method getMajorVersion of Application object is used to return the major version of the Servlet API for the JSP Container.

Example: Add this piece of code in web.xml <context-param>

<param-name>user</param-name> <param-value>chamu0001</param-value> </context-param> Test.jsp


<%@ page session="true" %> <% application.setAttribute("SITE", "MYJAVAHUB.COM"); %> <table border= 2> <% out.println("<tr><td>Major version: </td><td>" + application.getMajorVersion()+"</td></tr>"); out.println("<tr><td>Minor version:</td><td> " + application.getMinorVersion()+"</td></tr>"); out.println("<tr><td>Servlet engine version </td><td>" + application.getServerInfo()+"</td></tr>"); out.println("<tr><td>User init parameter: </td><td>" +application.getInitParameter("user")+"</td></tr>"); out.println("<tr><td>SITE </td><td>" + application.getAttribute("SITE")+"</td></tr>"); %> </table>

Output:

SESSION OBJECT

<< - PRIOR

INDEX

NEXT ->>

Introduction: 1. session object is an instance of class javax.servlet.http.HttpSession. 2. The session object is used to store and retrieve client information across the multiple requests. The session object is not available if the session="false" is used in page directive. 3. The previous two objects, request and response, are used to pass information from web browser to server and from server to web browser respectively. The Session Object provides the connection or association between the client and the server. Methods: 1.getCreationTime This method is used to return the session created time 2. getLastAccessedTime The getLastAccessedTime method of session object is used to return the latest time of the client request associated with the session. 3.getId The getID method of session object is used to return the unique identifier associated with the session. 4.invalidate() invalidate method of session object is used to discard the session and releases any objects stored as attributes. 5.getMaxInactiveInterval The getMaxInactiveInterval method of session

object is used to return the maximum amount of time the JRun keeps the session open between client accesses. 6.setMaxInactiveInterval() This is another setMaxInactiveInterval() method that a developer can use to set the timeout explicitly for each session. 7.removeAttribute(String name) The removeAttribute method of session object is used to remove the attribute and value from the session. 8.setAttribute(String, object) Example: test.jsp
<%@ page session="true" %> <% session.setMaxInactiveInterval(600); session.setAttribute("SITE", "MYJAVAHUB.COM"); %> <table border= 2> <% out.println("<tr><td>Created Time of Session is: </td><td>" + session.getCreationTime()+"</td></tr>"); out.println("<tr><td>Last Accessed Time of Session is:</td><td> " + session.getLastAccessedTime()+"</td></tr>"); out.println("<tr><td>The Session ID is: </td><td>" + session.getId()+"</td></tr>"); out.println("<tr><td>Maximum Inactive Interval of Session in Seconds is : </td><td>" +session.getMaxInactiveInterval()+"</td></tr>"); out.println("<tr><td>SITE </td><td>" + session.getAttribute("SITE")+"</td></tr>"); %> </table>

The setAttribute method of session object is used to set the object to the named attribute.

Output :

<%@ page session="true" %> <% application.setAttribute("SITE", "MYJAVAHUB.COM"); %> <table border= 2> <% out.println("<tr><td>Buffer Size : </td><td>" + out.getBufferSize()+"</td></tr>"); out.println("<tr><td>Is AutoFlush Enable</td><td> " + out.isAutoFlush()+"</td></tr>"); out.println("<tr><td>Remaining Buffer Size </td><td>" + out.getRemaining()+"</td></tr>"); out.println("<tr><td>SITE </td><td>" + application.getAttribute("SITE")+"</td></tr>"); %> </table>

EXCEPTION OBJECT
<< - PRIOR INDEX NEXT ->>

exception implicit objects 1. The JSP implicit exception object is an instance of the java.lang.Throwable class. 2. JSP gives you an option to specify Error Page for each JSP. Whenever the page throws an exception, the JSP container automatically invokes the error page.

3. And is only available in error pages. Following is the list of important methods available in the Throwable class.. Methods: 1.public String getMessage() Returns a detailed message about the exception that has occurred. This message is initialized in the Throwable constructor. 2. public Throwable getCause() Returns the cause of the exception as represented by a Throwable object. 3.public String toString() Returns the name of the class concatenated with the result of getMessage() 4.public void printStackTrace() Prints the result of toString() along with the stack trace to System.err, the error output stream. 5.public StackTraceElement [] getStackTrace() Returns an array containing each element on the stack trace. The element at index 0 represents the top of the call stack, and the last element in the array represents the method at the bottom of the call stack. 6.public Throwable fillInStackTrace() Fills the stack trace of this Throwable object with the current stack trace, adding to any previous information in the stack trace. Example: main.jsp <%@ page errorPage="ShowError.jsp" %> <html> <head> <title>Error Handling Example</title>

</head> <body> <% // Throw an exception to invoke the error page int x = 1; if (x == 1) { throw new RuntimeException("Error condition!!!"); } %> </body> </html> ShowError.jsp <%@ page isErrorPage="true" %> <html> <head> <title>Show Error Page</title> </head> <body> <h1>Opps...</h1> <p>Sorry, an error occurred.</p> <p>Here is the exception stack trace: </p> <pre> <% exception.printStackTrace(response.getWriter()); %> </pre> </body> </html> Output: java.lang.RuntimeException: Error condition!!! ...... Opps... Sorry, an error occurred.

Here is the exception stack trace: EXCEPTION HANDLING


<< - PRIOR INDEX NEXT ->>

We can configure error page in jsps by using the following two approaches: 1. Declarative Approach 2. Programmatic Approach 1. Declarative Approach: We can configure error pages according to a particular exception (or) according to error code in web.xml as follows. <web-app> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/generalError.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/exp404.html </location> </error-page> </web-app> If we are configuring error pages in declarative approach that error page is applicable for entire application. 2. Programmatic Approach We can configure error page for a particular Jsp by using error page attribute of page Directive. Test.jsp

<% @ page errorPage = /Error.jsp %> <h1> The Result is: <% = 10/0 %>
Test.jsp if any exception (or) error occurs then error.jsp is responsible to report this error. Programmatic Approach error page configuration is applicable only for a particular Jsp. We can declare a Jsp as error page by using isErrorPage attribute of page directive. In this error pages only exception implicit object is available. Error.jsp <%@ page isErrorPage = true %> <h1> can you plz provide valid input <br> The Exception is: <% = exception %> </h1> If the jsp is not declared as error page then exception implicit object is not available. if we are trying to use we will get compile time error saying Exception cannot be resolved. If we are accessing error page directly without any exception hence exception implicit object refers null. Which approach is recommended: Declarative approach is always recommended because we can customize error pages based on exception type (or) error code. Such type of approach is called Declarative. The following implicit objects are specially designed for Jsps. Note : All Jsp implicit objects are available as local variables of _jspService(). So we can use this implicit objects within _jspService( ) but outside of _jspService() we cant use , that means we can use inside scriptlet and expression but we cant use inside declaration tag. Example: main.jsp

<%@ page errorPage="ShowError.jsp" %> <html> <head> <title>Error Handling Example</title> </head> <body> <% // Throw an exception to invoke the error page int x = 1; if (x == 1) { throw new RuntimeException("Error condition!!!"); } %> </body> </html> ShowError.jsp <%@ page isErrorPage="true" %> <html> <head> <title>Show Error Page</title> </head> <body> <h1>Opps...</h1> <p>Sorry, an error occurred.</p> <p>Here is the exception stack trace: </p> <pre> <% exception.printStackTrace(response.getWriter()); %> </pre> </body> </html> Output:

java.lang.RuntimeException: Error condition!!! ...... Opps... Sorry, an error occurred. Here is the exception stack trace: PAGECONTEXT OBJECT
<< - PRIOR INDEX NEXT ->>

7.pageContext : 1. pageContext variable is of type javax.servlet.jsp.PageContext. 2. The PageContext class is the abstract class and JSP engine vendor provides its concrete subclass. 3. We can use pageContext implicit object for the following purpose To get all other jsp implicit objects Provide method to get and set attributes in different scopes. Provide convenience methods for transferring request to other resources in web application. PageContext.forward(other.jsp); 1. Getting Jsp implicit objects from pageContext PageContext class defines the following methods for this. request response config application session getRequest ( ) getResponse ( ) getServletConfig ( ) getServletContext ( ) getSession ( )

out page exception

getOut () getPage ( ) getException ( )

These methods are not useful within the Jsp because all implicit objects are available in every Jsp. But these methods are useful outside the Jsp mostly in custom tag handlers. 2.Attribute Management in any scope In JSP, pageContext is an implicit object of type PageContext class. The pageContext Object can be used to set, get or remove attribute from one of the following scopes 1. 2. 3. 4. page request session application In JSP, page scope is the default scope. Example: pageContext.setAttribute("user","myjavahub",PageContext.SESSION_SCOP E); 3.Request Dispatching by pageContext We can perform Request Dispatching by using pageContext. For this PageContext class defines the following methods. 1. public void forward (String target) 2. public void include (String target) PAGE OBJECT
<< - PRIOR INDEX NEXT ->>

Page implicit object 1. The JSP implicit page object is an instance of the java.lang.Object class. It represents the current JSP page. 2. That is, it serves as a reference to the java servlet object that implements the JSP page on which it is accessed. It is not recommended to us this because it consumes large memory. 3. The page object works like this key word in java. 4. In the generated servlet, the variable is declared as follows Object page = this; Parent reference can be used to hold child class object but, by using that reference we are allow to call only the methods available in the parent class. Note : page cannot be used to directly call the servlet methods page.getServletInfo() Error because page is java.lang.Object type ((servlet)page).getServletInfo() this.getServletInfo()

Vous aimerez peut-être aussi