[go: up one dir, main page]

100% found this document useful (2 votes)
962 views22 pages

Struts and JSTL

Using the JSP Standard Tag Library (JSTL) with Struts. JSTL is the recommended replacement for the Struts looping and logic tags.

Uploaded by

PowerSlots
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
962 views22 pages

Struts and JSTL

Using the JSP Standard Tag Library (JSTL) with Struts. JSTL is the recommended replacement for the Struts looping and logic tags.

Uploaded by

PowerSlots
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 22

Using the JSP

Standard Tag Library


(JSTL) with Struts
Core Servlets & JSP book: www.coreservlets.com
More Servlets & JSP book: www.moreservlets.com
Servlet and JSP Training Courses: courses.coreservlets.com
2 Slides © Marty Hall, http://www.moreservlets.com, book © Sun Microsystems Press

For live Struts training, please see


JSP/servlet/Struts/JSF training courses at
http://courses.coreservlets.com/.
Taught by the author of Core Servlets and JSP, More
Servlets and JSP, and this tutorial. Available at public
venues, or customized versions can be held on-site at
your organization.
3 Slides © Marty Hall, http://www.moreservlets.com, book © Sun Microsystems Press
Agenda
• Obtaining JSTL documentation and code
• The JSTL Expression Language
• Looping Tags
– Looping a certain number of times
– Looping over data structures
• Conditional Evaluation Tags
– Single choice
– Multiple choices
• Database Access Tags
• Other Tags

4 JSTL 1.0 www.moreservlets.com

Overview and
Installation

5 Slides © Marty Hall, http://www.moreservlets.com, book © Sun Microsystems Press


JSTL Overview
• JSTL is the recommended replacement for
the Struts looping and logic tags
• JSTL is not part of the JSP 1.2 or 2.0 Specs
– It is a separate specification that requires a separate
download
– Available only in servers that support servlets 2.3 and
JSP 1.2 or later. Cannot be retrofitted into JSP 1.1.
• The JSTL expression language is now
part of JSP 2.0
• The JSTL Specification is available in PDF
– http://jcp.org/aboutJava/communityprocess/final/jsr052/

6 JSTL 1.0 www.moreservlets.com

Installing JSTL
• Some servers come with JSTL preinstalled
– E.g., Caucho Resin
• Official reference implementation
– http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/
• JSTL (like JSP) is a specification, not an
implementation
– Code is portable but not all versions are equal
• Speed, tools, and development environments
vary
• To install:
– Download zip file
– Unzip into directory of your choice (e.g., C:\jakarta-taglibs).
– Copy install_dir/standard-1.0.1/lib/jstl.jar and
install_dir/standard-1.0.1/lib/standard.jar to the WEB-INF/lib
7 directory of your Web application
JSTL 1.0 www.moreservlets.com
The JSTL Expression Language
• Accessed via ${expression}
• Similar to JavaScript and XPath
• Provides shorthand notation to access:
– Attributes of standard servlet objects
– Bean properties
– Map, List, and Array elements
• Is standard part of JSP 2.0
– In JSTL, EL can be used only in attributes of JSTL tags
– In JSP 2.0, the EL can be used anywhere
• web.xml element and page directive attribute let you disable the
EL for backward compatibility
• Covered in separate lecture
8 JSTL 1.0 www.moreservlets.com

Iteration Tags

9 Slides © Marty Hall, http://www.moreservlets.com, book © Sun Microsystems Press


Looping Tags: Summary
• Looping with explicit numeric values
<c:forEach var="name" begin="x" end="y" step="z">
Blah, blah <c:out value="${name}"/>
</c:forEach>

• Looping over data structures


– Can loop down arrays, strings, collections, maps
<c:forEach var="name"
items="array-or-collection">
Blah, blah <c:out value="${name}"/>
</c:forEach>

• Looping down delimited strings


– forTokens
10 JSTL 1.0 www.moreservlets.com

Looping Tags: Motivation


• JSP without JSTL
<UL>
<%
for(int i=0; i<messages.length; i++) {
String message = messages[i];
%>
<LI><%= message %>
<% } %>
</UL>
• JSP with JSTL
<UL>
<c:forEach var="message" items="${messages}">
<LI><c:out value="${message}"/>
</c:forEach>
</UL>
11 JSTL 1.0 www.moreservlets.com
Looping with Simple Numeric
Values
<%@ taglib prefix="c"
uri="http://java.sun.com/jstl/core" %>
<UL>
<c:forEach var="i" begin="1" end="10">
<LI><c:out value="${i}"/>
</c:forEach>
</UL>

12 JSTL 1.0 www.moreservlets.com

Looping with a Designated Step


