Object-Oriented Enterprise Application Development - PowerPoint PPT Presentation

About This Presentation
Title:

Object-Oriented Enterprise Application Development

Description:

import. isThreadSafe. session. errorPage ... Sample Code - Import !DOCTYPE HTML PUBLIC '-//W3C//DTD HTML. 4.0 Transitional//EN' ... – PowerPoint PPT presentation

Number of Views:16
Avg rating:3.0/5.0
Slides: 64
Provided by: christoph140
Category:

less

Transcript and Presenter's Notes

Title: Object-Oriented Enterprise Application Development


1
Object-Oriented Enterprise Application Development
  • JavaServer Pages

2
Topics
  • During this class we will examine
  • Anatomy of a JavaServer Page
  • Merging markup with Java
  • Configuring our JSPs with directives
  • Integrating servlets and JSPs

3
JavaServer Pages
4
Justification
  • JavaServer Pages (JSPs) are a technology that
    allow developers to mix static with dynamic
    content.
  • JavaServer Pages have been successful for two (2)
    reasons
  • JSPs are supported across multiple platforms.
  • JSPs give developers access to all Java
    technologies instead of using a scripting
    language.

5
Roles and Responsibilities
  • Although servlets can generate dynamic content,
    it's often advantageous to separate the business
    logic in the servlet from the presentation logic.
  • By using JSPs we can have application programmers
    building servlets while content designers and
    graphic artists construct the JSPs.

6
Versions
  • We'll use version 1.1 of the JavaServer Pages
    specification.
  • The 1.0 and 1.1 version JSPs are almost totally
    incompatible with the 0.92 version of the
    specification.

7
JSP Structure
8
Basic Concepts
  • At their heart, basic JSPs look just like regular
    HTML markup.
  • A static HTML document can be turned into a JSP
    simply by changing its extension to .jsp.
  • The key difference is that JSPs are dynamic.
  • When a JSP is executed, the JSP engine converts
    that JSP into an equivalent servlet which then
    follows the normal lifecycle.

9
Sample Code - HelloWorld
  1. lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.0
    Transitional//EN"gt
  2. lt-- comments look like this --gt
  3. ltHTMLgt
  4. ltHEADgt
  5. ltTITLEgtHelloWorld JSPlt/TITLEgt
  6. lt/HEADgt
  7. ltBODYgt
  8. ltH2gtHello, World!lt/H2gt
  9. lt/BODYgt
  10. lt/HTMLgt

10
Dynamic Content
  • If all we needed was static content, then we'd
    just use HTML. The strength of JSPs lie in their
    ability to generate and manipulate dynamic
    content.
  • There are three common ways of performing this
    generation using JSPs
  • Expressions,
  • Scriptlets
  • Declarations

11
Lifecycle
  • Even though JSPs are ultimately compiled into
    servlets, there are a few differences in their
    lifecycle.
  • Most of the tags for generating dynamic content
    are placed within the JSP's jservice() method.
  • This method is called by the JSP's service()
    method for both GET and POST requests.

12
JSP Tags
13
Basic Tags
  • In the 0.92 version of the JSP specification, we
    identified dynamic content using special tags.
  • In version 1.1 of the JSP specification we can
    still use some of these tags. We can also use
    equivalent XML tags.

14
JSP Expressions
  • The simplest form of dynamic content is the JSP
    expression. This is used to send a value back to
    the client.
  • The tag format of an expression is given by
  • lt java expression gt

15
Sample Code - DynamicHelloWorld
  1. lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN"gt
  2. ltHTMLgt
  3. ltHEADgtltTITLEgt
  4. DynamicHelloWorld JSP
  5. lt/TITLEgtlt/HEADgt
  6. ltBODYgt
  7. ltH2gtHello, World!lt/H2gtltBRgt
  8. ltH3gtIts now
  9. lt new java.util.Date() gt
  10. lt/H3gt
  11. lt/BODYgt
  12. lt/HTMLgt

