Using Caches in Multi-Tier Applications
This article analyzes the types of caches used in multi-tier applications, and discusses ways to solve cache-related problems, such as "stale" data. The article also looks into the caching frameworks provided by Oracle; specifically, Oracle Web Cache, Web Object Cache, Java Object Cache, and Oracle TopLink. You'll also learn about "no-cache" HTTP headers, dynamic content caching, data versioning, and optimistic locking.
Call JavaBean Methods from JSP 2.0 Pages
JSP 2.0 incorporated the expression language (EL) introduced by JSTL to let Web designers produce scriptless JSP pages that don't contain Java code. JSP 2.0 also provided new features for tag handlers such as dynamic attributes, the Simple Invocation Protocol, and .tag files. All those JSP technology improvements let you achieve the goal of separating the JSP/HTML markup from the Java code. One thing is missing, however. JSP 2.0 has no syntax for calling a public non-static JavaBean method from a scriptless JSP page. This article solves that issue by providing a JSP 2.0 simple tag with dynamic attributes.
Caching Dynamic Content with JSP 2.0
This article improves a technique developed as part of the Apache Jakarta project, allowing JSP pages to customize the cached content for each request or user, using the JSP 2.0 Expression Language (EL). The creation of the dynamic content is optimized and the cached fragments can have pieces of content that are generated for each request using the native expression language of JSP. This is possible with the help of the JSP 2.0 EL API, which exposes the expression language to the Java developer.
JSP Progress Bars
When a JSP invokes an expensive operation whose result cannot be cached (on the server side), the user will have to wait each time he requests the page. Eventually, the user will lose his patience and he'll click the browser's Refresh or Reload button. This leads to ignored page requests that do heavy processing. The article shows how to solve the problem described above by starting the heavy task in a separate thread.