Matt RaibleMatt Raible is a writer with a passion for software. Connect with him on LinkedIn.

The Angular Mini-Book The Angular Mini-Book is a guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.

Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.

For book updates, follow @angular_book on Twitter.

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.
You searched this site for "mvc". 279 entries found.

You can also try this same search on Google.

Large sites powered by Java web frameworks and Tiles + WebWork

Yesterday, I delivered a Comparing Web Frameworks seminar that included Struts, Spring MVC, WebWork, JSF and Tapestry. This was for a client that's in the process of re-working an extremely high traffic site (50+ servers currently) from Servlets + JSPs to a web framework. They love the idea of Tiles (and know how to use it) as well as plan on integrating many Ajax features.

We quickly eliminated Struts because of ActionForms since they're planning on moving to persisted POJOs. Spring MVC and JSF had a notch up because they work with Tiles. However, JSF has reportedly had scalability issues. Furthermore, it's the most-complained about framework out there. One attendee noted how she was impressed with the low number of complaints about WebWork.

WebWork doesn't integrate with Tiles (but probably will soon) and they were concerned about SiteMesh performance with large pages (1MB + of text). While I believe SiteMesh can do almost everything that Tiles can do, I also agree that Tiles is a good technology. Furthermore, the "advanced features" of SiteMesh to be largely undocumented, which can be a barrier for adopting it as a "development standard".

Spring MVC was dinged because it doesn't have built-in Ajax support like WebWork and Tapestry (via Tacos). However, it's support for Tiles might just make it the one they choose - especially since they plan on using Spring in the middle-tier/backend. While they loved the idea of Tapestry, they didn't think they could afford the learning curve and I don't know enough about the @Border component to verify if it has all of Tile's functionality.

One interesting thing that came up was the list of high-volume sites using these various web frameworks. Tapestry seems to come out on top when you look at the list of well-known sites. However, I'm sure there are plenty I don't know about. If you know of high-volume sites using any of these five frameworks, please let me know. I'm looking for major sites with millions of hits per day. Here's my current list (extra points for fancy templating with SiteMesh/Tiles + Ajax widgets):

  • Struts: None that I know of off the top of my head, but I'm sure there are plenty.
  • Spring MVC: None that I know of.
  • WebWork: JavaBlogs (don't know if this exactly qualifies as high-volume, there aren't that many Java developers). WebWork also has a few products based on it (i.e. Jive, JIRA, Confluence), but these companies also employ WebWork committers.
  • JSF: None that I know of.
  • Tapestry: NHL.com, TheServerSide.com (similar comments to JavaBlogs) and Zillow.com.

Thanks!

Related: How To use Tiles like SiteMesh and SourceLab's Web application technologies comparison (with performance numbers!).

Update: FWIW, I figured out How to use Tiles with WebWork and wrote a short howto for doing dependency injection with SiteMesh.

Posted in Java at Feb 15 2006, 11:55:57 AM MST 30 Comments

Learn about WebWork 2.2 and Tapestry 4.0 via Podcasts

podcastI've said in the past that Podcasts are boring. I still think this is true for the most part, but that's largely because most of them aren't appealing to me. However, this week I've found a couple of good ones. Tapestry 4.0 and WebWork 2.2 have recently been released, and now you can listen to interviews with both project's primary developers: Patrick Lightbody of WebWork and Howard Lewis Ship of Tapestry/Hivemind. The easiest way I've found to subscribe and listen to podcasts is to download iTunes. You also may want to checkout The Java Podcasters article on ONJava.com.

I hope to upgrade both Equinox and AppFuse to these releases in the near future, I just need to find the time. I also hope to change the default web framework in AppFuse to Struts Action 2 as part of AppFuse 2.0. This will allow us to ditch Struts and WebWork and only support 4 web frameworks (SA2, Spring MVC, Tapestry and JSF).

Posted in Java at Jan 26 2006, 08:22:02 AM MST 4 Comments

Spring Workshops from Virtuas

