1 / 58

Introduction to JSP

Introduction to JSP. (Server-Side Programming using Java Server Pages). Many HTML Pages are Mostly Static. Servlets allow us to write dynamic Web pages Easy access to request, session and context data Easy manipulation of the response (cookies, etc.) And lots more...

josiec
Download Presentation

Introduction to JSP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introduction to JSP (Server-Side Programming using Java Server Pages) cs236607

  2. Many HTML Pages are Mostly Static • Servlets allow us to write dynamic Web pages • Easy access to request, session and context data • Easy manipulation of the response (cookies, etc.) • And lots more... • It is very inconvenient to write and maintain long and mostly static HTML pages using Servlets (even though such pages are very common) out.println("<h1>Bla Bla</h1>" + "bla bla bla bla" + "lots more here...") cs236607

  3. Introducing JSP • The Idea: • Use HTML for most of the page • Write Servlet code directly in the HTML page, marked with special tags • The server automatically translates a JSP page to a Servlet class and invokes this servlet • In Tomcat 5.5, you can find the generated Servlet code under $CATALINA_BASE/work/ A JSP is no more than a convenient way to write Servlets that output textual data cs236607

  4. Java HTML Relationships • Servlets: HTML code is printed using Java code • JSP: Java code is embedded in HTML code • Not only for HTML! • JSP can be used for any textual format • Servlets can be used for any data! HTML JAVA cs236607

  5. Example <html> <head> <title>Hello World</title> </head> <body> <h2><%= new java.util.Date() %></h2> <h1>Hello World</h1> </body> </html> cs236607

  6. The file dates.jsp is in C:\Program Files\Tomcat 5.5\webapps\Examples\ ($CATALINA_BASE\webapps\MyApplication\) The url http://ibm373.cs.technion.ac.il:8080/Examples/dates.jsp cs236607

  7. Translation to Servlet package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class dates_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static java.util.List _jspx_dependants; public Object getDependants() { return _jspx_dependants; } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; PageContextpageContext = null; HttpSession session = null; ServletContext application = null; ServletConfigconfig = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; C:\Program Files\Tomcat 5.5\webapps\Examples\work\org\apache\jsp\dates_jsp.java cs236607

  8. try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("<html>\r\n"); out.write(" <head>\r\n"); out.write(" <title>Hello World</title>\r\n"); out.write(" </head>\r\n"); out.write(" <body>\r\n"); out.write(" <h2>"); out.print( new java.util.Date() ); out.write("</h2> \r\n"); out.write(" <h1>Hello World</h1>\r\n"); out.write(" </body>\r\n"); out.write("</html>\r\n"); } catch (Throwable t) { if (!(t instanceofSkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context); } } } cs236607

  9. Sun Specifications Apache Implementation Generated Servlet Generated Servlet Hierarchy(Tomcat 5 Implementation) classes interfaces Abstract class extended by every generated Servlet cs236607

  10. JSP Limitations and Advantages • JSP can only do what a Servlet can do • Easier to write and maintain HTML • Easier to separate HTML from code • Can be created using a "reverse engineering technique": • Create static HTML and then replace static data with Java code cs236607

  11. JSP Life Cycle cs236607

  12. Translation & compilation only after first call… JSP Life Cycle Server restarted Page modified Page first written Written by Marty Hall. Core Servlets & JSP book: www.coreservlets.com

  13. JSP file named file.jsp will be translated into the Java file file_jsp.java JSP Translation • When the JSP file is modified, JSP is translated into a Servlet • But only after the JSP’s url is requested by a client • Application is not necessarily reloaded when JSP file is modified • Server does not generate the Servlet class after startup, if the latter already exists and isn’t too old • Generated Servlet acts just like any other Servlet • The generated servlet can handle GET, POST, HEAD requests though it does not implement doGet(), doPost(), doHead() explicitly • Its Servlet.service() method calls the newly implemented main method named HttpJspBase._jspService() cs236607

  14. init() and destroy() • init() of the generated Servlet is called every time the Servlet class is loaded into memory and instantiated • destroy() of the generated Servlet is called every time the generated Servlet is removed • init() and destroy() are called even when the reason for loading is a modification of the JSP file cs236607

  15. jspInitandjspDestroy • In JSP pages, like regular Servlets, we sometimes want to implement init and destroy • It is illegal to use JSP declarations to override init or destroy, since they are (usually) already implemented by the generated Servlet • Instead, override the methodsjspInit() and jspDestroy() • The generated servlet is guaranteed to call these methods from init and destroy,respectively • The standard versions of jspInit and jspDestroy are empty (placeholders for you to override) cs236607

  16. Thread Synchronization • After the Servlet is generated, one instance of it serves requests in different threads, just like any other Servlet • In particular, the service method (_jspService) may be executed by several concurrent threads • Thus, as with Servlets, JSP programming requires handling concurrency cs236607

  17. Basic JSP Elements cs236607

  18. Basic Elements in a JSP file • HTML code: <html-tag>content</html-tag> • JSP Comments: <%-- comment --%> • Expressions: <%= expression %> • Scriptlets (statements): <% code %> • Declarations: <%! code %> • Directives: <%@ directive attribute="value" %> • Actions: <jsp:forward.../>, <jsp:include.../> • Expression-Language Expressions: ${expression} cs236607

  19. JSP Expressions • A JSP expression is being used to insert Java values directly into the output • It has the form: <%= expression %>, where expression can be a Java object, a numerical expression, a method call that returns a value, etc... • For example: <%= new java.util.Date() %> <%= "Hello"+" World" %> <%= (int)(100*Math.random()) %> The heading space and the following space are not created in the result. Use “ “ if you want a real space cs236607

  20. JSP Expressions • Within the generated Java code • A JSP Expression is evaluated • The result is converted to a string • The string is inserted into the page • This evaluation is performed at runtime (when the page is requested), and thus has full access to information about the request, the session, etc... cs236607

  21. public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ... response.setContentType("text/html"); ... out.write("<h1>A Random Number</h1>\r\n"); out.print( Math.random() ); out.write("\r\n"); ... } Expression Translation <h1>A Random Number</h1> <%= Math.random() %> Default content-type The generated servlet calls out.write() for Strings, and out.print() for objects cs236607

  22. Predefined Variables (Implicit Objects) • The following predefined variables can be used: • request: the HttpServletRequest • response: the HttpServletResponse • session: the HttpSession associated with the request • out: the PrintWriter (a buffered version of type JspWriter) used to fill the response content • application: The ServletContext • config: The ServletConfig cs236607

  23. <html> <head> <title>JSP Expressions</title> </head> <body> <h2>JSP Expressions</h2> <ul> <li>Current time: <%= new java.util.Date() %></li> <li>Your hostname:<%= request.getRemoteHost() %></li> <li>Your session ID: <%= session.getId() %></li> <li>The <code>testParam</code> form parameter: <%= request.getParameter("testParam") %></li> </ul> </body> </html> cs236607

  24. cs236607

  25. JSP Scriplets (Statements) • JSP scriptletslet you insert arbitrary code into the Servlet service method ( _jspService) • Scriptlets have the form: <% Java Code%> • The code is inserted verbatim into the service method, according to the location of the scriptlet • Scriptlets have access to the same automatically defined variables as expressions cs236607

  26. Scriptlet Translation <%= foo() %> <% bar(); %> public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... response.setContentType("text/html"); ... out.print(foo()); bar(); ... } cs236607

  27. A Divided-Code Example Scriptlets don't have to be complete code blocks: <%if (Math.random() < 0.5) { %> You <b>won</b> the game! <%} else { %> You <b>lost</b> the game! <% } %> if (Math.random() < 0.5) { out.write("You <b>won</b> the game!"); } else { out.write("You <b>lost</b> the game!"); } cs236607

  28. JSP Declarations • A JSP declaration lets you define methods or members that are being inserted into the Servlet class (outside of all methods) • It has the following form: <%! Java Code %> • For example: <%! private intsomeField = 5; %> <%! private void someMethod(...) {...} %> • JSPs are intended to contain a minimal amount of code so it is usually of better design to define methods in a separate Java class... cs236607

  29. Declaration Example • Print the number of times the current page has been requested since the Servlet initialization: <%! private int accessCount = 0; %> <%! private synchronized int incAccess() { return ++accessCount; } %> <h1>Accesses to page since Servlet init: <%= incAccess() %> </h1> cs236607

  30. Generated Servlet public class serviceCount_jsp extends... implements... throws... { private int accessCount = 0; private synchronized int incAccess() { return ++accessCount; } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... ... out.write("<h1>Accesses to page since Servlet init: "); out.print(incAccess()); ... } ... } Java permits variable initialization on declaration, even if the location is outside any method’s scope cs236607

  31. JSP Directives • A JSP directive affects the structure of the Servlet class that is generated from the JSP page • It usually has the following form: <%@directive attribute1="value1"... attributeN="valueN"%> • Three important directives: page, include and taglib cs236607

  32. page-Directive Attributes • importattribute: A comma separated list of classes/packages to import <%@ page import="java.util.*, java.io.*" %> • contentTypeattribute:Sets the MIME-Type of the resulting document (default is text/html) <%@ page contentType="text/plain" %> cs236607

  33. page-Directive Attributes (cont) • What is the difference between setting the page contentType attribute, and writing <%response.setContentType("...");%>? • In the latter case, the new servlet will call response.setContentType()twice • The first, impicit (from the JSP point of view), call will be with the default content type. • The second, explicit, call might even come after the buffer was flushed or after the writer was obtained… cs236607

  34. page-Directive Attributes (cont) • session="true|false"specifies if to use a session? • buffer="sizekb|none|8kb" • Specifies the content-buffer (out) size in kilo-bytes • autoFlush="true|false" • Specifies whether the buffer should be flushed when it fills, or throw an exception otherwise • isELIgnored ="true|false" • Specifies whether JSP expression language is used The underlinedvalues are the defaults cs236607

  35. Using External Parameters cs236607

  36. JSP Initial Parameters • Like Servlets, initialization parameters can be passed to JSP files using the <servlet> element of the application configuration file web.xml • Use the sub-element <jsp-file> instead of the sub-element <servlet-class> • Since a <servlet> element is being used, a<servlet-mapping> element is also needed • Use the real JSP URL as the <jsp-file> • Remember that just like in servlets mapping, you have the flexibility of being able to map several URLs to the same jsp or servlet, each with different init parameters. cs236607

  37. Initialization parameters whose scope is application An Example web.xml <web-app> <context-param> <param-name>dbLogin</param-name> <param-value>homer</param-value> </context-param> <context-param> <param-name>dbPassword</param-name> <param-value>doughnuts</param-value> </context-param> cs236607

  38. web.xml In the case of JSP, the relative location of the JSP (relative to the application’s root directory) should be given instead of the Servlet classname, since the Servlet is created dynamically by the container <servlet> <servlet-name>ParamPage</servlet-name> <jsp-file>/paramPage.jsp</jsp-file> <init-param> <param-name>tableName</param-name> <param-value>users</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ParamPage</servlet-name> <url-pattern>/paramPage.jsp</url-pattern> </servlet-mapping> </web-app> JSP scoped initialization parameters You can also map a different URL to this JSP (highly useful if you need the URL to end with an extension other than .jsp) cs236607

  39. paramPage.jsp You can omit the config and call getInitParameter() directly, since the generated servlet extends HttpJspBase which extends HttpServlet which implements the ServletConfig interface <html> <head><title>JSP initial parameters</title></head> <body> <h1>Hello</h1> <h2>I should use the table <i><%= config.getInitParameter("tableName") %></i> </h2> <h2>To access the Database, I should use the login <i><%= application.getInitParameter("dbLogin") %></i> and the password <i><%= application.getInitParameter("dbPassword") %></i>. </h2> </body> </html> JSP scoped initialization parameters Application scoped initialization parameters Reminder: this is equivalent to getServletContext().getInitParameter() within a Servlet cs236607

  40. Interacting with other Resources cs236607

  41. JSP Cooperation • We will consider several ways in which JSP and other resources cooperate • Forwarding the request handling to other resources • Including the content of other sources • Including the code of other JSP files • Forwarding exception handling to other JSPs cs236607

  42. Actions • JSP actionsuse constructs in XML syntax to control the behavior of the Servlet engine • Using actions, you can • forward the request to another resource in the application • dynamically include a resource content in the response • Forward and include are translated to an invocation of the RequestDispatcher

  43. The forward Action • jsp:forward - Forwards the requester to a new resource <jsp:forward page="{relativeURL|<%= expression %>}"> <jsp:param name="parameterName" value="{parameterValue| <%= expression %>}" /> * </jsp:forward> 0 or more parameters (not attributes!) added to the original request parameters You can use %=, % instead of <%=, %> so that the code would be a legal XML cs236607

  44. Forward Action Example <%! int even = 0;%> <%even = (1 - even);%> <%if (even == 0) { %> <jsp:forward page="/requestParams.jsp" > <jsp:param name="sessionID" value="<%= session.getId() %>" /> <jsp:param name="even" value="true" /> </jsp:forward> <%} else {%> <jsp:forward page="/requestParams.jsp" > <jsp:param name="sessionID" value="<%= session.getId() %>" /> <jsp:param name="even" value="false" /> </jsp:forward> <% } %> cs236607

  45. <html> <head><title>Print Request Params</title></head> <body> <%@ page import="java.util.*"%> <% Enumeration parameterNames = request.getParameterNames();%> <% while (parameterNames.hasMoreElements()) {%> <% String name = (String)parameterNames.nextElement();%> <h2><%= name%> : <%= request.getParameter(name)%> </h2> <%}%> </body> </html> requestParams.jsp cs236607

  46. The include Action • jsp:include- Include a resource content at run time <jsp:include page="{relativeURL|<%= expression %>}">     <jsp:param name="parameterName" value="{parameterValue| <%= expression %>}" />* </jsp:include> 0 or more parameters added to the original request parameters cs236607

  47. Include Action Example <html> <head> <title>Include (action) Example</title> </head> <body> <h2>Included part begins:<h2><hr/> <jsp:includepage="/requestParams2.jsp" > <jsp:param name="sessionID" value="<%= session.getId() %>"/> </jsp:include> <hr/><h2>Included part ends<h2> </body> </html> include.jsp cs236607

  48. <%@page import="java.util.*"%> <% Enumeration parameterNames = request.getParameterNames();%> <% while (parameterNames.hasMoreElements()) {%> <% String name = (String)parameterNames.nextElement();%> <h2><%= name%> : <%= request.getParameter(name)%> </h2> <%}%> requestParams2.jsp requestParams2.jsp is different from requestParams.jsp in not having the preceding and following html tags (otherwise the output HTML code would have <html>, <head> and <body> duplicated) cs236607

  49. The include Directive • This directive lets you include files at the time the JSP page is translated into a Servlet • The directive looks like this: <%@ include file="url" %> • Included JSP content can affect main JSP page • e.g. included page directive can affect the result ContentType • As of Tomcat 5.x, generated Servlets are updated when included files change (unlike older versions...) cs236607

  50. HTML content Servlet1 Servlet2 HTML content HTML content Using RequestDispatcher Include - Action File1.jsp Main JSP File2.jsp cs236607

More Related