views:

898

answers:

14

Here's my new project: an open canvas, right in front of me. In a few days, I will start to code a big web application. It will start small, with few modules, only myself as developer and engineer, but hopefully it will grow and grow.

Even though I am an active Java Developer, It's been a while since I last created a Web Application from scratch. At the time, Struts and J2EE was the way to go, but I see a lot of new frameworks, new libraries raising everyday.

What I ask here is for your advice: what do you currently use for web development, why do you think it's relevant and if you would choose the same tools if you were starting on a new project. Everything counts: from tips on the UI to the backend. Common gotchas, patterns, everything you can think may be relevant.

I am a Java developer and, I am naturally inclined to do everything using Java-related technologies (J2SE, J2EE, Groovy, Grails, JRuby, Jython, JWhatever, and so on...), but please be welcome to post whatever you use, being related to Java or not.

My goal here is to build a bucket of what people are doing and why they are doing to help me evaluate which way should I go, and which I shouldn't - and why. After all, it's not everyday that you have such freedom to decide.

Thanks in advance!

+2  A: 

I find Google App Engine really comfortable (Python as server language, Google Datastore as db, many ready-to-use objects, such as memcache, user APIs, etc.).

friol
Thx, I created a soapboxx-alike app using App Engine, it's here: http://coury.appspot.com. However, this may have to be installed on a customer's server, so it won't be a possibility, unfortunately. I also created a medium range webapp using Python and raw CGI, but that's a lot of work! :)
kolrie
A: 

For java development, Eclipse or Net beans; For html/css/js netbeans and at times Dreamweaver to check browser support for properties; For xml/xslt/xsi Altova xml spy; For PNG files Adobe fireworks; For all general purpose text editing GVIM. And not to forget 'Firebug' and 'IE developer toolbar'.

Why they rock? code completion for java, tracability and WYSIWYG experience is what make them tick for me. Tomorrow if a new tool comes out and has a shorter learning curve, I wouldn't be shy!

questzen
+2  A: 

I'm a fan of ColdFusion, which is built on top of Java, but with a more RAD/Agile focus. There's the reference implementation from Adobe, but there are also three open source implementations of the CFML language which are available.

ColdFusion is particularly good at being a "Glue" technology, providing access to Flash/ActionScript services, Java Integration, .Net integration, web services, and SQL database integration using any JDBC datasource.

Adam N
I have to tell you: I always twisted my nose when heard about ColdFusion. I remember that from the days back when I coded in ASP and CF was only a more expensive, less available competitor :) Now you saying it's built on top of java is a major reason to take another look. Thanks a lot!
kolrie
+3  A: 

I've been using TurboGears lately and absolutely love it. It competes with Django and Ruby On Rails for rapid development, but has a more flexible backend. That is, it's more of a collection of best-of-breed components that have been made to play well together than a single monolithic framework. You can easily swap out the object relational mapper if you need to, or replace the page templating language with something else without rewriting your entire application.

The real "where have you been all my life?" moment came when I spend about two minutes adding an AJAX autocomplete field to a form. I had to write a function to answer the AJAX requests and add a new field that called that function, and it worked perfectly the first time. I'd always wanted to play with AJAX but was a bit intimidated, and my first experience with it could not have been easier.

It has a 20 minute tutorial to make a functional wiki. Even if you don't think you'll be using it, read it or watch it and see how easy such a thing can be.

Just Some Guy
Will definitely do that. I have heard about TurboGears some time ago, when I started maintaining a Python / Raw CGI app. Thanks for your input!
kolrie
+6  A: 

I use Django. The main reason for me is the automatic administration generation. What this means is that I create model objects, and Django tools generate SQL DDL for me -- I apply that to my database and Django has a fully generated Adminstration website for me to perform CRUD operations on that data. It chooses good controls based on the types, has search, etc. If I want to tweak the admin, there are classes I can create to do that.

Django has a lot of other great benefits (simple templating language, uses python, easy to host, etc), but the admin is the reason I chose it over RoR.

Lou Franco
The *one* reason I looked elsewhere from Django is that it really wants you to do things its way. For instance, adding a new property to a user at the time required re-implementing the user admin section to handle it. It may be different now but I'd already switched.
Just Some Guy
A: 

lift because it's an oppertunity to code in Scala

John Nilsson
+2  A: 

I use Ramaze, a beautiful Ruby web framework. Couple that with M4DBI, a Ruby ORM built on top of Ruby DBI. For JS work, jQuery wherever possible (I avoid plain JS like the plague!). PostgreSQL is my choice of database.

I have experience with Rails, mod_ruby, JDBC, ODBC, PHP, and "plain" sites (HTML, CSS, JS), but I am quite happy with the above-listed software for my web app stack.

I believe Ramaze can run under JRuby.

Pistos
FYI - pistos is trying to plug his own framework, cause we all know THAT is EXACTLY what we need.
also, i installed it on my vista server and it gave me a virus. thanks
how can you be sure?
Genericrich
@Genericrich: Here's a post describing a successful run of Ramaze under JRuby: http://www.jamesbritt.com/2008/11/11/ramaze-warbler-glassfish
Pistos
+2  A: 