Size
<%@ taglib prefix="c"
uri="http://java.sun.com/jstl/core" %>
<UL>
<c:forEach
var="seconds"
begin="0"
end="${pageContext.session.maxInactiveInterval}"
step="100">
<LI><c:out value="${seconds}"/> seconds.
</c:forEach>
<LI>Timeout exceeded.
</UL>

13 JSTL 1.0 www.moreservlets.com


Looping with a Designated Step
Size (Results)

14 JSTL 1.0 www.moreservlets.com

Looping Down Arrays


<% String[] words = { "foo", "bar", "baz"};
pageContext.setAttribute("words", words); %>
<%@ taglib prefix="c"
uri="http://java.sun.com/jstl/core" %>
<H2>Key Words:</H2>
<UL>
<c:forEach var="word"
items="${words}">
<LI><c:out value="${word}"/>
</c:forEach>
</UL>
<H2>Values of the test Parameter:</H2>
<UL>
<c:forEach var="val"
items="${paramValues.test}">
<LI><c:out value="${val}"/>
</c:forEach>
</UL>
15 JSTL 1.0 www.moreservlets.com
Looping Down Arrays (Results)

16 JSTL 1.0 www.moreservlets.com

Looping Down Comma-


Delimited Strings
<%@ taglib prefix="c"
uri="http://java.sun.com/jstl/core" %>
<UL>
<c:forEach
var="country"
items="Australia,Canada,Japan,Philippines,USA">
<LI><c:out value="${country}"/>
</c:forEach>
</UL>

17 JSTL 1.0 www.moreservlets.com


Looping Down Comma-
Delimited Strings (Results)

18 JSTL 1.0 www.moreservlets.com

Looping Down Arbitrarily-


Delimited Strings
<%@ taglib prefix="c"
uri="http://java.sun.com/jstl/core" %>
<UL>
<c:forTokens var="color"
items="(red (orange) yellow)(green)((blue) violet)"
delims="()">
<LI><c:out value="${color}"/>
</c:forTokens>
</UL>
• Point:
forTokens
built on forEach:
you can build your
own custom tags
based on JSTL tags www.moreservlets.com
19 JSTL 1.0
Logic Tags

20 Slides © Marty Hall, http://www.moreservlets.com, book © Sun Microsystems Press

Conditional Evaluation Tags


• One choice: if
<c:if test="${someTest}">
Content
</c:if>
• Lots of choices: choose
<c:choose>
<c:when test="test1">Content1</c:when>
<c:when test="test2">Content2</c:when>
...
<c:when test="testN">ContentN</c:when>
<c:otherwise>Default Content</c:otherwise>
</c:choose>

• Caution: resist use of business logic!


21 JSTL 1.0 www.moreservlets.com
The "if" Tag
<%@ taglib prefix="c"
uri="http://java.sun.com/jstl/core" %>
<UL>
<c:forEach var="i" begin="1" end="10">
<LI><c:out value="${i}"/>
<c:if test="${i > 7}">
(greater than 7)
</c:if>
</c:forEach>
</UL>

22 JSTL 1.0 www.moreservlets.com

The "if" Tag (Results)

23 JSTL 1.0 www.moreservlets.com


The "choose" Tag
<%@ taglib prefix="c"
uri="http://java.sun.com/jstl/core" %>
<UL>
<c:forEach var="i" begin="1" end="10">
<LI><c:out value="${i}"/>
<c:choose>
<c:when test="${i < 4}">
(small)
</c:when>
<c:when test="${i < 8}">
(medium)
</c:when>
<c:otherwise>
(large)
</c:otherwise>
</c:choose>
</c:forEach>
</UL>
24 JSTL 1.0 www.moreservlets.com

The "choose" Tag (Results)

25 JSTL 1.0 www.moreservlets.com


Database Access
Tags

26 Slides © Marty Hall, http://www.moreservlets.com, book © Sun Microsystems Press

Database Access Tags


• <sql:setDataSource>
– Specifies data source (can also be set by config settings)
• <sql:query>
– Queries database and stores ResultSet in variable
– Warning: this usage violates rule of keeping business
logic out of presentation layer. Instead, do database
access in servlet and pass results to JSP via MVC.
• <sql:update>
• <sql:param>
• <sql:dateParam>
• <sql:transaction>
– Performs the enclosed <sql:query> and <sql:update>
actions as a single transaction
27 JSTL 1.0 www.moreservlets.com
Aside: The Microsoft Access
Northwind Database
• Database that comes preinstalled with
Microsoft Office

28 JSTL 1.0 www.moreservlets.com

Using Microsoft Access via


ODBC
• Click Start, Settings, Control Panel,
Administrative Tools, Data Sources, System
DSN, and select Add

29 JSTL 1.0 www.moreservlets.com


Using Microsoft Access via
ODBC (Continued)
• Select Microsoft Access Driver, Finish, type
a name under Data Source Name, and hit
Select

30 JSTL 1.0 www.moreservlets.com