I'm pleased to announce that my company, Virtuas, has decided to start offering public workshops for many prominent open source projects. These include Spring, Geronimo, Tomcat, Hibernate and JSF/MyFaces.

I'll be teaching the first Spring course in Denver February 21st - 24th, followed by one in Boston in mid-March. It should be a fun class, especially since I'm adding a bunch of stuff regarding Spring 2.0. Since I know you're going to ask the price -- and it's not posted on virtuas.com -- it's $2,495 per person for 1-4 people from the same company/group/etc., $1,995 per person for five or more people.

In other Virtuas news, we've recently signed partnership agreements with IBM and Covalent. We also re-worked our site with Andreas Viklund's "andreas08" theme from Open Source Web Design. Thanks to the power of Drupal, all we had to do to change the whole site was modify one PHP template and one CSS file. Thanks to both Andreas and Drupal for vastly simplifying our new look-n-feel.

Update: It looks like Andreas's theme has been made into a Drupal theme. Nice.

Posted in Java at Jan 24 2006, 05:06:14 PM MST 10 Comments

2005 - A Year in Review

2005 was quite a year for me. I found my dream job, after contemplating what's next in my career only a few months earlier. I attended TheServerSide Symposium in March and created some great memories with James Goodwill. There's nothing like losing all your money and then winning it all back at 6 in the mornin'.

Other March highlights include:

April was a fun month, and started off with a me heading to work for Microsoft. The joke worked so well it was picked up by news.com. DU repeated as NCAA Champions (again). The MySQL Conference and wine-tasting with Julie (for our 5th anniversary) rounded out the month.

May was a whirlwind month, where I headed to Norway after barely renewing my expired passport on time. My PowerBook died on the way over, but I still had a great time. I was featured on TheServerSide and started planning AppFuse 2.0.

The summer flew by: I got biled by Hani, toured with the "Bomb Squad" at JavaOne, drove through Yellowstone, bought a new bike, learned more about Ruby and Rails at OSCON (and learned how much fun a smackdown can be), and watched Jack turn 1.

Then things got busy: I had a great time at Java in Action, started The Bus Project, and enjoyed the beauty of Keystone with Bender and Snyder at the Colorado Software Summit.

To round out the year, I traveled and attended conferences like I was possessed (New Jersey, NFJS, San Francisco and Florida). Abbie turned 3, Roller 2.0 was released and the WebWork joined Struts after a multi-year rivalry.

Phew, it's been quite a year folks. Here's to 2006 being even better! My goals for the year? Happiness, health and more car bombs with family and friends. ;-)

Posted in Roller at Dec 30 2005, 12:13:25 PM MST 1 Comment

The future of the DisplayTag Library

From the displaytag-devel mailing list:

I am sorry if I am asking a stupid question but is there any activity going on in the project? There are no new releases for almost a year... Neither are there any news on the project page. In our project we have modified the 1.0 version a bit and would like to share these changes with the community.

Fabrizio's response:

See http://displaytag.sourceforge.net now ;)

the website was frozen to the last 1.0 release, also due an extensive refactoring to the build/documentation system (migration to maven 2, splitting of optional modules and examples, ...) but activity on the project never stopped.

1.1 is now near, and I switched the default homepage to the 1.1 documentation. Warning: it's not released yet, but nightly builds are up.

The biggest feature of 1.1 has to be the ability to do external sorting and paging.

If you're looking for Ajax support in the displaytag, look no further than AjaxTags. I haven't been able to get ajax:displayTag working in my projects because I'm using a newer version of Prototype. However, it looks like the next version of AjaxTags supports the latest version of Prototype.

In addition to AjaxTags, you can also use AjaxAnywhere. Here's the code you'll need to do that (after adding AjaxAnywhere to your project):

<aa:zone name="userTable">

<display:table name="users" class="list" requestURI="" id="userList" export="true" 
    excludedParams="*" pagesize="5" sort="list">
    <display:column property="id" sort="true" href="editUser.html"
        paramId="id" paramProperty="id" titleKey="user.id"/>
    <display:column property="firstName" sort="true" titleKey="user.firstName"/>
    <display:column property="lastName" sort="true" titleKey="user.lastName"/>
    <display:column titleKey="user.birthday" sort="true" sortProperty="birthday">
        <fmt:formatDate value="${userList.birthday}" pattern="${datePattern}"/>
    </display:column>