Are you talking about a "web site" or something richer like a back office app (lots of controls and fields and complicated workflows)?

If you're talking a web site, something more content oriented, and you want to stick with Java, I vote Stripes -- it embraces HTTP in all (well, at least most) of its glory, it stays out of your way, and is very flexible. We've written a very nice framework on top of Stripes leveraging JSP and JSP Tag Files. We can knock out screens quite quickly.

If you have a more complicated application in mind, then consider one of the component frameworks. Wicket is quite popular, but JSF has a bunch of tooling and widgets, and works with Seam, which gets rave reviews.

Will Hartung
My application is corporate-oriented and will be complex, so I think your second options fit better. I am taking a look at Wicket.
kolrie
+2  A: 

If I were starting from scratch, I'd still look around at the team I was working with and see what they know. Platform that no one on your team knows is the wrong platform. For production work, stick with what you know, unless there is a pressing reason that you have to change.

If you are determined to learn something new, I'd suggest Ruby on Rails. In just a couple of years it has become one of the major milestones to compare other systems to: "I use xyz, it's like rails except..." That alone speaks to the kind of impact it has had on the web development community. Ruby gives you a hugely powerful server-side scripting language, and Rail allows for rapid development of high quality applications.

acrosman
Thanks, acrosman. That's the beauty of it: there's no team yet. I am creating the first PoC for the app and it will grow from there. So I have to start small but aiming on a maintainable growth. ;-) Thanks for the input!
kolrie
+1  A: 

If you want something clean and simple, don't use Rails, use Ramaze.

Fabian Buch
+1  A: 

Stripes is an awesome framework because it lets you build your application quickly and easily, without maintaining configuration files. Typically, you create an action bean (a simple Java class) to do the work and a JSP to display the results. You add validation with annotations. You get built-in type conversion for most common types, and can easily write your own type converters. Interceptors give you a simple way to address crosscutting concerns. In short, I find that it's one of the most simple, intuitive, consistent, powerful and flexible frameworks out there.

For the rest of your stack, it's really up to you. It's easy to integrate Spring, Hibernate, JPA, AJAX, security, unit testing, etc. with Stripes. If you'd like to see some sample code that demonstrates all of this, get the code bundle for the Stripes book and open the index.html file for a list of all the examples. That way, you can get an idea of what a Stripes application looks like.

Best of luck in your project!

Frederic Daoud
Thanks for your comments. Stripes in definitely one of the frameworks I'll look into!
kolrie
+3  A: 

I currently work with ASP.NET MVC and I'm going to switch my professional development efforts to it in the coming months. I had contact with many languages and web frameworks over the past decade. C# is a very mature and powerful language, and the asp.net mvc framework just seems to click with me. I will continue to use jquery as my main javascript library. I will also continue to play with python / django and other solutions in my spare time.

I just like c# so that's probably the reason why I chose asp.net mvc over other solutions.

Seems like MS finally came up with something decent (considering the asp.net web forms mess... quite a feat)

kitsune
+1  A: 

Grails (http://grails.org) is probably the most interesting new web development environment today. It is built on top of the following:

Spring
Groovy
Sitemesh
Hibernate
Quartz

It's also extensible with plugins

http://grails.org/Plugins

You can watch a few of the screencasts to get an idea of the functionality.

http://grails.org/Grails+Screencasts

The one very appealing thing to me was that Grails can easily be integrated into an existing Java/JSP project. There's no need to rewrite the project from scratch.

I think Ruby on Rails would be a great option if you didn't have any legacy code or if Java wasn't your day job.

Finally, I like the idea of being able to deploy Grails projects to application servers such as Tomcat, WebSphere, Glassfish, etc. These systems are extremely reliable and they scale well.

I marked this one as my answer because that's the way I went. ;)
kolrie
+1  A: 

I considered most of the choices everyone put up here: Ruby on Rails, Groovy on Grails, Python/Django and then the Spring MVC framework in Java. I eventually picked Ruby on Rails.

Why? First, I needed the ability to develop features rapidly and with flexibility. That doesn't speak in Java's favor. Second, I needed to develop a website not a back office application. So the UI didn't need to be super sophisticated. A simple CRUD application that wraps the database and paints it on the browser was good enough. That decisively ruled out Java.

So I'm left with a dynamic language framework. I tried out Groovy. Since I didn't need interoperability with Java, that ruled out a plus in its favor (yes, I know JRuby is interoperable but Groovy still has '{}'). After prototyping something in Groovy, I noticed that the stack traces were not always enlightening for debugging, and the performance was slow compared to my Rails prototype. That eliminated Groovy.

Thought about using Python/Django, but I noticed that it would be more difficult to bring others on board, since the sheer volume of books in RoR >> Python/Django. Perhaps I could have given Python/Django further consideration, but it was time to make a decision, and I choose RoR.

Alan
Thanks for the insight, Alan
kolrie