Comparison of server-side web frameworks: Difference between revisions
Appearance
Content deleted Content added
NubKnacker (talk | contribs) →General: Corrected current stable SPring version |
|||
Line 478: | Line 478: | ||
|- |
|- |
||
!{{rh}}| [[Spring Framework|Spring]] |
!{{rh}}| [[Spring Framework|Spring]] |
||
| 2.5 |
| 2.5.6 |
||
| [[Java (programming language)|Java]] |
| [[Java (programming language)|Java]] |
||
| [[Apache License|Apache]] |
| [[Apache License|Apache]] |
Revision as of 07:30, 30 January 2009
![]() | It has been suggested that List of web application frameworks, Talk:Comparison_of_web_application_frameworks#Merge_List_of_web_application_frameworks_into_Comparison_of_web_application_frameworks and User:The Wild Falcon be merged into this article. (Discuss) Proposed since September 2007. |
This is a comparison of notable web application frameworks.
General
Basic general information about the features
Comparison of features
Project | Language | Ajax | MVC framework | MVC Push/Pull | i18n & l10n? | ORM | Testing framework(s) | DB migration framework(s) | Security Framework(s) | Template Framework(s) | Caching Framework(s) | Form Validation Framework(s) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Agavi | PHP | Toolkit-independent | Yes | Push | Yes | multiple | Yes | No | Yes | multiple | Yes | Yes |
AIDA/Web | Smalltalk | Prototype, script.aculo.us | Yes | Gemstone/S, GLORP, etc. | SUnit | Yes | ||||||
Ajile | JavaScript | Yes | Yes | Push & Pull | Yes | jsUnit | Yes | Yes | ||||
Akelos | PHP | Prototype, script.aculo.us | Active record pattern | Push | Yes | Active record pattern | Unit Tests | Yes | Yes | Yes | Yes | |
Amhulio [12] | PHP | Yes | Yes | No | Yes | Yes | Yes | No | Yes | |||
Apache Click | Java | Yes | Yes | Pull | Yes | Hibernate and Cayenne | Velocity and JSP | Built-in validation | ||||
Apache Struts | Java | Yes | Yes | Push & Pull | Yes | Yes | Unit Tests | Yes | Yes | |||
Apache Wicket | Java | Yes | Modular event driven | Pull | Yes | Yes | Yes | Yes | Yes | Yes | ||
Aranea | Java | Yes | Pull | Yes | Yes | mapping-applications using contributions from users to advantage | ||||||
AutomatWeb | PHP | jQuery | Yes | Push & Pull | Yes | AutomatWeb Storage | Unit Tests | Yes | ACL-based | Yes | Yes | Yes |
BFC | ASP.NET | Yes | Not mandatory | Push & Pull | Yes | through active data dictionary | Unit Tests | SQL Server, Oracle, DB2, Sybase, MySQL | security groups and rules | Yes | metadata and result sets | data dictionary-driven |
CakePHP | PHP | Prototype, script.aculo.us | Active record pattern | Push | Yes | Active record pattern | Unit Tests | Yes | ACL-based | Yes | Yes | Yes |
Camping | Ruby | No | Yes | Push | No | Active record pattern | via Mosquito | Yes | No | Yes | No | No |
Catalyst | Perl | Toolkit-independent (REST & JSON support, specific plugins for Prototype etc.) | Yes | Push in its most common usage | Yes | DBIx::Class, Rose::DB, etc. | [1] | ACL-based, external engines, etc. | Template::Toolkit, HTML::Template, HTML::Mason, etc. | Memcached, TurckMM, shared memory, etc. | HTML::FormValidator, etc. | |
CJAX | PHP | Yes | Yes | Push & Pull | Yes | framework extension | Unit Tests | framework extension | framework extension | framework extension | framework extension | |
CherryPy | Python | Yes | No, because unittest and doctest are standard Python modules | CherryTemplate | Yes | |||||||
CodeIgniter | PHP | framework extension | Modified active record pattern | Push | Yes | framework extension | Unit Tests | No | Yes | Yes | Yes | Yes |
ColdBox | ColdFusion | Toolkit-independent | Yes | Push & Pull (via Viewlets) | Yes | Transfer & Reactor | Unit Tests | No | via plugins or interceptors | ColdBox Cache Manager and externally pluggable. | Yes | |
Django | Python | Yes | Yes | Push | Yes | Django ORM | Yes | No (plugin exists, might be merged into trunk when more stable and feature complete) | ACL-based | Yes | Yes | Yes |
DotNetNuke | ASP.NET | Yes | No | Pull | Yes | SubSonic, NHibernate | Unit Tests | Yes | ACL-based (OpenID, LiveID, Active Directory, LDAP, CardSpace, ASP.NET Forms Auth) | Yes | Pluggable | ASP.NET Validators, built-in API |
Drupal | PHP | jQuery | Yes[2][3] | multiple (CCK, QCubed[4]) | simpletest, devel | Schema API | OG, Node Privacy By Role, ACL, Taxonomy Access List | PHPTemplate, Smarty, XTemplate, others | builtin, memcache, APC | Form API | ||
eZ Components | PHP | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
Flex | Actionscript, MXML | No | FlexUnit | |||||||||
FUSE | PHP | Yes | Yes | Push | custom | Yes | SimpleTest | Yes | Yes | Yes | Yes | |
Fusebox | ColdFusion, PHP | Yes | Not mandatory | Push | No, custom | via lexicons for Transfer and Reactor | CFUnit, CFCUnit | multiple plugins available | via lexicon for ColdSpring | via qforms or built in cf validation | ||
Google Web Toolkit | Java, Javascript | Yes | Yes | ???, no direct data access | JUnit (too early), jsUnit (too difficult), Selenium (best) | No | ||||||
Grails | Groovy | Yes | Active record pattern | Push | Yes | GORM, Hibernate | Unit Test | multiple plugins(autobase, dbmigrate, etc.) | Yes | Yes | Yes | Yes |
Grok | Python | Yes | Yes | Pull | Yes | OODBMS called ZODB, SQLAlchemy, [[Storm (software)}|Storm]] | Unit Tests, Functional Tests | ZODB Generations | Yes | Yes | Yes | Yes |
IVY | PHP | Yes | MooTools | Push | No, still not completed | Yes | No | Yes | Yes | Yes | Yes | Data Dictionary |
ItsNat | Java | Yes | event driven | Push | using Java i18n | external and built-in | pluggable | pure HTML/SVG | page caching | normal Java | ||
IT Mill Toolkit | Java | GWT | Pull | Yes | Yes | JUnit, IT Mill Testing Tools | Yes | Yes | ||||
JBoss Seam | Java | Yes | Pull | Yes | JPA, Hibernate | JUnit, TestNG | JAAS integration | Facelets | Hibernate Validator | |||
Jelix | PHP 5 (>=5.2.0) | jQuery lib and ui | Yes | Push | Yes | Active record pattern | simpletest+qunit | ACL | Yes | Yes | Yes | |
jZeno [13] | Java | Yes | Yes | Pull | No, custom | Hibernate | JUnit, TestNG | role-based | Composite Pattern | Yes | Yes | |
Kiwiki [14] | Java | Yes | Yes | Push & Pull | Yes | Yes | Yes | Yes | Yes | |||
Kohana | PHP | Yes | Push | Yes | framework extension | unit_test module | File and SQLite Driver based caches | Yes | ||||
Lainsoft Forge [15] | Java, JRuby | Toolkit-independent | Yes | via plug-in | via plug-in | via plug-in | Yes | Yes | Yes | |||
LecoWeb [16] | Java | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
Lift | Scala | Yes | Yes | Yes | Yes | |||||||
Lion [17] | PHP | Yes | Yes | Push & Pull | Yes | No | Yes | No | Yes | Yes | Yes | Yes |
Mach-II | ColdFusion | via CF or any JavaScript Library | Yes | Push | via custom plugin | Transfer, Reactor, Hibernate | CFUnit, CFCUnit | via plugin | ColdSpring | |||
Midgard | PHP | jQuery | MidCOM | Pull | Yes | Midgard | PHPUnit | datagard | ACL-based | PHP and TAL | memcache | Yes |
MonoRail | ASP.NET | Prototype | Active record pattern | Push | Yes | Active record pattern | Unit Tests | via ASP.NET Forms Authentication | Yes | Yes | Yes | |
Nette | PHP 5 (>=5.1.4) | Toolkit-independent | Not mandatory | Push & Pull | Yes | via extension dibi | Yes | ACL-based | multiple | multiple | client + server, extensible | |
Nitro | Ruby | jQuery | Yes | Push | Yes | Og | RSpec | (automatic) | Yes | Yes | Yes | Yes |
onTap | ColdFusion | native features + Prototype + script.aculo.us | optional | Push | Yes | DataFaucet [18] | CFUnit, CFCUnit, MXUnit | DataFaucet has potential - supports multiple db platforms | Members onTap Plugin | very extensible | Yes | client + server, extensible |
OpenXava | Java | Yes | Model Driven | Yes | JPA, Hibernate and EJB2 CMP | JUnit | Hibernate tools | uses JSR-168 portal security | UI is automatically generated | uses portal and JPA caching | Yes | |
Orinoco | PHP | Toolkit-independent | Yes | Push & Pull | Yes | |||||||
Pal [19] | PHP 5 | Ajax Components | Yes | Push & Pull | No, roll your own | optional Active record pattern, arbitrary SQL | No, still not completed | via plugins and filters | via plugins | allows both memcache and caching pages | built-in extensible validation | |
PHPulse | PHP 5 | Yes | Yes | Push | Yes | No, integrated DB objects | No, optional | Yes | Yes | Yes | Yes | |
PRADO | PHP 5 | Active Controls | Yes | Push | Yes | Active record pattern, SQLMap | PHPUnit, SimpleTest, Selenium | modular and role-based ACL | Yes | Yes | Yes | |
Pylons | Python | helpers for Prototype and script.aculo.us | Yes | Push | Yes | SQLObject, SQLAlchemy | via nose | pluggable (mako, genshi, myghty, kid, etc.) | Beaker cache (memory, memcached, file, databases) | preferred formencode | ||
Qcodo | PHP 5 | built-in | QControl | Push | Yes | Code Generation-based | Inherent | QForm and QControl | Yes | Yes | ||
QCubed | PHP 5 | built-in | QControl | Push | Yes | Code Generation-based | Inherent | QForm and QControl | Yes | Yes | ||
RIFE | Java | DWR (Java) | Yes | Push & Pull | Yes | Yes | Out of container testing | Yes | Yes | Integration with Terracotta | Yes | |
RoxPHP [20] | PHP 5 | Yes | Push | Yes | Active record pattern | No | Yes | Yes | Yes | |||
Ruby on Rails | Ruby | Prototype, script.aculo.us | ActiveRecord, Action Pack | Push | Localization Plug-in | ActiveRecord | Unit Tests, Functional Tests and Integration Tests | Yes | Plug-in | Yes | Yes | Yes |
Seaside | Smalltalk | Prototype, script.aculo.us, etc. | Yes | GLORP, Gemstone/S, etc. | Unit Tests, SUnit | No, intentionally | Magritte | |||||
SilverStripe/Sapphire | PHP 5 (>=5.2) | Prototype, script.aculo.us | Active record pattern | Push & Pull | Yes | Active record pattern | Unit Tests | (Automatic) | incl. OpenID | (object oriented) | Yes | Yes |
Spring | Java | Yes | Yes | Hibernate, iBatis, etc | Acegi | Commons Tiles, Velocity, etc. | ehcache etc. | Commons Validator | ||||
Spring.Net [21] | .NET Framework | |||||||||||
Stripes | Java | Yes | Yes | Push | Yes | Hibernate | Yes | framework extension | Yes | Yes | ||
Symfony | PHP 5 | Prototype, script.aculo.us, Unobtrusive Ajax with UJS and PJS plugins | Yes | Push | Yes | Propel, Doctrine | Yes | Plugin exists (alpha code, though) | plugin | Yes | Yes | Yes |
Tapestry | Java | Yes | Yes | Pull | Yes | integrated with Hibernate (tapestry-hibernate module) | tapestry5-acegi library | Yes | built-in validation system | |||
Tigermouse | PHP 5 | it is mostly Ajax-only framework | Active record pattern | Push | Yes | Active record pattern | No | No, Multiple RBMSes and access libraries supported | through intercepting filters (ACL-based, customizable) | Yes | No | Yes |
TurboGears | Python | MochiKit | Yes | Push | Yes | SQLObject, SQLAlchemy | nose | No | pluggable authentication providers, user->group<-permissions schema | pluggable: Kid, Genshi, any Buffet-compatible engine | No | TurboGears widgets, ToscaWidgets, both utilizing FormEncode |
Wavemaker | JavaScript (client), Java (server) | Dojo Toolkit | Yes | Push | Dojo Toolkit | Hibernate (Java) | JUnit | Hibernate (Java) | Spring Security, Acegi, Role-based access control | Dojo Toolkit | Dojo Toolkit | Regular expression, schema-driven validation |
web2py | Python | Yes | Yes | Push | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
WebObjects | Java | Yes | Yes | Push & Pull | Yes | EOF | WOUnit (JUnit), TestNG, Selenium | in Project WONDER | Yes | Yes | Yes | |
Widgetplus | JavaScript | it is mostly Ajax-only framework | Yes | Push & Pull | Yes | No | Yes | No | Yes | Yes | Yes | Yes |
Yii | PHP 5 (>=5.1.0) | jQuery-based js lib and widgets | Yes | Push & Pull | Yes | Active record pattern | PHPUnit | modular and role-based ACL | Yes | Yes | Yes | |
Zend | PHP 5 (>=5.1.4) | Toolkit-independent | Yes | Push | Yes | Table and Row data gateway | Unit Tests | Yes | ACL-based | Yes | Yes | Yes |
ZK | Java | 170+ Ajax components | Yes | Push & Pull | Yes | any ORM frameworks, such as Hibernate, TopLink | Unit Tests, Functional Tests | plugin, like Acegi | DSP, Velocity, JSP, others pluggable | Yes | constraint, event validation, others pluggable | |
Zope 2 | Python | Yes | Pull | Yes | native OODBMS called ZODB, SQLObject, SQLAlchemy | Unit Tests | ACL-based | Yes | Yes | CMFFormController | ||
Zope 3 | Python | via add-on products, e.g. Plone w/KSS | Yes | Pull | Yes | native OODBMS called ZODB, SQLObject, SQLAlchemy | Unit Tests, Functional Tests | ZODB generations | ACL-based | Yes | Yes | Yes |
ztemplates | Java JDK 1.5 or newer | integrates YUI, Google etc. with annotations | Yes | Push, multiple actions per URL | standard Java | use any J2EE ORM framework | Unit Tests | annotation based | Velocity, FreeMarker, JSP, others pluggable | AJAX validation on server and form state update (YUI, JSON) | ||
Project | Language | Ajax | MVC framework | MVC Push/Pull | i18n & l10n? | ORM | Testing framework(s) | DB migration framework(s) | Security Framework(s) | Template Framework(s) | Caching Framework(s) | Form Validation Framework(s) |