Intro to Memtech: Java - Use cases and Web Frameworks

If you've already read my last post, you're already setup with a Java development environment.  Hopefully, you've take the time to explore a bit on your own.  In this post I'll talk briefly about where you could expect to use Java as well as what choices you have in terms of web application frameworks for the JVM.

You can do anything with Java, really nearly anything. You can make a game or embed software in device. At my day job, we write Java that controls the HVAC systems of our clients via the Niagara framework. Java also is used extensively for server side back-end programming for sites such as Twitter. Java has had a role in mobile applications for a long time, most recently in its role with Android (more on that later). You can make a web application with it, either via applets (not exactly modern, but not useless) or using a web application framework.

I don't claim to have deep insight into selecting a Java web framework, but out of the choices there are four I'll mention.  JSF or Java Server Faces, Apache Struts, and Spring appear from a cursory search to be the most broadly used, although the error bars on my meta-survey are pretty wide. The dark horse in this race is a cute framework named Play. All of these purport to be MVC style web frameworks, although many others are closer to adapted desktop or MVVM style application development. My ill informed suggestion is to check out Spring and Play first, based purely on watching a single presentation on the former and a couple of articles on the later.

Alternatively, the JVM supports a number of other languages, complete with their own web frameworks such as Groovy on Grails or Scala using Lift.  Clojure, jRuby, and Jython also have associated web frameworks. Each language/framework combination is going to express a different opinion on software development. Correspondingly, some of these combinations are going to be much better or worse depending on your needs and style (e.g. enterprise vs. startup, dynamic vs. functional) so make sure to take your time evaluating at least a few of the major contenders before investing a lot of time in any.

Hopefully you've now got an idea of where you should be looking for tools and ideas for future projects.  In my next post I'll be taking a look at setting up an Android development environment in preparation for our code sample.