16
Implicit Variables(1 of 3)
  • There are eight (8) implicit variables for each
    JSP. The four (4) most common are
  • request The HttpServletRequest object passed to
    the JSP.
  • response The HttpServletResponse object passed
    to the JSP.
  • session The client's HttpSession object.
  • out The PrintWriter object used to send output
    to the client that initiated the request.

17
Implicit Variables(2 of 3)
  • Other useful variables include
  • application The ServletContext object.
  • config The ServletConfig object.
  • pageContect The PageContext object.
  • page The this object (not currently used).

18
Implicit Variables(3 of 3)
  • These implicit variable can be used within JSP
    expressions and scriptlets, but not within JSP
    declarations.

19
Sample Code Status(1 of 2)
  1. lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN"gt
  2. ltHTMLgt
  3. ltHEADgtltTITLEgt
  4. StatusHelloWorld JSP
  5. lt/TITLEgtlt/HEADgt
  6. ltBODYgt
  7. ltH2gtHello, World!lt/H2gtltBRgt
  8. ltH3gtCurrent Time
  9. lt new java.util.Date() gt
  10. lt/H3gtltBRgt
  11. ltH3gtSession ID
  12. lt session.getId() gt
  13. lt/H3gtltBRgt

20
Sample Code Status(2 of 2)
  1. ltH3gtHostname
  2. lt request.getRemoteHost() gt
  3. lt/H3gtltBRgt
  4. ltH3gtParameter
  5. lt request.getParameter("test") gt
  6. lt/H3gt
  7. lt/BODYgt
  8. lt/HTMLgt

21
JSP Scriptlets
  • Often a single expression isn't adequate for the
    complexity of the output we want the JSP to
    generate.
  • JSPs allow us to embed complete segments of Java
    code within a scriptlet.
  • The tag format of a scriptlet is given by
  • lt java code gt

22
Sample Code Scriptlet(1 of 2)
  1. lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN"gt
  2. ltHTMLgt
  3. ltHEADgt
  4. ltTITLEgtScriptlet JSPlt/TITLEgt
  5. lt/HEADgt
  6. ltBODYgt
  7. ltH2gtHello, World!lt/H2gtltBRgt
  8. ltH3gtCurrent Time
  9. lt new java.util.Date() gt
  10. lt/H3gtltBRgt
  11. ltH3gtSession ID
  12. lt session.getId() gt
  13. lt/H3gtltBRgt

23
Sample Code Scriptlet(2 of 2)
  1. ltH3gtHostname
  2. lt request.getRemoteHost() gt
  3. lt/H3gtltBRgt
  4. lt
  5. String testString request.getParameter
    ("test")
  6. if (null testString)
  7. testString "no.such.parameter"
  8. gt
  9. ltH3gtParameter lt testString gtlt/H3gt
  10. lt/BODYgt
  11. lt/HTMLgt

24
Conditional Tags
  • JSP scriptlets are useful for including
    conditional content.
  • This cuts down on the amount of data returned to
    the client.
  • This technique can be used to implement basic
    security features.

25
Sample Code Scriptlet (rev.)(1 of 3)
  1. lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN"gt
  2. ltHTMLgt
  3. ltHEADgt
  4. ltTITLEgtScriptlet JSPlt/TITLEgt
  5. lt/HEADgt
  6. ltBODYgt
  7. ltH2gtHello, World!lt/H2gtltBRgt
  8. ltH3gtCurrent Time
  9. lt new java.util.Date() gt
  10. lt/H3gtltBRgt

26
Sample Code Scriptlet (rev.)(2 of 3)
  1. lt
  2. if (session.getId() ! null)
  3. gt
  4. ltH3gtSession ID
  5. lt session.getId() gt
  6. lt/H3gtltBRgt
  7. lt
  8. gt
  9. ltH3gtHostname
  10. lt request.getRemoteHost() gt
  11. lt/H3gtltBRgt

27
Sample Code Scriptlet (rev.)(3 of 3)
  1. lt
  2. String testString
    request.getParameter("test")
  3. if (null testString)
  4. testString "no.such.parameter"
  5. gt
  6. ltH3gtParameter
  7. lt testString gt
  8. lt/H3gt
  9. lt/BODYgt
  10. lt/HTMLgt

