CMP 436 - PowerPoint PPT Presentation

1 / 41
About This Presentation
Title:

CMP 436

Description:

Drawback of MVC (Based on useBean) ... Deactivating the expression language in multiple JSP pages. ... Deactivating individual EL statements. ... – PowerPoint PPT presentation

Number of Views:28
Avg rating:3.0/5.0
Slides: 42
Provided by: GJu
Category:
Tags: cmp | deactivating

less

Transcript and Presenter's Notes

Title: CMP 436


1
CMP 436
  • Integrating Servlets/JSPs
  • MVC (Model View Controller)
  • JSP EL (Expression Language)
  • Part 2
  • Based on chapters 15, 16
  • Fall 06
  • Department of Mathematics
  • and Computer Science
  • Lehman College, CUNY

2
JSP and Servlet Interactions
By Expression Language
3
Drawback of MVC (Based on useBean)
  • Main drawback is the final step presenting the
    results in the JSP page.
  • jspuseBean and jspgetProperty
  • Clumsy and verbose
  • Cannot access bean subproperties
  • JSP scripting elements
  • May Result in hard-to-maintain code
  • Defeat the purpose behind MVC.
  • Goal
  • More concise access
  • Ability to access subproperties
  • Simple syntax accessible to Web developers

4
Advantages of Expression Language
  • Concise access to stored objects.
  • To output a scoped variable (object stored with
    setAttribute in the PageContext,
    HttpServletRequest, HttpSession, or
    ServletContext) named saleItem, you use
    saleItem.
  • Shorthand notation for bean properties.
  • Examples
  • To output the companyName property (i.e., result
    of the getCompanyName() method) of a scoped
    variable named company, you use
    company.companyName.
  • To access the firstName property of the president
    property of a scoped variable named company, you
    use company.president.firstName.
  • Simple access to collection elements.
  • To access an element of an array, List, or Map,
    you use variableindexOrKey. Provided that
    the index or key is in a form that is legal for
    Java variable names.

5
Advantages of EL (contd)
  • Succinct access to request parameters, cookies,
    and other request data.
  • To access the standard types of request data, you
    can use one of several predefined implicit
    objects.
  • A small but useful set of simple operators.
  • To manipulate objects within EL expressions, you
    can use any of several arithmetic, relational,
    logical, or empty-testing operators.
  • (E.g.,) For conditional output, you can use
    test ? option1 option2.
  • Automatic type conversion.
  • The expression language removes the need for most
    typecasts and for much of the code that parses
    strings as numbers.
  • Empty values instead of error messages.
  • In most cases, missing values or
    NullPointerExceptions result in empty strings,
    not thrown exceptions.

6
Activating Expression Language
  • Available only in servers that support JSP 2.0
    (Servlets 2.4 or later).
  • (E.g.,) Tomcat 5, not Tomcat 4
  • Use the JSP 2.0 web.xml file
  • lt?xml version"1.0" encoding"ISO-8859-1"?gt
  • ltweb-app xmlns"http//java.sun.com/xml/ns/j2ee"
  • xmlnsxsi"http//www.w3.org/2001/XMLSchema-instan
    ce"
  • xsischemaLocation
  • "http//java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
  • version"2.4"gt
  • lt/web-appgt

7
Invoking the Expression Language
  • Basic form expression
  • These EL elements can appear in ordinary text or
    in JSP tag attributes, provided that those
    attributes permit regular JSP expressions. For
    example
  • ltULgt
  • ltLIgtName expression1
  • ltLIgtAddress expression2
  • lt/ULgt
  • ltjspinclude page"expression3" /gt
  • The EL in tag attributes
  • You can use multiple expressions (possibly
    intermixed with static text) and the results are
    strings and concatenated. For example
  • ltjspinclude page"expr1..expr2" /gt
  • Escaping special characters
  • To get in the page output, Use \ in the JSP
    page. To get a single quote within an EL
    expression Use \ and to get a double quote
    within an EL expression Use \"

