1 / 32

Custom Tags

Custom Tags. Organization of the platform. Your web pages. Your application. JSTL. JavaServer Pages (JSP). Java Servlet API. Java language. What’s irritating about Custom Tags?. The tag-extension protocol is too complicated. Tag handler. doStartTag(). doEndTag(). .

tabib
Download Presentation

Custom Tags

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. Custom Tags

  2. Organization of the platform Your web pages Your application JSTL JavaServer Pages (JSP) Java Servlet API Java language

  3. What’s irritating about Custom Tags? • The tag-extension protocol is too complicated Tag handler doStartTag() doEndTag()  Too hard for Gosling, even? doInitBody() doAfterBody() doCatch() doFinally() release()

  4. What’s irritating about JSP? • Also, tags don’t support certain kinds of code reuse. <font color=”<%=statusColor%>”> <% for (…) { %> <%= customer %>: <%= hatSize %> <% } %> </font>  out.println(…); for(…) { out.println(…); … }

  5. What’s bad about JSP? () • The general consensus says… Scriplets • They complicate abstraction and code reuse. • They make it harder for nonprogrammers to maintain pages

  6. JSP 2.0 • Sun introduced the solution to these problems in JSP 2.0. • It addresses theses issues by introducing • Expression language • Tag files • Simplified Tag API (SimpleTag versus Tag) • Improved XML syntax • JSTL, although it is not part of JSP specificiation.

  7. JSP Expression Language • JSP became beautiful after this  • The motivation is to lose scriplets whatsoever . • Also non java programmers should be able to use it easily, because it is just an expression language. • It was inspired by xpath and java script except it is much easier than any of them 

  8. EL syntax • Expressions appear between ${ and }. • Note that ${ and } may contain whole expressions, not just variable names • E.g., ${myExpression + 2} • Access JavaBean properties using . (dot) • ${book.title} translates to book.getTitle() • Access to Array and Collection elements using collection[] • Access to a Map value by key using map[“key”]

  9. EL syntax • EL searches each scope area if a scope isn’t specified • Specific scope areas can be used: • ${pageScope.title} • ${requestScope.title} • ${sessionScope.title} • ${applicationScope.title} ${duck.beakColor} can resolve to ((Duck) pageContext.getAttribute(”duck”)).getBeakColor() • Automatic Casting, wow 

  10. EL Operators • Arithmetic • +, -, *, / (or div), % (or mod) – note on XPath • Relational • == (or eq), != (or ne), < (or lt) • > (or gt), <= (or le), >= (or ge) • Logical • && (or and), || (or or), ! (or not) • Validation • empty • null values • Collections or Arrays that are empty • Strings that evaluate to “”

  11. EL Operators (Examples) • Arithmetic ${age + 3} • Comparisons ${age > 21} • Equality checks ${age = 55} • Logical operations ${young or beautiful} • Emptiness detection ${empty a} • ‘a’ is empty String (“”), empty List, null, etc. Useful for ${empty param.x}

  12. Implicit objects in EL • Param and paramvalues • Access HTTP request parameters • Example: ${param.password} • Header and headervalues • Request header information • Example: ${header[“User-Agent”]} • Initparam (for the context init parameters of the webapp) • Example: ${pageContext.request.remoteUser} • Cookies • Example: ${cookie.crumb}

  13. EL: Uses • JSTL 1.0 introduced the EL, but it could be used only within tags. • In JSP 2.0, it can be used almost anywhere <font color=”${color}”> Hi, ${user}. You are <user:age style=”${style}”/> years old. </font>

  14. JSTL • JSP Standard Tag Library • Set of tags that should be available in all compliant JSP containers • Promotes rapid application development at the web page layer

  15. Why JSTL? • A big reason is that writing your own custom actions, or tags, can be a pain • There was lots of reinventing the wheel going on, for tasks like displaying a date in a special format • Many open source libraries sprung up, but there was still no standard • This fueled the fire behind JSTL

  16. JSTL: Features • Control flow • Iteration, conditions • URL management • Retrieve data, add session IDs • Text formatting and internationalization • Dates and numbers • Localized messages • XML manipulation • XPath, XSLT • Database access • Queries, updates (you do not need to write java any more )

  17. JSTL: Libraries

  18. Managing variables • Outputting values with EL <c:out value=”${user.IQ}” /> • Storing data <c:set var=”user” scope=”session”> // arbitrary text </c:set> Note the use of “var” and “scope”: a JSTL convention

  19. Iteration • A loop with a start, end, and step (typical for statement) <c:forEach var="name" varStatus="name" begin="expression" end="expression" step="expression"> body content </c:forEach> • A loop using an Iterator for a collection <c:forEach var="name" items="expression" varStatus="name" begin="expression" end="expression" step="expression"> body content </c:forEach>

  20. Example <table> <tr><th>Value</th><th>Square</th></tr> <c:forEach var="x" begin="0" end="10" step="2"> <tr> <td>${x}</td> <td>${x * x}</td> </tr> </c:forEach> </table>

  21. Conditional evaluation <c:if test=”${a == b}”> a equals b </c:if> Mutually exclusive conditionals <c:choose> <c:when test=”${a == b}”> a equals b </c:when> <c:when test=”${a == c}”> a equals c </c:when> <c:otherwise> I don’t know what ’a’ equals. </c:otherwise> </c:choose> Conditional logic

  22. Example <c:choose> <c:when test="${pageContext.request.scheme eq 'http'}"> This is an insecure Web session. </c:when> <c:when test="${pageContext.request.scheme eq 'https'}"> This is a secure Web session. </c:when> <c:otherwise> You are using an unrecognized Web protocol. How did this happen?! </c:otherwise> </c:choose>

  23. URL management • Retrieving data <c:import var=”cnn” url=”http://www.cnn.com/cnn.rss”/> • Data exposed as String or Reader • All core URLs supported (HTTP, FTP, HTTPS with JSSE) • Local, cross-context imports supported • Printing URLs <c:url value=”/foo.jsp”> • Redirection <c:redirect url=”/foo.jsp”>

  24. Text formatting • Locale-sensitive formatting and parsing • Numbers • Dates • Internationalization • Message bundles • Message argument substitution • “Hi {0}. I would like to {1} your money today. I will use it to buy myself a big {2}.” <fmt:formatNumber type=“currency” value=“${salary}” /> <fmt:message key=“welcome” />

  25. Example <table> <fmt:timeZone value="US/Eastern"> <c:forEach items="${entryList}" var="blogEntry" varStatus="status"> <c:if test="${status.first}"> <tr> <td align="left" class="blogDate"> <fmt:formatDate value="${blogEntry.created}" dateStyle="full"/> </td> </tr> </c:if> <tr> <td align="left" class="blogTitle">${blogEntry.title}</td> </tr> <tr> <td align="left" class="blogText">${blogEntry.text} <font class="blogPosted"> [Posted <fmt:formatDate value="${blogEntry.created}" pattern="h:mm a zz"/>] </font> </td> </tr> </c:forEach> </fmt:timeZone> </table>

  26. database manipulation • Queries (and ResultSet caching) • Updates / inserts • Transactions (<sql:transaction>) • Parametric (PreparedStatement) argument substitution (<sql:param>) • DataSource-based connection management <sql:query sql=“SELECT * FROM USERS” var=“result” /> <c:forEach items=“${result.rows}”> … </c:forEach>

  27. XML manipulation • Use of XPath to access, display pieces of XML documents <c:import url=”http://www.cnn.com/cnn.rss” var=”cnn”/> <x:parse xml=”${cnn}” var=“dom”> <x:out value=”$dom//item[1]/title”/> • Chaining XSLT transformations <x:transform xslt=”${xsl2}” /> <x:transform xml=”${xml}” xslt=”${xsl}” /> </x:transform>

  28. Why Not XSLT • JSTL integrates XPath with convenient, standard access to Java/JSP code. • E.g., parse an article URL out of a document, then follow the URL and parse its contents. • JSP/JSTL may be more familiar and convenient for simple tasks. • Functional versus imperative programming

  29. Adding New Tag • There are two ways to add news tags • Extend the JSTL and override methods • Define Tag files (This is much easier, so we gone study this  )

  30. Tag Files • Solve difficulty of reusing text/HTML within a tag. • And makes it much easier to write simple tags, since you can do so in JSP instead of Java. • Stand-alone file with <%@ tag %> directive instead of traditional <%@ page %> directive.

  31. Tag Files <%@ tag name=”tableTag” %> <%@ attribute name=”items” %> <table width=”…” bgcolor=”…”> <th> <td>Name</td> <td>IQ</td> </th> <c:forEach var=”i” items=”${items}”> <tr> <td>${i.fullName}</td> <td>${i.IQ}</td> </tr> </c:forEach> </table>

  32. Using new Tag.... Your shopping cart: <my:tableTag items=”${cart}” /> Your wish list: <my:tableTag items=”${wishList}” /> Things we want you to buy: <my:tableTag items=”${pressuredSales}” />

More Related