28
Translated Code Scriptlet(1 of 8)
  1. import javax.servlet.
  2. import javax.servlet.http.
  3. import javax.servlet.jsp.
  4. import javax.servlet.jsp.tagext.
  5. import java.io.PrintWriter
  6. import java.io.IOException
  7. import java.io.FileInputStream
  8. import java.io.ObjectInputStream
  9. import java.util.Vector
  10. import org.apache.jasper.runtime.
  11. import java.beans.
  12. import org.apache.jasper.JasperException

29
Translated Code Scriptlet(2 of 8)
  1. public class _0002fHtml_0002fscriptlet_0002ejspscr
    iptlet_jsp_0 extends HttpJspBase
  2. static
  3. public _0002fHtml_0002fscriptlet_0002ejspscriptlet
    _jsp_0( )
  4. private static boolean _jspx_inited false
  5. public final void _jspx_init() throws
    JasperException

30
Translated Code Scriptlet(3 of 8)
  1. public void _jspService( HttpServletRequest
    request, HttpServletResponse response)
  2. throws IOException, ServletException
  3. JspFactory _jspxFactory null
  4. PageContext pageContext null
  5. HttpSession session null
  6. ServletContext application null
  7. ServletConfig config null
  8. JspWriter out null
  9. Object page this
  10. String _value null

31
Translated Code Scriptlet(4 of 8)
  1. try
  2. if (_jspx_inited false)
  3. _jspx_init()
  4. _jspx_inited true
  5. _jspxFactory JspFactory.getDefaultFact
    ory()
  6. response.setContentType(
  7. "text/htmlcharset8859_1")
  8. pageContext _jspxFactory.getPageContex
    t( this, request, response, "",
    true, 8192, true)