</display:table>

</aa:zone>

<script type="text/javascript">
    ajaxAnywhere.getZonesToReaload = function() { return "userTable" }
    ajaxAnywhere.onAfterResponseProcessing = function() { replaceLinks() }
    function replaceLinks() {
        // replace all the links in <thead> with onclick's that call AjaxAnywhere
        var sortLinks = $('userList').getElementsByTagName('thead')[0]
                                     .getElementsByTagName('a');
        ajaxifyLinks(sortLinks);
        if (document.getElementsByClassName('pagelinks').length > 0) {
            var pagelinks = document.getElementsByClassName('pagelinks')[0]
                                    .getElementsByTagName('a');
            ajaxifyLinks(pagelinks);
        }
    }
    function ajaxifyLinks(links) {
        for (i=0; i < links.length; i++) {
            links[i].onclick = function() {
                ajaxAnywhere.getAJAX(this.href); 
                return false;
            }
        }
    }
    replaceLinks();
</script>

Libraries used in above code: AjaxAnywhere 1.0.2, DisplayTag 1.0 and Prototype 1.4.0_pre4. You can also see a demo online or download the code.

Posted in Java at Dec 29 2005, 10:46:56 AM MST 26 Comments

Struts 1.2.8 has client-side validation issues just like 1.2.7

This weekend, I upgraded AppFuse from Struts 1.2.4 to 1.2.8. After failing to upgrade to 1.2.7, I was a little leary of this release - for good reason. It turns out, the 1.2.8 release has the same client-side validation issue as 1.2.7. The good news is it's a Commons Validator issue this time, and you can fix it by upgrading to Commons Validator 1.2.0 (it ships with 1.1.4).

If you're using custom client-side validators, you might have to patch your functions. Here's what I did to mine:

- oTwoFields = eval('new ' + formName.value + '_twofields()');
+ oTwoFields = eval('new ' + retrieveFormName(form) + '_twofields()');

Also, if you'd like to use Spring MVC with Commons Validator 1.2.0, you'll need to patch springmodules-validator. Or you can just download the one from AppFuse's CVS.

Posted in Java at Dec 19 2005, 04:55:37 PM MST 2 Comments

RE: Oracle donates ADF Faces to Apache MyFaces

I read the news initially on the AMIS Technology blog, which points to the original news-breaker on the IT-eye Weblog. This is huge for the JSF community IMO. The main compelling feature behind component-based frameworks is components. Without components, there's not much point in them.

By christmas a website and mailing list will be available for the incubator project. You will also be able to download the source code. By New Year a subversion repository should be available with the source code. And the intention is to move out of incubator by JavaOne 2006, which I think is in May.

So why is Oracle doing this? Well it's obvious that Java needs to have a good component based framework to compete with .NET. And Oracle believes that JSF can be this Framework, but a good implementation is needed, which is what ADF Faces provides.

What does ADF Faces, or better Apache Faces Cherokee contain? More than 100 components, an Html AJAX renderkit (but it doesn't use HttpXmlRequest, but iframes), a dialog framework, personalization, skinning, and a lot more.

I wonder if Oracle has a solution for the "everything is a post" problem? ;-)

JSF is cool, and easy to be productive in, but so is Tapestry, WebWork and Spring MVC. I find it somewhat ironic that the Struts committers turned down Shale as Struts 2.0, but they voted in WebWork.

I think component-based frameworks might be the way of the future. However, after playing with OpenLaszlo for the past few weeks - I can't help but think that this is what component-based frameworks should be. Many components, easy to use, and the output is a rich-client out-of-the-box. In addition to the Flash output they have now, I've heard rumblings that OpenLaszlo may support other outputs in the future (i.e. XHTML/Ajax).

It's pretty cool to see continued excitement and innovation in Java. Competition is good, and will only make each of these frameworks stronger and easier to use.

