The following sections describe the use of three custom JSP tags—cache, repeat, and process—provided with the WebLogic Server distribution:
BEA provides three specialized JSP tags that you can use in your JSP pages: cache
, repeat
, and process.
These tags are packaged in a tag library jar file called weblogic-tags.jar
. This jar file contains classes for the tags and a tag library descriptor (TLD). To use these tags, you copy this jar file to the Web application that contains your JSPs and reference the tag library in your JSP.
Using the WebLogic custom tags requires that you include them within a Web application.
To use these tags in your JSP:
weblogic-tags.jar
file from the ext
directory of your WebLogic Server installation to the WEB-INF/lib
directory of the Web application containing the JSPs that will use the WebLogic Custom Tags.<taglib>
element of the J2EE standard Web application deployment descriptor, web.xml.
For example:<taglib>
<taglib-uri>weblogic-tags.tld</taglib-uri>
<taglib-location>
/WEB-INF/lib/weblogic-tags.jar
</taglib-location>
</taglib>
taglib
directive. For example:<%@ taglib uri="weblogic-tags.tld" prefix="wl" %>
The cache tag enables caching the work that is done within the body of the tag. It supports both output (transform) data and input (calculated) data. Output caching refers to the content generated by the code within the tag. Input caching refers to the values to which variables are set by the code within the tag. Output caching is useful when the final form of the content is the important thing to cache. Input caching is important when the view of the data can vary independently of the data calculated within the tag.
If one client is already recalculating the contents of a cache and another client requests the same content it does not wait for the completion of the recalculation, instead it shows whatever information is already in the cache. This is to make sure that the web site does not come to a halt for all your users because a cache is being recalculated. Additionally, the async attribute means that no one, not even the user that initiates the cache recalculation waits.
Two versions of the cache tag are available. Version 2 has additional scopes available.
Caches are stored using soft references to prevent the caching system from using too much system memory. Unfortunately, due to incompatibilities with the HotSpot VM and the Classic VM, soft references are not used when WebLogic Server is running within the HotSpot VM.
You can force the refresh of a cache by setting the _cache_refresh
object to true
in the scope that you want affected. For example, to refresh a cache at session scope, specify the following:
<% request.setAttribute("_cache_refresh", "true"); %>
If you want all caches to be refreshed, set the cache to the application scope
. If you want all the caches for a user to be refreshed, set it in the session
scope. If you want all the caches in the current request to be refreshed, set the _cache_refresh
object either as a parameter or in the request.
The <wl:cache>
tag specifies content that must be updated each time it is displayed. The statements between the <wl:cache>
and </wl:cache>
tags are only executed if the cache has expired or if any of the values of the key attributes (see the
Cache Tag Attributes table) have changed.
Flushing a cache forces the cached values to be erased; the next time the cache is accessed, the values are recalculated. To flush a cache, set its flush
attribute to true
. The cache must be named using the name
attribute. If the cache has the size
attribute set, all values are flushed. If the cache sets the key
attribute but not the size
attribute, you can flush a specific cache by specifying its key
along with any other attributes required to uniquely identify the cache (such as scope
or vars
).
<wl:cache name="dbtable" key="parameter.tablename"
scope="application">
// read the table and output it to the page
</wl:cache>
flush
attribute in an empty tag (an empty tag ends with /
and does not use a closing tag). For example<wl:cache name="dbtable" key="parameter.tablename" scope="application" flush="true"/>
Additional properties of the cache system for version 2
The following examples show how you can use the <wl:cache>
tag.
<wl:cache><!--the content between these tags will only be
</wl:cache>
refreshed on server restart-->
<wl:cache key="request.ticker" timeout="1m"><!--get stock quote for whatever is in the request parameter ticker
</wl:cache>
and display it, only update it every minute--><wl:cache key="parameter.isbn" timeout="1d" size="100">
<!--incoming parameter value isbn is the number used to lookup the
book in the database--><!--retrieve the book from the database and display
</wl:cache>
the information -- the tag will cache the top 100
most accessed book descriptions-->
<wl:cache timeout="15m" async="true"><!--get the new headlines from the database every 15 minutes and
</wl:cache>
display them-->
<!--do not let anyone see the pause while they are retrieved-->
Use the <wl:process>
tag for query parameter-based flow control. By using a combination of the tag’s four attributes, you can selectively execute the statements between the <wl:process>
and </wl:process>
tags. The process tag may also be used to declaratively process the results of form submissions. By specifying conditions based on the values of request parameters you can include or not include JSP syntax on your page.
The following examples show how you can use the <wl:process>
tag:
<wl:process notname="update">
<wl:process notname="delete"><!--Only show this if there is no update or delete parameter-->
<form action="<%= request.getRequestURI() %>">
<input type="text" name="name"/>
<input type="submit" name="update" value="Update"/>
<input type="submit" name="delete" value="Delete"/>
</form>
</wl:process>
</wl:process>
<wl:process name="update"><!-- do the update -->
</wl:process>
<wl:process name="delete"><!--do the delete-->
</wl:process>
<wl:process name="lastBookRead" value="A Man in Full"><!--this section of code will be executed if lastBookRead exists
</wl:process>
and the value of lastBookRead is "A Man in Full"-->
Use the <wl:repeat>
tag to iterate over many different types of sets, including Enumerations, Iterators, Collections, Arrays of Objects, Vectors, ResultSets, ResultSetMetaData, and the keys of a Hashtable. You can also just loop a certain number of times by using the count
attribute. Use the set attribute to specify the type of Java objects.
The following example shows how you can use the <wl:repeat>
tag.
<wl:repeat id="name" set="<%= new String[] { "sam", "fred", "ed" } %>">
<%= name %>
</wl:repeat>
<% Vector v = new Vector();%><!--add to the vector-->
<wl:repeat id="item" set="<%= v.elements() %>"><!--print each element-->
</wl:repeat>