8
Preventing EL Evaluation
  • Deactivating the expression language in multiple
    JSP pages.
  • Use the jsp-property-group web.xml element
  • (e.g.,) ltel-ignoredgttruelt/el-ignoredgt
  • Deactivating the expression language in
    individual JSP pages.
  • Use lt_at_ page isELEnabled"false" gt (above
    approach is preferred)
  • Deactivating individual EL statements.
  • In JSP 1.2 pages that need to be ported
    unmodified across multiple JSP versions (with no
    web.xml changes), you can replace with 36,
    the HTML character entity for .
  • In JSP 2.0 pages that contain both expression
    language statements and literal strings, you
    can use \ when you want in the output.

9
Preventing Use of Scripting Elements
  • To enforce EL-only with no scripting, use
    scripting-invalid in web.xml
  • lt?xml version"1.0" encoding"ISO-8859-1"?gt
  • ltweb-app xmlns"http//java.sun.com/xml/ns/j2ee"
  • xmlnsxsi
  • "http//www.w3.org/2001/XMLSchema-instance"
  • xsischemaLocation
  • "http//java.sun.com/xml/ns/j2ee
    web-app_2_4.xsd"
  • version"2.4"gt
  • ltjsp-property-groupgt
  • lturl-patterngt.jsplt/url-patterngt
  • ltscripting-invalidgttruelt/scripting-invalidgt
  • lt/jsp-property-groupgt
  • lt/web-appgt

10
Accessing Scoped Variables
  • varName
  • Means to search the PageContext, the
    HttpServletRequest, the HttpSession, and the
    ServletContext, in that order, and output the
    object with that attribute name.
  • Bean object variable
  • name
  • lt pageContext.findAttribute("name") gt
  • ltjspuseBean idperson type"somePackage.SomeCla
    ss scope"..."gt
  • ltjspgetProperty nameperson propertyname" /gt

