<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-22274983</id><updated>2011-04-21T11:18:09.368-07:00</updated><title type='text'>Approximately Perfect</title><subtitle type='html'>Thoughts on architecture, algorithms, agility, alacrity, altruism, appropriate ability and all that goes into making a software that works</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://approximatelyperfect.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://approximatelyperfect.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Shashank Tiwari</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.shanky.org/images/st_headtshot_2.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-22274983.post-2526418889783774011</id><published>2007-03-27T08:58:00.000-07:00</published><updated>2007-03-27T08:59:24.080-07:00</updated><title type='text'>Java IDEs</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22274983-2526418889783774011?l=approximatelyperfect.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://approximatelyperfect.blogspot.com/feeds/2526418889783774011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22274983&amp;postID=2526418889783774011' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/2526418889783774011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/2526418889783774011'/><link rel='alternate' type='text/html' href='http://approximatelyperfect.blogspot.com/2007/03/java-ides.html' title='Java IDEs'/><author><name>Shashank Tiwari</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.shanky.org/images/st_headtshot_2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22274983.post-115578511409060093</id><published>2006-08-16T20:22:00.000-07:00</published><updated>2006-08-16T20:27:30.193-07:00</updated><title type='text'>Migrating EJB2.x applications to EJB3.0</title><content type='html'>Read my latest article on migrating applications written to the EJB 2.x or earlier specification to the EJB 3.0 specification.&lt;br /&gt;&lt;br /&gt;Available at -&lt;br /&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-08-2006/jw-0814-ejb.html"&gt;http://www.javaworld.com/javaworld/jw-08-2006/jw-0814-ejb.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22274983-115578511409060093?l=approximatelyperfect.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://approximatelyperfect.blogspot.com/feeds/115578511409060093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22274983&amp;postID=115578511409060093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/115578511409060093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/115578511409060093'/><link rel='alternate' type='text/html' href='http://approximatelyperfect.blogspot.com/2006/08/migrating-ejb2x-applications-to-ejb30.html' title='Migrating EJB2.x applications to EJB3.0'/><author><name>Shashank Tiwari</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.shanky.org/images/st_headtshot_2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22274983.post-114649422032550983</id><published>2006-05-01T07:34:00.000-07:00</published><updated>2006-05-01T07:37:00.336-07:00</updated><title type='text'>JDBC4.0 - Better Design and Ease of Development</title><content type='html'>Read my article on JavaWorld -&lt;br /&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-05-2006/jw-0501-jdbc.html"&gt;http://www.javaworld.com/javaworld/jw-05-2006/jw-0501-jdbc.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This article discusses some of the design and performance improvements in JDBC 4.0 (JSR 221)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22274983-114649422032550983?l=approximatelyperfect.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://approximatelyperfect.blogspot.com/feeds/114649422032550983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22274983&amp;postID=114649422032550983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114649422032550983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114649422032550983'/><link rel='alternate' type='text/html' href='http://approximatelyperfect.blogspot.com/2006/05/jdbc40-better-design-and-ease-of.html' title='JDBC4.0 - Better Design and Ease of Development'/><author><name>Shashank Tiwari</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.shanky.org/images/st_headtshot_2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22274983.post-114030425284025718</id><published>2006-02-18T15:10:00.000-08:00</published><updated>2006-02-18T15:10:52.856-08:00</updated><title type='text'>Java NIO</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22274983-114030425284025718?l=approximatelyperfect.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://approximatelyperfect.blogspot.com/feeds/114030425284025718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22274983&amp;postID=114030425284025718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114030425284025718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114030425284025718'/><link rel='alternate' type='text/html' href='http://approximatelyperfect.blogspot.com/2006/02/java-nio.html' title='Java NIO'/><author><name>Shashank Tiwari</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.shanky.org/images/st_headtshot_2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22274983.post-114013329545241484</id><published>2006-02-16T15:41:00.000-08:00</published><updated>2006-02-18T05:34:20.653-08:00</updated><title type='text'>Java DAO Frameworks - ibatis, spring &amp; jing</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22274983-114013329545241484?l=approximatelyperfect.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://approximatelyperfect.blogspot.com/feeds/114013329545241484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22274983&amp;postID=114013329545241484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114013329545241484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114013329545241484'/><link rel='alternate' type='text/html' href='http://approximatelyperfect.blogspot.com/2006/02/java-dao-frameworks-ibatis-spring-jing.html' title='Java DAO Frameworks - ibatis, spring &amp; jing'/><author><name>Shashank Tiwari</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.shanky.org/images/st_headtshot_2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22274983.post-114009998440171016</id><published>2006-02-16T06:24:00.000-08:00</published><updated>2006-02-16T06:26:24.413-08:00</updated><title type='text'>Buy and Build - The emerging pattern!</title><content type='html'>In the past we have had buy vs build&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22274983-114009998440171016?l=approximatelyperfect.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://approximatelyperfect.blogspot.com/feeds/114009998440171016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22274983&amp;postID=114009998440171016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114009998440171016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114009998440171016'/><link rel='alternate' type='text/html' href='http://approximatelyperfect.blogspot.com/2006/02/buy-and-build-emerging-pattern.html' title='Buy and Build - The emerging pattern!'/><author><name>Shashank Tiwari</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.shanky.org/images/st_headtshot_2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22274983.post-114006131695035924</id><published>2006-02-15T19:40:00.000-08:00</published><updated>2006-02-15T19:41:56.966-08:00</updated><title type='text'>Client Oriented Service Assembly (COSA) - Beyond the rich client</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22274983-114006131695035924?l=approximatelyperfect.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://approximatelyperfect.blogspot.com/feeds/114006131695035924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22274983&amp;postID=114006131695035924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114006131695035924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114006131695035924'/><link rel='alternate' type='text/html' href='http://approximatelyperfect.blogspot.com/2006/02/client-oriented-service-assembly-cosa.html' title='Client Oriented Service Assembly (COSA) - Beyond the rich client'/><author><name>Shashank Tiwari</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.shanky.org/images/st_headtshot_2.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22274983.post-114000665997533445</id><published>2006-02-15T04:14:00.000-08:00</published><updated>2006-02-19T18:55:36.096-08:00</updated><title type='text'>Java Web User Interface Options</title><content type='html'>&lt;span style="font-size:85%;"&gt;This is an attempt to illustrate, discuss and compare the different options available within the Java (more specifically J2EE) stack to build web user interfaces. In this essay/article the attempt is first to understand the requirements on the basis of usability and functionality. After that the common UI related design patterns are discussed. Then a survey of the different available specifications and frameworks attempts to show how they could be used to design and construct the different types of user interfaces.Finally one is involved in some level of cyrstal ball gazing into the future of Java UI level paradigms.&lt;br /&gt;&lt;br /&gt;It might be important to define the scope of this article before we start illustrating the ideas. This article includes all posibilities related to a UI accessed through a web browser. It does not discuss other forms of UI access, namely desktop UI or device based UI. Further, this includes all possibilities within the usage of Java as the programming language and does not talk about cases where Java back-end code may be accessed through scripting language front-ends. It definitely does not discuss the web UI possibilities with other languages, which offer multiple alternatives to Java.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Usability &amp; Functionality&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;The concept of usability is explained well in an article titled - &lt;/span&gt;&lt;a href="http://www.useit.com/alertbox/20030825.html"&gt;&lt;span style="font-size:85%;"&gt;"Usability 101: Introduction to Usability"&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; - as the ease of use of a user interface and the utility (does it do what users need it to do?) that it provides. Thus if we were to summarize some of the desirable characterstics of a web user interface, it may be the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Interface for data input and output&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Layout of data in meaningful widgets and data holders&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Management of widget and data holders&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Management of different content types and multiple languages&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Navigation among interface components&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Action based on data and events&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Assembly of interface components, possibly from multiple sources&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Facilitation of multiple tasks concurrently&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Management of user session and state&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Integration with logic and data components in the other layers&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Continuous synchronization of the interface views with the data and model they represent&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Support for protocols used in internet based communications&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Integration with other applications at the client-side and the server-side&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Possibility of interactions with all the sensory elements of sight, hearing, touch, smell and taste ( Interaction with the sense of touch, smell and taste are almost impossible to achieve in a browser based scenario)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Ergonomic and intuitive appeal for better &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Human-computer_interaction"&gt;&lt;span style="font-size:85%;"&gt;Human Computer Interaction &lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;(Often difficult to define in a universal manner)&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Web UI Design Patterns&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Design patterns have become very popular after the &lt;a href="http://www.amazon.com/gp/product/0201633612/102-5303860-1074544?v=glance&amp;amp;n=283155"&gt;Gang of Four Book&lt;/a&gt;. In the last few years both creation of new patterns and adoption of design patterns has gained momentum.  In this section we will discuss some of the design patterns relevant to the user interface and the presentation tier.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;A good place to start might be &lt;a href="http://www.visi.com/%7Esnowfall/InteractionPatterns.html"&gt;The Interaction Design Patterns Page&lt;/a&gt;. There is a sea of information concerning the interface design patterns and links to other resources on this page.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Some of the J2EE presentation tier design patterns have been discussed as a part of an OnJava article on the topic. (url : &lt;a href="http://www.onjava.com/pub/a/onjava/2002/01/16/patterns.html"&gt;http://www.onjava.com/pub/a/onjava/2002/01/16/patterns.html&lt;/a&gt;) The patterns discussed are as follows:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;span name="intelliTxt" id="intelliTxt"&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Intercepting Filter&lt;/b&gt;: facilitates preprocessing and post-processing of a request.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Front Controller&lt;/b&gt;: provides a centralized controller for managing the handling of requests.&lt;/li&gt;&lt;li&gt;&lt;b&gt;View Helper&lt;/b&gt;: encapsulates logic that is not related to presentation formatting into Helper components.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Composite View&lt;/b&gt;: creates an aggregate View from atomic subcomponents.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Service To Worker&lt;/b&gt;: combines a Dispatcher component with the Front Controller and View Helper patterns.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Dispatch View&lt;/b&gt;: combines a Dispatcher component with the Front Controller and View Helper patterns, deferring many activities to View processing.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Microsoft has also collated a set of presentation tier design patterns in the context of its .Net framework. These patterns apply to the Java web UI as well.  The patterns enlisted as a part of the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpatterns/html/EspWebPresentationPatterns.asp"&gt;web presentation patterns&lt;/a&gt; are as follows :&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Observer &lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Page Controller &lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Front Controller &lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Model-View-Controller (MVC) &lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Application Controller&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;The new paradigm of asynchronous updates to the HTML DOM and client centric rich functionality, commonly labeled as AJAX and RIA, is affecting the web user interface concepts. Michael Mahemoff is collating together some of the good AJAX web user interface design patterns at &lt;a href="www.ajaxpatterns.org"&gt;www.ajaxpatterns.org&lt;/a&gt;. ( This is a good collection of thoughts on AJAX but it worries me when people start putting together best practices about concepts and frameworks which are not even stable to have its standards defined and understood comprehensively)&lt;/span&gt;    &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Web UI specifications in Java&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Java has multiple options to build web based user interfaces. Each of these specifications have evolved over the years and continue to do so as we speak. The focus on the web based UIs has moved from client-side to server-side and back and this has influenced the evolution of the specifications as well. The browser itself is capable of doing a lot of more things as compared to its initial version in the mid 90s. A notable feature of late is the implementation of the XMLHttpRequest object that facilitates AJAX based frameworks. Parallely we have learn't to include different content types in non-intrusive, reusable and configuration driven ways. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Though there is often a comparison on the superiority of one specification against the other, I personally believe that each of them have their place. Guess, without further delay, its time to start illustrating each of these specification.&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Java Applets&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Java Applets were the first web based Java user interfaces defined way back in 1995. Java Applets can easily be embedded into HTML. The JVM in the Java enabled web browser runs and manages the Applet life cycle. Applets mimic the functionality of a thick client over the web and thus provide a rich user interface. They were very popular initially but were criticized a lot for being slow, restricted in access only to servers where they originate from and issues related to the browser based JVMs. While many of these problems were real at that time, because of the restrictied bandwidth and the evolving technology, we have now come a full circle in embracing rich clients again. In fact the Flash based rich applications of today are the exact counterparts of the Java Applets, in that they run within a controlled VM in the browser and rely on the client side capabilities. It is unfortunate that Java Applets never lost their popularity.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Information on Java Applets can be found at &lt;/span&gt;&lt;a href="http://java.sun.com/applets/"&gt;&lt;span style="font-size:85%;"&gt;http://java.sun.com/applets/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; and at &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Java_applet"&gt;&lt;span style="font-size:85%;"&gt;http://en.wikipedia.org/wiki/Java_applet&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Java Servlets, JSP &amp;amp; JSTL &lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;As the web became popular in the low bandwith era and ecommerce applications began to grow one saw the advent of the Common Gateway Interface or the CGI. CGI was a great begining but it had its scalability issues and Java Servlets came in at the right time to offer a good way to put plain text and dynamic functionality into a web application. Java Servlets had its own problem though, because one had to put in all the html elements as prints within the Java code. JSP came as an answer to separate the dynamic content and the static html elements and allowed Java developers and HTML designers to work side by side. A little later, the MVC ( Model-View-Controller) design pattern gained traction in building web applications. &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Java Server Faces (JSF) - JSR 127&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Java Portlet - JSR 168&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Some Popular Frameworks to build Java Web Applications&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Apache Struts&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Spring Web Flow&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Tapestry&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Wicket&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Cocoon&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;MyFaces&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;DWR&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Echo&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Choosing the right specification and framework to build the Java Web UI&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Future of the Java Web UI&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22274983-114000665997533445?l=approximatelyperfect.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://approximatelyperfect.blogspot.com/feeds/114000665997533445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22274983&amp;postID=114000665997533445' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114000665997533445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22274983/posts/default/114000665997533445'/><link rel='alternate' type='text/html' href='http://approximatelyperfect.blogspot.com/2006/02/java-web-user-interface-options.html' title='Java Web User Interface Options'/><author><name>Shashank Tiwari</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='20' src='http://www.shanky.org/images/st_headtshot_2.JPG'/></author><thr:total>1</thr:total></entry></feed>