Posted in Java at Dec 12 2005, 02:26:45 PM MST 8 Comments

Equinox 1.5 Beta 1 Released

This release is mainly to test out dependency downloading using Maven 2's Ant tasks. In addition, a few bugs have been fixed, but there's quite a few more on the roadmap. I plan to fix all of these before releasing 1.5 in a couple weeks.

Please test out this release if you have a chance. One of the nice things about using Maven 2's Ant Tasks, is you can download Maven 2 and generate your Eclipse or IDEA (possibly even Netbeans) project files using "mvn eclipse:eclipse" or "mvn idea:idea". You can also use Maven 2 to build and test things if you like. The only thing that doesn't currently work with Maven is the web tests with Cargo. I can try to get those working if there's enough demand. For now, you'll have to use Ant if you want to test the UI.

The download is much smaller now - barely over 1MB vs. ~20MB for 1.4. Most of the size comes from the Maven 2 Ant Tasks - which is a 869KB JAR. Of course, I could've made the distribution even smaller and required you to download the JAR and put it in $ANT_HOME/lib, but I decided to make things easier by including it.

For more information about installing the various options, see the README.txt file. Currently, you can use the following persistence frameworks:

  • Hibernate
  • iBatis
  • JDO (JPOX
  • OJB
  • Spring JDBC

And a number of web frameworks too, as listed below with links to demos.

Update: I forget to mention that I owe a big thanks to Carlos Sanchez. He (and the other Maven developers) have been great in helping to resolve all the issues I found with transitive dependencies.

Posted in Java at Nov 26 2005, 04:51:48 PM MST 4 Comments

RE: Is Ajax gonna kill the web frameworks?

James is asking "Is Ajax gonna kill the web frameworks?" From my personal experience, I can definitely say that Ajax is going to give web frameworks a run for their money. However, I doubt it's going to completely replace web frameworks. There's many companies out there that aren't willing to commit to developing a JavaScript-only UI - not even Google. GMail has a non-javascript version that's used when you disable JavaScript in your browser.

That being said, I'd much rather work on a project that embraces and uses Ajax over a web framework. However, even if you decide to use Ajax, doesn't the same framework proliferation problem still exist? DWR, Scriptaculous, Prototype, AjaxTags, AjaxAnywhere, Rico, Dojo, JSON-RPC - which Ajax frameworks are the best ones to use? If one of these projects joins Apache, will it become the de-facto Ajax framework like Struts did? ;-)

Posted in Java at Nov 16 2005, 11:16:57 AM MST 8 Comments

Simon begins "The Journey"

It's pretty cool to see that Simon is going to begin a quest to find the best web framework to fit his needs.

Struts, WebWork, Stripes, Spring MVC, Wicket, Tapestry, JSF, etc, or even rolling your own. With so many J2EE web application frameworks to choose from, how do you decide which one to use? Several articles (e.g. JavaServer Faces vs Tapestry) and presentations (e.g. Comparing Web Frameworks) already exist, but they generally concentrate on a small subset of the available frameworks.

This can be a daunting task, but it sounds like he's got a good plan:

Clearly this is a massive task so, to reduce the scope, I'm going to focus on what it takes to build a read only web application. If I were to hazard a guess, I'd say that the 80-20 rule applies. 80% of a web application is read only and 20% is interactive (e.g. HTML forms, AJAX, etc). Of course, this is changing with technologies like AJAX, but we're still on the upward curve. Traditionally, that 20% is the most complex and is an area where many web application frameworks claim their unique selling points. For this reason, I may iterate over the evaluation process to take into account how the frameworks help web developers build interactive webapps. For now, I'm going to look at whether the frameworks make doing the 80% easy.

Notice that Simon has added a couple frameworks that I haven't worked with: Stripes and Wicket. It should be interesting to see his findings. Not every framework is designed to do the same thing, so it'll be cool to find out which one Simon thinks is the best for read-only applications.

Posted in Java at Nov 02 2005, 03:18:32 PM MST 3 Comments