32
Translated Code Scriptlet(5 of 8)
  1. application pageContext.getServletCont
    ext()
  2. config pageContext.getServletConfig()
  3. session pageContext.getSession()
  4. out pageContext.getOut()
  5. out.write("lt!DOCTYPE HTML PUBLIC
    \"-//W3C//DTD HTML 4.0 Transitional//EN\"gt\r\nltHT
    MLgt\r\n ltHEADgt\r\n ltTITLEgtScriptlet
    JSPlt/TITLEgt\r\n lt/HEADgt\r\n
    ltBODYgt\r\n\t\t\tltH2gtHello, World!lt/H2gt\tltBRgt\r\n\t
    \t\tltH3gtCurrent Time ")

33
Translated Code Scriptlet(6 of 8)
  1. out.print( new java.util.Date() )
  2. out.write("lt/H3gt\r\n\t\t\t"-ltBRgt\r\n\t\t\t")
  3. if (session.getId() ! null)
  4. out.write("\r\n\t\t\t\tltH3gt"-Session ID
    ")
  5. out.print( session.getId() )
  6. out.write("lt/H3gtltBRgt\r\n\t\t\t")
  7. out.write("\r\n\t\t\tltH3gt"-Hostname ")
  8. out.print( request.getRemoteHost() )
  9. out.write("lt/H3gtltBRgt\r\n\t\t\t")

34
Translated Code Scriptlet(7 of 8)
  1. String testString request.getParameter
    ("test")
  2. if (null testString)
  3. testString "no.such.parameter"
  4. out.write("\r\n\t\t\tltH3gt"-Parameter ")
  5. out.print( testString )
  6. out.write("lt/H3gt\r\n\tlt/BODYgt"-\r\nlt/HTMLgt")

35
Translated Code Scriptlet(8 of 8)
  1. catch (Exception ex)
  2. if (out.getBufferSize() ! 0)
  3. out.clearBuffer()
  4. pageContext. handlePageException(ex)
  5. finally
  6. out.flush()
  7. _jspxFactory. releasePageContext(pageCon
    text)

36
JSP Declarations
  • A JSP declaration exists outside of the
    jservice() method.
  • This means that code in a declaration cannot make
    use of the implicit variables.
  • This allows us to declare JSP-level variables and
    methods.
  • The tag format of an expression is given by
  • lt! java declaration gt

37
Sample Code Declaration(1 of 2)
  1. lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN"gt
  2. ltHTMLgt
  3. ltHEADgt
  4. ltTITLEgtDeclaration JSPlt/TITLEgt
  5. lt/HEADgt
  6. ltBODYgt
  7. ltH2gtDeclarationslt/H2gtltBRgt
  8. ltH3gtCurrent Time
  9. lt new java.util.Date() gt
  10. lt/H3gtltBRgt
  11. ltH3gtSession ID
  12. lt session.getId() gt
  13. lt/H3gtltBRgt

38
Sample Code Declaration(2 of 2)
  1. ltH3gtHostname
  2. lt request.getRemoteHost() gt
  3. lt/H3gtltBRgt
  4. lt! private int accesses 0 gt
  5. ltH3gt
  6. lt accesses gt
  7. Accesses to the page since JSP was
    loaded.
  8. lt/H3gt
  9. lt/BODYgt
  10. lt/HTMLgt

39
JSP Directives
40
Overview
  • We use directives to customize the JSP's
    behavior. Each directive affects the structure of
    the servlet resulting from the JSP's compilation.
  • There are three (3) types of directives
  • page Controls the servlet's structure.
  • include Inserts a file into the servlet class.
  • taglib Defines custom markup tags.

41
Page Directives
  • There are many page directives. We'll look at a
    few of the most common attributes
  • import
  • isThreadSafe
  • session
  • errorPage
  • We use the directive tag to indicate that we want
    a directive to take effect
  • lt_at_ directive gt

42
Import Attribute
  • The import attribute allows a JSP to import class
    libraries
  • lt_at_ page import"java.util." gt
  • By default a JSP automatically imports
  • java.lang.
  • java.servlet.
  • java.servlet.http.
  • java.servlet.jsp.

43
Sample Code - Import
  1. lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN"gt
  2. lt_at_ page importjava.util.Date gt
  3. ltHTMLgt
  4. ltHEADgt
  5. ltTITLEgtImport JSPlt/TITLEgt
  6. lt/HEADgt
  7. ltBODYgt
  8. ltH2gtImportslt/H2gtltBRgt
  9. ltH3gtCurrent Time
  10. lt new Date() gt
  11. lt/H3gt
  12. lt/BODYgt
  13. lt/HTMLgt

44
isThreadSafe Attribute
  • The isThreadSafe attribute forces the JSP's
    servlet to implement the SingleThreadedModel
    interface
  • lt_at_ page isThreadSafe"true" gt
  • By default a JSP is assumed to be thread safe in
    the same way that servlets are.
  • If this isn't the case you can
  • Make it thread-safe using synchronized blocks
  • Set isThreadSafe to false.

45
Sample Code IsThreadSafe(1 of 2)
  1. lt! private int id 0 gt
  2. lt
  3. String userId "id" id
  4. out.println("Your id is " id)
  5. id
  6. gt

46
Sample Code IsThreadSafe(2 of 2)
  1. lt! private int id 0 gt
  2. lt
  3. synchronized (this)
  4. String userId "id" id
  5. out.println("Your id is " id)
  6. id
  7. gt

47
Sample Code - IsThreadSafe
  1. lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN"gt
  2. lt_at_ page importjava.util.Date gt
  3. lt_at_ page isThreadSafefalse gt
  4. ltHTMLgt
  5. ltHEADgt
  6. ltTITLEgtSingle Thread JSPlt/TITLEgt
  7. lt/HEADgt
  8. ltBODYgt
  9. lt! private int accesses 0 gt
  10. lt accesses gt
  11. Accesses since JSP was loaded.
  12. lt/BODYgt
  13. lt/HTMLgt

48
Session Attribute
  • The session attribute controls whether or not the
    JSP can access the client's session
  • lt_at_ page session"true" gt
  • By default a JSP participates in the client's
    session.
  • lt_at_ page session"true" gt
  • If this isn't the behavior we want, we can turn
    it off
  • lt_at_ page session"false" gt

49
errorPage Attribute
  • The errorPage attribute specifies the URL to
    which the client will be sent if an unhandled
    exception is encountered
  • lt_at_ page errorPage"some URL" gt
  • The exception that caused the problem will be
    provided to the page via the exception variable.

50
Sample Code - ErrorPage
  1. lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN"gt
  2. lt_at_ page errorPageerror.jsp gt
  3. ltHTMLgt
  4. ltHEADgt
  5. ltTITLEgtErrorPage JSPlt/TITLEgt
  6. lt/HEADgt
  7. ltBODYgt
  8. ltH3gtSession Variable
  9. lt
  10. session.
  11. getAttribute("var").toString()
  12. gt
  13. lt/BODYgt
  14. lt/HTMLgt

51
Integrating Servlets and JavaServer Pages
52
Integration
  • JavaServer Pages allow graphic designers to
    achieve reasonable separation between their roles
    and the role of the servlet developer.
  • However, since all of these components will be
    used together in the final application, we need
    to integrate them.

53
Request Dispatcher
  • We've already looked at one approach to
    integrating servlets and JSPs the
    RequestDispatcher class.
  • This remains the simplest way of invoking a JSP
    from a servlet.

54
Shared Data
  • It isn't uncommon to need to share data between a
    servlet and a JSP.
  • The servlet may perform all of the business
    processing necessary to generate the data to be
    displayed by the JSP.
  • We could use the client's session, but what if
    the data isn't required beyond a single
    request-response pair?

55
Request Attributes(1 of 2)
  • For data that needs to exist only for a single
    client request, we can use the HttpServletRequest
    object to store our data.
  • In addition to the parameters passed in by the
    client, the HttpServletRequest contains
    attributes which can be set by servlets and JSPs.

56
Request Attributes(2 of 2)
  • As with session attributes, request attributes
    are nothing more than a name-value pair.
  • To manipulate these attributes you can use the
    following methods
  • public void
  • setAttribute(String, Object)
  • public Object
  • getAttribute(String)

57
Sample Code SetData(1 of 3)
  1. import java.io.
  2. import java.util.
  3. import javax.servlet.
  4. import javax.servlet.http.
  5. public class SendData
  6. extends HttpServlet
  7. public void doPost(HttpServletRequest rqst,
    HttpServletResponse resp)
  8. throws ServletException, IOException
  9. doGet(rqst, resp)

58
Sample Code SetData(2 of 3)
  1. public void doGet(HttpServletRequest rqst,
    HttpServletResponse resp)
  2. throws ServletException, IOException
  3. rqst.setAttribute("parm", "skippy")
  4. chain(rqst, resp, "GetData.jsp")

59
Sample Code SetData(3 of 3)
  1. private void chain(HttpServletRequest rqst,
    HttpServletResponse resp, String
    URL)
  2. throws ServletException, IOException
  3. RequestDispatcher dispatcher
    getServletContext(). getRequestDispatcher(
    URL)
  4. dispatcher.forward(rqst, resp)

60
Sample Code - GetData
  1. lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
    Transitional//EN"gt
  2. ltHTMLgt
  3. ltHEADgt
  4. ltTITLEgtGetData JSPlt/TITLEgt
  5. lt/HEADgt
  6. ltBODYgt
  7. ltH2gtGet Shared Valuelt/H2gtltBRgt
  8. ltH3gtThe shared value is...
  9. lt request.getAttribute("parm") gt
  10. lt/H3gt
  11. lt/BODYgt
  12. lt/HTMLgt

61
Review
  • During this class we have discussed
  • Anatomy of a JavaServer Page
  • Merging markup with Java
  • Configuring our JSPs with directives
  • Integrating servlets and JSPs

62
Resources
  • Core Servlets and JavaServer PagesMarty Hall,
    Prentice-Hall, Inc., 2000.ISBN 0-13-089340-4
  • Java 2 Platform, Enterprise EditionB. Shannon,
    et al., Addison-Wesley, 2000.ISBN 0-201-70456-0

63
Coming Attractions
  • Next week we'll add custom tags to our JavaServer
    Pages.
  • Please read Chapter 14 in your text.
Write a Comment
User Comments (0)
About PowerShow.com