Using Microsoft Access via


ODBC (Continued)
• Navigate to the Samples directory of MS
Office, select Northwind.mdb, hit OK, then
hit OK in following two windows

31 JSTL 1.0 www.moreservlets.com


Using Microsoft Access via
ODBC (Continued)
• Driver
– sun.jdbc.odbc.JdbcOdbcDriver
• Comes bundled with JDK
• URL
– jdbc:odbc:Northwind
• Local access only; for testing. Not for serious applications.
• Username
– Empty string
• Password
– Empty string

32 JSTL 1.0 www.moreservlets.com

sql:setDataSource
• You can set a data source globally via
configuration settings or application-scoped
variables.
– Preferred approach in real applications
• Or, you can set it on a specific page
<%@ taglib prefix="sql"
uri="http://java.sun.com/jstl/sql" %>
<sql:setDataSource
driver="sun.jdbc.odbc.JdbcOdbcDriver"
url="jdbc:odbc:Northwind"
user=""
password=""/>

33 JSTL 1.0 www.moreservlets.com


sql:query
• Form 1: use the sql attribute
<sql:query var="results" sql="SELECT * FROM …"/>
• Form 2: put the query in the body of the tag
<sql:query var="results">
SELECT * FROM …
</sql:query>
• Options
– dataSource
– maxRows
– startRow
• Caution
– Embedding SQL directly in JSP may be hard to maintain.
34 JSTL 1.0 www.moreservlets.com

Simple Example
<%@ taglib prefix="c"
uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="sql"
uri="http://java.sun.com/jstl/sql" %>
<sql:setDataSource
driver="sun.jdbc.odbc.JdbcOdbcDriver"
url="jdbc:odbc:Northwind"
user=""
password=""/>

35 JSTL 1.0 www.moreservlets.com


Simple Example (Continued)
<sql:query var="employees">
SELECT * FROM employees
</sql:query>

<UL>
<c:forEach var="row" items="${employees.rows}">
<LI><c:out value="${row.firstname}"/>
<c:out value="${row.lastname}"/>
</c:forEach>
</UL>

36 JSTL 1.0 www.moreservlets.com

Simple Example: Results

37 JSTL 1.0 www.moreservlets.com


Other Tags

38 Slides © Marty Hall, http://www.moreservlets.com, book © Sun Microsystems Press

URL-Handling Tags
• <c:import>
– Read content from arbitrary URLs
• Insert into page
• Store in variable
• Or make accessible via a reader
– Unlike <jsp:include>, not restricted to own system
• <c:redirect>
– Redirects response to specified URL
• <c:param>
– Encodes a request parameter and adds it to a URL
– May be used within body of <c:import> or <c:redirect>

39 JSTL 1.0 www.moreservlets.com


Formatting Tags
• <fmt:formatNumber>
– Formats a numeric value as a number, currency value, or
percent, in a locale-specific manner
• <fmt:parseNumber>
– Reads string representations of number, currency value,
or percent
• <fmt:formatDate>
• <fmt:parseDate>
• <fmt:timeZone>
• <fmt:setTimeZone>

40 JSTL 1.0 www.moreservlets.com

Internationalization (I18N) Tags


• <fmt:setLocale>
– Sets Locale
• <fmt:setBundle>
• <fmt:bundle>
• <fmt:message>
– Retrieves localized message from a resource bundle
• <fmt:param>

41 JSTL 1.0 www.moreservlets.com


XML Manipulation Tags
• Core
– <x:parse>
• XPath
– <x:if>
– <x:choose>
– <x:when>
– <x:otherwise>
– <x:forEach>
• XSLT
– <x:transform>
– <x:param>

42 JSTL 1.0 www.moreservlets.com

Summary
• JSTL is similar to the old Struts looping and logic
tags, but better
• JSTL is standardized, but not a standard part of
JSP 1.2 or 2.0
– It must be downloaded and installed separately
• Supports a concise expression language
– Lets you access bean properties and implicit objects in shorthand
manner
– Is standard part of JSP 2.0
• Looping tags
– Explicit numeric values
– Arrays, collections, maps, strings, etc.
• Conditional evaluation tags
– Single options
43
– Multiple options
JSTL 1.0 www.moreservlets.com
Summary (Continued)
• Database Access Tags
– sql:setDataSource to specify a database
– sql:query to perform query
– Loop down results using iteration tags
• Other tags
– Handling URLS
– Internationalizing pages
– Formatting strings
– Manipulating XML

44 JSTL 1.0 www.moreservlets.com

Questions?

Core Servlets & JSP book: www.coreservlets.com


More Servlets & JSP book: www.moreservlets.com
Servlet/JSP/Struts/JSF Training: courses.coreservlets.com
45 Slides © Marty Hall, http://www.moreservlets.com, book © Sun Microsystems Press

You might also like