Seperating presentation and application logic

I was browsing around for different web application development solutions. I'm well acquainted with PHP and I have done some separation of logic with Smarty. Smarty only does so much, and basically is just a cleaner way of presenting data. Almost a hybrid PHP. After a few articles dealing with J2EE and struts I found some php solutions for making a Model View Controller based web app. I also learned a little about Java based web design, which is interesting as well.

As far as the Java solution goes there are really two decent ways of doing it from what I understand. You could use Struts or Tapestry. Struts functions as a controller object for the web application realm. If you want to know more about the Model View Controller paradigm check out wikipedia's answer. Basically through the use of an XML configuration file you tell struts what to do with actions from the UI. The view and model stay the same as any web application would. In this case the view is generally written in JSP and the model done with servlets. I am by know means an expert so if you want to know more check out there website.

After surfing around for a little while I found allot of complaint about the learning curve for Struts. I also read some complaints about the functionality. There was an interesting explanation of Tapestry on slashdot. Tapestry gives a level of abstraction to the web application. You know longer refer to URI's or add query parameters, you think of everything in terms of objects, methods, and parameters. This seems like a very helpful way of programming a large project. It is just one more step in making a web application more like a desktop app.

Well, I'm a PHP guy, and I don't see my self migrating to Java anytime soon. There are two good solutions out there that I know of currently: WACT and PHPTAL. Both seem like good solutions. WACT looks a little more feature rich, but PHPTAL is based on Zope. Zope a very mature application server. It too is an option for a large scale project. I'll be sure to experiment with the PHP implementations in all of my free time. I'm just looking for the cleanest and most extensible way to create a web application. At the very least looking at all of these techniques gets the mind into learning mode.