11
Example ScopedVars
  • public class ScopedVars extends HttpServlet
  • public void doGet(HttpServletRequest request,
  • HttpServletResponse response)
  • throws ServletException, IOException
  • request.setAttribute("attribute1", "First
    Value")
  • HttpSession session request.getSession()
  • session.setAttribute("attribute2", "Second
    Value")
  • ServletContext application
    getServletContext()
  • application.setAttribute("attribute3",
  • new
    java.util.Date())
  • request.setAttribute("repeated", "Request")
  • session.setAttribute("repeated", "Session")
  • application.setAttribute("repeated",
    "ServletContext")
  • RequestDispatcher dispatcher
  • request.getRequestDispatcher("/scoped-vars.j
    sp")
  • dispatcher.forward(request, response)

12
ScopedVars (contd) web.xml
  • ltservletgt
  • ltservlet-namegtScopedVarslt/servlet-namegt
  • ltservlet-classgtMVCEL.ScopedVarslt/servlet-class
    gt
  • lt/servletgt
  • ltservlet-mappinggt
  • ltservlet-namegtScopedVarslt/servlet-namegt
  • lturl-patterngt/ScopedVarslt/url-patterngt
  • lt/servlet-mappinggt

13
scoped-vars.jsp
  • lt!DOCTYPE gt
  • ltTABLE BORDER5 ALIGN"CENTER"gt
  • ltTRgtltTH CLASS"TITLE"gt
  • Accessing Scoped Variables
  • lt/TABLEgt
  • ltPgt
  • ltULgt
  • ltLIgtltBgtattribute1lt/Bgt attribute1
  • ltLIgtltBgtattribute2lt/Bgt attribute2
  • ltLIgtltBgtattribute3lt/Bgt attribute3
  • ltLIgtltBgtSource of "repeated" attributelt/Bgt
    repeated
  • lt/ULgt
  • lt/BODYgtlt/HTMLgt

14
ScopedVars (contd)
15
Accessing Bean Properties
  • varName.propertyName
  • Means to find scoped variable of given name and
    output the specified bean property
  • Equivalent forms
  • customer.firstName
  • lt_at_ page importpackageName.NameBean" gt
  • lt
  • NameBean person
  • (NameBean)pageContext.findAttribute("customer")
  • gt
  • lt person.getFirstName() gt

16
Accessing Bean Properties (contd)
  • Equivalent forms
  • customer.firstName
  • ltjspuseBean id"customer type"coreservlets.Name
    Bean scope"request, page, session, or
    application" /gt
  • ltjspgetProperty name"customer
    property"firstName" /gt
  • This may be better than script on previous slide.
  • But, requires you to know the scope and fails for
    sub-properties. (E.g.,) customer.address.zipCode
  • Equivalent forms
  • name.property
  • name"property"
  • Reasons for using array notations
  • To access arrays, lists, and other collections
  • To calculate the property name at request time.

17
Example BeanProperties
  • public class BeanProperties extends HttpServlet
  • public void doGet(HttpServletRequest request,
  • HttpServletResponse response)
  • throws ServletException, IOException
  • NameBean name new NameBean("Bob",
    "Feiner")
  • CompanyBean company
  • new CompanyBean("cdphone.com",
  • "MP3 phone maker")
  • EmployeeBean employee new
    EmployeeBean(name, company)
  • request.setAttribute("employee", employee)
  • RequestDispatcher dispatcher
  • request.getRequestDispatcher("/bean-properti
    es.jsp")
  • dispatcher.forward(request, response)

18
BeanProperties (contd)
  • public class EmployeeBean
  • private NameBean name
  • private CompanyBean company
  • public EmployeeBean(NameBean name, CompanyBean
    company)
  • setName(name)
  • setCompany(company)
  • public NameBean getName() return(name)
  • public void setName(NameBean newName)
  • name newName
  • public CompanyBean getCompany()
    return(company)
  • public void setCompany(CompanyBean newCompany)
  • company newCompany

19
BeanProperties (contd)
  • public class NameBean
  • private String firstName "Missing first
    name"
  • private String lastName "Missing last name"
  • public NameBean()
  • public NameBean(String firstName, String
    lastName)
  • setFirstName(firstName)
  • setLastName(lastName)
  • public String getFirstName()
  • return(firstName)
  • public void setFirstName(String newFirstName)
  • firstName newFirstName
  • public String getLastName()
  • return(lastName)

20
BeanProperties (contd)
  • public class CompanyBean
  • private String companyName
  • private String business
  • public CompanyBean(String companyName, String
    business)
  • setCompanyName(companyName)
  • setBusiness(business)
  • public String getCompanyName()
    return(companyName)
  • public void setCompanyName(String
    newCompanyName)
  • companyName newCompanyName
  • public String getBusiness() return(business)
  • public void setBusiness(String newBusiness)
  • business newBusiness

21
bean-properties.jsp
  • lt!DOCTYPE gt
  • ltULgt
  • ltLIgtltBgtFirst Namelt/Bgt
  • employee.name.firstName
  • ltLIgtltBgtLast Namelt/Bgt
  • employee.name.lastName
  • ltLIgtltBgtCompany Namelt/Bgt
  • employee.company.companyName
  • ltLIgtltBgtCompany Businesslt/Bgt
  • employee.company.business
  • lt/ULgt
  • lt/BODYgt
  • lt/HTMLgt

22
BeanProperties (contd)
23
Accessing Collections
  • attributeNameentryName works for
  • Array.
  • Equivalent to theArrayindex
  • List.
  • Equivalent to theList.get(index)
  • Map.
  • Equivalent to theMap.get(keyName)
  • Equivalent forms (for HashMap)
  • stateCapitals"maryland"
  • stateCapitals.maryland
  • But the following is illegal since 2 is not a
    legal var name
  • listVar.2

24
Example Collections
  • public class Collections extends HttpServlet
  • public void doGet(HttpServletRequest request,
    HttpServletResponse response)
  • throws ServletException, IOException
  • String firstNames "Bill", "Scott",
    "Larry"
  • ArrayList lastNames new ArrayList()
  • lastNames.add("Ellison")
  • lastNames.add("Gates")
  • lastNames.add("McNealy")
  • HashMap companyNames new HashMap()
  • companyNames.put("Ellison", "Sun")
  • companyNames.put("Gates", "Oracle")
  • companyNames.put("McNealy", "Microsoft")
  • request.setAttribute("first", firstNames)
  • request.setAttribute("last", lastNames)
  • request.setAttribute("company",
    companyNames)
  • RequestDispatcher dispatcher
  • request.getRequestDispatcher("/collections.j
    sp")
  • dispatcher.forward(request, response)

25
collections.jsp
  • lt!DOCTYPE gt
  • ltBODYgt
  • ltTABLE BORDER5 ALIGN"CENTER"gt
  • ltTRgtltTH CLASS"TITLE"gt
  • Accessing Collections
  • lt/TABLEgt
  • ltPgt
  • ltULgt
  • ltLIgtfirst0 last0 (company"Ellison"
    )
  • ltLIgtfirst1 last1 (company"Gates")
  • ltLIgtfirst2 last2 (company"McNealy"
    )
  • lt/ULgt
  • lt/BODYgtlt/HTMLgt

26
Accessing Collections
27
Accessing Implicit Objects
  • pageContext
  • E.g., pageContext.session.id
  • param and paramValues
  • Request params. E.g. param.custID
  • header and headerValues
  • Request headers. E.g. header.Accept or
    header"Accept", header"Accept-Encoding"
  • cookie
  • Cookie object (not cookie value). E.g.
    cookie.userCookie.value or cookie"userCookie
    ".value
  • initParam
  • Context initialization param.
  • pageScope, requestScope, sessionScope,
    appliationScope.

28
Expression Language support
  • implicit variables defined in the EL

29
Example Implicit Objects
  • lt!DOCTYPE gt
  • ltPgt
  • ltULgt
  • ltLIgtltBgttest Request Parameterlt/Bgt
  • param.test
  • ltLIgtltBgtUser-Agent Headerlt/Bgt
  • header"User-Agent"
  • ltLIgtltBgtJSESSIONID Cookie Valuelt/Bgt
  • cookie.JSESSIONID.value
  • ltLIgtltBgtServerlt/Bgt
  • pageContext.servletContext.serverInfo
  • lt/ULgt
  • lt/BODYgtlt/HTMLgt

30
Example Implicit Objects
31
Operators Conditional Expressions
  • Arithmetic
  • - / div mod
  • Relational
  • eq ! ne lt lt gt gt lt le gt ge
  • Logical
  • and or ! not
  • Empty
  • Empty
  • True for null, empty string, empty array, empty
    list, empty map. False otherwise.
  • test ? expression1 expression2
  • Evaluates test and outputs either expression1 or
    expression2
  • Problems
  • Relatively weak
  • cif and cchoose from JSTL may be better

32
Examples
  • 1.2 2.3 gt 3.5 lt 1.2 2.3 gt
  • 3/0 gt Infinity
  • \1 gt 1
  • 10 mod 4 gt 2
  • 4.0 gt 3 gt true
  • 4.0 ge 3 gt true Not in Java
  • 100.0 100 gt true
  • (1010) ne 100 gt false Not in Java
  • 'hip' gt 'hit' gt false Not in Java
  • 'a' lt 'b' gt true Not in Java

33
Expression Language support
34
Example operator.jsp
  • ..
  • ltTABLE BORDER1 ALIGN"CENTER"gt
  • ltTRgtltTH CLASS"COLORED" COLSPAN2gtArithmetic
    Operators
  • ltTH CLASS"COLORED" COLSPAN2gtRelational
    Operators
  • ltTRgtltTHgtExpressionltTHgtResultltTHgtExpressionltTHgtRe
    sult
  • ltTR ALIGN"CENTER"gt
  • ltTDgt\32-1ltTDgt32-1 lt--
    Addition/Subtraction --gt
  • ltTDgt\1lt2ltTDgt1lt2 lt-- Numerical
    comparison --gt
  • ltTR ALIGN"CENTER"gt
  • ltTDgt\"1"2ltTDgt"1"2 lt-- String
    conversion --gt
  • ltTDgt\"a"lt"b"ltTDgt"a"lt"b" lt-- Lexical
    comparison --gt
  • ltTR ALIGN"CENTER"gt
  • ltTDgt\1 23 3/4ltTDgt1 23 3/4
    lt-- Mult/Div --gt
  • ltTDgt\2/3 gt 3/2ltTDgt2/3 gt 3/2
    lt-- gt --gt
  • ltTR ALIGN"CENTER"gt
  • ltTDgt\32ltTDgt32 lt--
    Modulo --gt
  • ltTDgt\3/4 0.75ltTDgt3/4 0.75 lt--
    Numeric --gt
  • ltTR ALIGN"CENTER"gt

35
Example operators.jsp (contd)
  • ltTRgtltTH CLASS"COLORED" COLSPAN2gtLogical
    Operators
  • ltTH CLASS"COLORED" COLSPAN2gtltCODEgtemptylt/C
    ODEgt Operator
  • ltTRgtltTHgtExpressionltTHgtResultltTHgtExpressionltTHgtRe
    sult
  • ltTR ALIGN"CENTER"gt
  • ltTDgt\(1lt2) (4lt3)ltTDgt(1lt2)
    (4lt3) lt--AND--gt
  • ltTDgt\empty ""ltTDgtempty "" lt-- Empty
    string --gt
  • ltTR ALIGN"CENTER"gt
  • ltTDgt\(1lt2) (4lt3)ltTDgt(1lt2)
    (4lt3) lt--OR--gt
  • ltTDgt\empty nullltTDgtempty null lt-- null
    --gt
  • ltTR ALIGN"CENTER"gt
  • ltTDgt\!(1lt2)ltTDgt!(1lt2) lt-- NOT -gt
  • lt-- Handles null or empty string in request
    param --gt
  • ltTDgt\empty param.blahltTDgtempty
    param.blah
  • lt/TABLEgt
  • lt/BODYgtlt/HTMLgt

36
Example operators.jsp (contd)
37
Example Conditionals
  • public class Conditionals extends HttpServlet
  • public void doGet(HttpServletRequest request,
  • HttpServletResponse response)
  • throws ServletException, IOException
  • SalesBean apples
  • new SalesBean(150.25, -75.25, 22.25,
    -33.57)
  • SalesBean oranges
  • new SalesBean(-220.25, -49.57, 138.25,
    12.25)
  • request.setAttribute("apples", apples)
  • request.setAttribute("oranges", oranges)
  • RequestDispatcher dispatcher
  • request.getRequestDispatcher("/conditional-e
    val.jsp")
  • dispatcher.forward(request, response)

38
SalesBean.java
  • package MVCEL
  • public class SalesBean
  • private double q1, q2, q3, q4
  • public SalesBean(double q1Sales,
  • double q2Sales,
  • double q3Sales,
  • double q4Sales)
  • q1 q1Sales
  • q2 q2Sales
  • q3 q3Sales
  • q4 q4Sales
  • public double getQ1() return(q1)
  • public double getQ2() return(q2)

39
conditional-eval.jsp
  • ltTABLE BORDER1 ALIGN"CENTER"gt
  • ltTRgtltTHgt
  • ltTH CLASS"COLORED"gtApples
  • ltTH CLASS"COLORED"gtOranges
  • ltTRgtltTH CLASS"COLORED"gtFirst Quarter
  • ltTD ALIGN"RIGHT"gtapples.q1
  • ltTD ALIGN"RIGHT"gtoranges.q1
  • ltTRgtltTH CLASS"COLORED"gtSecond Quarter
  • ltTD ALIGN"RIGHT"gtapples.q2
  • ltTD ALIGN"RIGHT"gtoranges.q2
  • ltTRgtltTH CLASS"COLORED"gtTotal
  • ltTD ALIGN"RIGHT"
  • BGCOLOR"(apples.total lt 0) ? "RED" "WHITE"
    "gt apples.total
  • ltTD ALIGN"RIGHT"
  • BGCOLOR"(oranges.total lt 0) ? "RED"
    "WHITE" "gt oranges.total
  • lt/TABLEgt

40
Conditional Evaluation
41
Summary on Expression Language
  • The JSP 2.0 EL provides concise, easy-to read
    access to
  • Bean properties
  • Collection elements
  • Standard HTTP elements such as request
    parameters,
  • request headers, and cookies
  • The JSP 2.0 EL works well with MVC
  • Use only to output values created by separate
    Java code
  • Resist use of EL for business logic
  • Flexible (use in conjunction with tag libraries
    custom tags)
Write a Comment
User Comments (0)
About PowerShow.com