CINXE.COM

Apache Tapestry - Wikipedia

<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Apache Tapestry - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"92f3bd4f-a8cb-45e1-8526-215b7137b21c","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Apache_Tapestry","wgTitle":"Apache Tapestry","wgCurRevisionId":1216811581,"wgRevisionId":1216811581,"wgArticleId":2052309,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Articles with short description","Short description is different from Wikidata","Wikipedia articles needing clarification from February 2024","All articles with vague or ambiguous time","Vague or ambiguous time from March 2018","Apache Software Foundation projects","Java enterprise platform","Web frameworks"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Apache_Tapestry","wgRelevantArticleId":2052309, "wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q617093","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"], "GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.tablesorter.styles":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","site","mediawiki.page.ready","jquery.tablesorter","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp", "ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.quicksurveys.init","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=ext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cjquery.tablesorter.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=en&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=site.styles&amp;only=styles&amp;skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Apache_Tapestry_logo.svg/1200px-Apache_Tapestry_logo.svg.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="609"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Apache_Tapestry_logo.svg/800px-Apache_Tapestry_logo.svg.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="406"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Apache_Tapestry_logo.svg/640px-Apache_Tapestry_logo.svg.png"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="325"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Apache Tapestry - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Apache_Tapestry"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Apache_Tapestry&amp;action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Apache_Tapestry"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&amp;feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Apache_Tapestry rootpage-Apache_Tapestry skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page&#039;s font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&amp;returnto=Apache+Tapestry" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&amp;returnto=Apache+Tapestry" title="You&#039;re encouraged to log in; however, it&#039;s not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&amp;returnto=Apache+Tapestry" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=Apache+Tapestry" title="You&#039;re encouraged to log in; however, it&#039;s not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-Notable_features" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Notable_features"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Notable features</span> </div> </a> <ul id="toc-Notable_features-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Hello_World_Example" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Hello_World_Example"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Hello World Example</span> </div> </a> <ul id="toc-Hello_World_Example-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Class_transformation" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Class_transformation"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Class transformation</span> </div> </a> <ul id="toc-Class_transformation-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Client-side_support" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Client-side_support"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Client-side support</span> </div> </a> <ul id="toc-Client-side_support-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Core_principles" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Core_principles"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Core principles</span> </div> </a> <ul id="toc-Core_principles-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Criticism" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Criticism"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Criticism</span> </div> </a> <ul id="toc-Criticism-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Relation_to_other_frameworks" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Relation_to_other_frameworks"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Relation to other frameworks</span> </div> </a> <ul id="toc-Relation_to_other_frameworks-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-History" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#History"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>History</span> </div> </a> <ul id="toc-History-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>References</span> </div> </a> <button aria-controls="toc-References-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle References subsection</span> </button> <ul id="toc-References-sublist" class="vector-toc-list"> <li id="toc-Notes" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Notes"> <div class="vector-toc-text"> <span class="vector-toc-numb">10.1</span> <span>Notes</span> </div> </a> <ul id="toc-Notes-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Apache Tapestry</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 11 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-11" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">11 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Apache_Tapestry" title="Apache Tapestry – Czech" lang="cs" hreflang="cs" data-title="Apache Tapestry" data-language-autonym="Čeština" data-language-local-name="Czech" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Apache_Tapestry" title="Apache Tapestry – German" lang="de" hreflang="de" data-title="Apache Tapestry" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Apache_Tapestry" title="Apache Tapestry – Spanish" lang="es" hreflang="es" data-title="Apache Tapestry" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%A2%D9%BE%D8%A7%DA%86%DB%8C_%D8%AA%D9%BE%D8%B3%D8%AA%D8%B1%DB%8C" title="آپاچی تپستری – Persian" lang="fa" hreflang="fa" data-title="آپاچی تپستری" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Apache_Tapestry" title="Apache Tapestry – French" lang="fr" hreflang="fr" data-title="Apache Tapestry" data-language-autonym="Français" data-language-local-name="French" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Apache_Tapestry" title="Apache Tapestry – Hungarian" lang="hu" hreflang="hu" data-title="Apache Tapestry" data-language-autonym="Magyar" data-language-local-name="Hungarian" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wikipedia.org/wiki/Apache_Tapestry" title="Apache Tapestry – Mongolian" lang="mn" hreflang="mn" data-title="Apache Tapestry" data-language-autonym="Монгол" data-language-local-name="Mongolian" class="interlanguage-link-target"><span>Монгол</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/Apache_Tapestry" title="Apache Tapestry – Japanese" lang="ja" hreflang="ja" data-title="Apache Tapestry" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/Tapestry" title="Tapestry – Russian" lang="ru" hreflang="ru" data-title="Tapestry" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/Tapestry" title="Tapestry – Tajik" lang="tg" hreflang="tg" data-title="Tapestry" data-language-autonym="Тоҷикӣ" data-language-local-name="Tajik" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Tapestry" title="Tapestry – Chinese" lang="zh" hreflang="zh" data-title="Tapestry" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q617093#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Apache_Tapestry" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Apache_Tapestry" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Apache_Tapestry"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Apache_Tapestry&amp;action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Apache_Tapestry"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Apache_Tapestry&amp;action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Apache_Tapestry" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Apache_Tapestry" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Apache_Tapestry&amp;oldid=1216811581" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Apache_Tapestry&amp;action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&amp;page=Apache_Tapestry&amp;id=1216811581&amp;wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FApache_Tapestry"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FApache_Tapestry"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&amp;page=Apache_Tapestry&amp;action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Apache_Tapestry&amp;printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:Apache_Tapestry" hreflang="en"><span>Wikimedia Commons</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q617093" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Open-source web application framework</div> <style data-mw-deduplicate="TemplateStyles:r1257001546">.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme) div:not(.notheme){background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table tr{display:table-row!important}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}</style><table class="infobox vevent"><caption class="infobox-title summary">Apache Tapestry</caption><tbody><tr><td colspan="2" class="infobox-image logo"><span class="mw-default-size" typeof="mw:File/Frameless"><a href="/wiki/File:Apache_Tapestry_logo.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/7/76/Apache_Tapestry_logo.svg/220px-Apache_Tapestry_logo.svg.png" decoding="async" width="220" height="112" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/7/76/Apache_Tapestry_logo.svg/330px-Apache_Tapestry_logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/76/Apache_Tapestry_logo.svg/440px-Apache_Tapestry_logo.svg.png 2x" data-file-width="881" data-file-height="447" /></a></span></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Programmer" title="Programmer">Original author(s)</a></th><td class="infobox-data">Howard Lewis Ship</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Programmer" title="Programmer">Developer(s)</a></th><td class="infobox-data"><a href="/wiki/Apache_Software_Foundation" class="mw-redirect" title="Apache Software Foundation">Apache Software Foundation</a></td></tr><tr style="display: none;"><td colspan="2" class="infobox-full-data"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1257001546"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">5.8.4<sup id="cite_ref-wikidata-58b52d0c2d06efd3bf5fbbf98f9542844e0fc25f-v18_1-0" class="reference"><a href="#cite_note-wikidata-58b52d0c2d06efd3bf5fbbf98f9542844e0fc25f-v18-1"><span class="cite-bracket">&#91;</span>1<span class="cite-bracket">&#93;</span></a></sup>&#160;<span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q617093?uselang=en#P348" title="Edit this on Wikidata"><img alt="Edit this on Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span> / 2024-02-06; 9 months ago</div></td></tr><tr style="display:none"><td colspan="2"> </td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Repository_(version_control)" title="Repository (version control)">Repository</a></th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git;">Tapestry Repository</a></span></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Written in</th><td class="infobox-data"><a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Operating_system" title="Operating system">Operating system</a></th><td class="infobox-data"><a href="/wiki/Cross-platform" class="mw-redirect" title="Cross-platform">Cross-platform</a> (<a href="/wiki/Java_Virtual_Machine" class="mw-redirect" title="Java Virtual Machine">Java Virtual Machine</a>)</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_categories#Categorization_approaches" title="Software categories">Type</a></th><td class="infobox-data"><a href="/wiki/Web_application_framework" class="mw-redirect" title="Web application framework">Web application framework</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_license" title="Software license">License</a></th><td class="infobox-data"><a href="/wiki/Apache_License_2.0" class="mw-redirect" title="Apache License 2.0">Apache License 2.0</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="https://tapestry.apache.org/">tapestry<wbr />.apache<wbr />.org</a></span></td></tr></tbody></table> <p><b>Apache Tapestry</b> is an <a href="/wiki/Open-source_software" title="Open-source software">open-source</a> component-oriented<sup class="noprint Inline-Template" style="margin-left:0.1em; white-space:nowrap;">&#91;<i><a href="/wiki/Wikipedia:Please_clarify" title="Wikipedia:Please clarify"><span title="The text near this tag may need clarification or removal of jargon. (February 2024)">clarification needed</span></a></i>&#93;</sup> <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a> <a href="/wiki/Web_application_framework" class="mw-redirect" title="Web application framework">web application framework</a> conceptually similar to <a href="/wiki/JavaServer_Faces" class="mw-redirect" title="JavaServer Faces">JavaServer Faces</a> and <a href="/wiki/Apache_Wicket" title="Apache Wicket">Apache Wicket</a>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">&#91;</span>2<span class="cite-bracket">&#93;</span></a></sup> Tapestry was created by Howard Lewis Ship,<sup class="noprint Inline-Template" style="white-space:nowrap;">&#91;<i><a href="/wiki/Wikipedia:Manual_of_Style/Dates_and_numbers#Chronological_items" title="Wikipedia:Manual of Style/Dates and numbers"><span title="The time period mentioned near this tag is ambiguous. (March 2018)">when?</span></a></i>&#93;</sup> and was adopted by the <a href="/wiki/Apache_Software_Foundation" class="mw-redirect" title="Apache Software Foundation">Apache Software Foundation</a> as a top-level project in 2006.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">&#91;</span>3<span class="cite-bracket">&#93;</span></a></sup> </p><p>Tapestry emphasizes simplicity, ease of use, and developer productivity. It adheres to the <a href="/wiki/Convention_over_Configuration" class="mw-redirect" title="Convention over Configuration">Convention over Configuration</a> paradigm, eliminating almost all <a href="/wiki/XML" title="XML">XML</a> configuration.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">&#91;</span>4<span class="cite-bracket">&#93;</span></a></sup> Tapestry uses a modular approach to web development by having a strong <a href="/wiki/UI_data_binding" title="UI data binding">binding</a> between each <a href="/wiki/User_interface" title="User interface">user interface</a> component (object) on the web page and its corresponding <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a> class. This component-based architecture borrows many ideas from <a href="/wiki/WebObjects" title="WebObjects">WebObjects</a>.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">&#91;</span>5<span class="cite-bracket">&#93;</span></a></sup> </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Notable_features">Notable features</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=1" title="Edit section: Notable features"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <dl><dt>Live Class Reloading</dt> <dd>Tapestry monitors the file system for changes to Java page classes, component classes, service implementation classes, HTML templates and component property files, and it hot-swaps the changes into the running application without requiring a restart. This provides a very short code-save-view feedback cycle that is claimed to greatly improve developer productivity.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">&#91;</span>6<span class="cite-bracket">&#93;</span></a></sup></dd> <dt>Component-based</dt> <dd>Pages may be constructed with small nestable components, each having a template and a component class. Custom components are purportedly trivial to construct.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">&#91;</span>7<span class="cite-bracket">&#93;</span></a></sup></dd> <dt>Convention over configuration</dt> <dd>Tapestry uses naming conventions and annotations, rather than XML, to configure the application.<sup id="cite_ref-Drobiazko_2012,_p._7_8-0" class="reference"><a href="#cite_note-Drobiazko_2012,_p._7-8"><span class="cite-bracket">&#91;</span>8<span class="cite-bracket">&#93;</span></a></sup></dd> <dt>Spare use of HTTPSession</dt> <dd>By making minimal use of the HTTPSession, Tapestry is designed to be highly efficient in a clustered, session-replicated environment.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">&#91;</span>9<span class="cite-bracket">&#93;</span></a></sup></dd> <dt>Post/Redirect/Get</dt> <dd>Most form submissions follow the <a href="/wiki/Post/Redirect/Get" title="Post/Redirect/Get">Post/Redirect/Get</a> (PRG) pattern, which reduces multiple form submission accidents and makes URLs friendlier and more bookmarkable, along with enabling the browser Back and Refresh buttons to operate normally.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">&#91;</span>10<span class="cite-bracket">&#93;</span></a></sup></dd> <dt>Inversion of Control (IoC)</dt> <dd>Tapestry is built on a lightweight <a href="/wiki/Inversion_of_Control" class="mw-redirect" title="Inversion of Control">Inversion of Control</a> layer with similarities to <a href="/wiki/Google_Guice" title="Google Guice">Google Guice</a>, but designed to make nearly all aspects of Tapestry's behavior configurable and replaceable.<sup id="cite_ref-Drobiazko_2012,_p._7_8-1" class="reference"><a href="#cite_note-Drobiazko_2012,_p._7-8"><span class="cite-bracket">&#91;</span>8<span class="cite-bracket">&#93;</span></a></sup></dd></dl> <div class="mw-heading mw-heading2"><h2 id="Hello_World_Example">Hello World Example</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=2" title="Edit section: Hello World Example"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A minimal, templated Tapestry application needs only three files: </p> <dl><dt>HelloWorld.tml</dt> <dd>The (X)HTML template for the /helloworld page. Tapestry templates can contain any well-formed (X)HTML markup.</dd></dl> <div class="mw-highlight mw-highlight-lang-xml mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">&lt;!DOCTYPE html&gt;</span> <span class="nt">&lt;html</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">&quot;http://www.w3.org/1999/xhtml&quot;</span><span class="w"> </span> <span class="w"> </span><span class="na">xmlns:t=</span><span class="s">&quot;http://tapestry.apache.org/schema/tapestry_5_3.xsd&quot;</span><span class="nt">&gt;</span> <span class="nt">&lt;body&gt;</span> <span class="w"> </span><span class="nt">&lt;p&gt;</span>Hello,<span class="w"> </span>${username}<span class="nt">&lt;/p&gt;</span> <span class="nt">&lt;/body&gt;</span> <span class="nt">&lt;/html&gt;</span> </pre></div> <dl><dt>HelloWorld.java</dt> <dd>The page class associated with the template. Here, it merely provides a *username* property that the template can access.</dd></dl> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kn">package</span><span class="w"> </span><span class="nn">org.example.demo.pages</span><span class="p">;</span> <span class="cm">/** A page class (automatically associated with the template file of the same name) */</span> <span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">HelloWorld</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="cm">/** An ordinary getter */</span> <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getUsername</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="s">&quot;World&quot;</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> </pre></div> <dl><dt>web.xml</dt> <dd>The <a href="/wiki/Java_servlet" class="mw-redirect" title="Java servlet">servlet</a> application <a href="/wiki/Deployment_Descriptor" class="mw-redirect" title="Deployment Descriptor">Deployment Descriptor</a>, which installs Tapestry as a servlet filter.</dd></dl> <div class="mw-highlight mw-highlight-lang-xml mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span> <span class="cp">&lt;!DOCTYPE web-app</span> <span class="cp"> PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;</span> <span class="cp"> &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;</span> <span class="nt">&lt;web-app&gt;</span> <span class="w"> </span><span class="nt">&lt;display-name&gt;</span>Tapestry<span class="w"> </span>Example<span class="nt">&lt;/display-name&gt;</span> <span class="w"> </span><span class="nt">&lt;context-param&gt;</span> <span class="w"> </span><span class="cm">&lt;!-- Tell Tapestry 5 where to look for pages, components and mixins --&gt;</span> <span class="w"> </span><span class="nt">&lt;param-name&gt;</span>tapestry.app-package<span class="nt">&lt;/param-name&gt;</span> <span class="w"> </span><span class="nt">&lt;param-value&gt;</span>org.example.demo<span class="nt">&lt;/param-value&gt;</span> <span class="w"> </span><span class="nt">&lt;/context-param&gt;</span> <span class="w"> </span><span class="nt">&lt;filter&gt;</span> <span class="w"> </span><span class="cm">&lt;!-- Define the Tapestry servlet filter --&gt;</span> <span class="w"> </span><span class="nt">&lt;filter-name&gt;</span>app<span class="nt">&lt;/filter-name&gt;</span> <span class="w"> </span><span class="nt">&lt;filter-class&gt;</span>org.apache.tapestry5.TapestryFilter<span class="nt">&lt;/filter-class&gt;</span> <span class="w"> </span><span class="nt">&lt;/filter&gt;</span> <span class="w"> </span><span class="nt">&lt;filter-mapping&gt;</span> <span class="w"> </span><span class="cm">&lt;!-- Tell the servlet container which requests to send to the Tapestry servlet filter --&gt;</span> <span class="w"> </span><span class="nt">&lt;filter-name&gt;</span>app<span class="nt">&lt;/filter-name&gt;</span> <span class="w"> </span><span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span> <span class="w"> </span><span class="nt">&lt;/filter-mapping&gt;</span> <span class="nt">&lt;/web-app&gt;</span> </pre></div> <div class="mw-heading mw-heading2"><h2 id="Class_transformation">Class transformation</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=3" title="Edit section: Class transformation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Tapestry uses bytecode manipulation to transform page and component classes at runtime. This approach allows the page and component classes to be written as simple <a href="/wiki/Plain_Old_Java_Object" class="mw-redirect" title="Plain Old Java Object">POJOs</a>, with a few naming conventions and annotations potentially triggering substantial additional behavior at class load time. Tapestry versions 5.0, 5.1 and 5.2 used the Javassist bytecode manipulation library. Subsequent versions replaced Javassist with a new bytecode manipulation layer called <i>Plastic</i> that is based on <a href="/wiki/ObjectWeb_ASM" title="ObjectWeb ASM">ObjectWeb ASM</a>.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">&#91;</span>11<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">&#91;</span>12<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Client-side_support">Client-side support</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=4" title="Edit section: Client-side support"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Tapestry 5 versions up through 5.3 bundled the <a href="/wiki/Prototype_JavaScript_Framework" title="Prototype JavaScript Framework">Prototype</a> and <a href="/wiki/Script.aculo.us" class="mw-redirect" title="Script.aculo.us">script.aculo.us</a> JavaScript frameworks, along with a Tapestry-specific library, so as to support Ajax operations as first-class citizens. Third party modules are available to integrate jQuery instead of, or in addition to, Prototype/Scriptaculous. </p><p>Starting with version 5.4, Tapestry includes a new JavaScript layer that removes built-in components' reliance on Prototype, allowing jQuery or another JavaScript framework to be plugged in.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">&#91;</span>13<span class="cite-bracket">&#93;</span></a></sup> </p><p>Version 5.4 also introduces support for JavaScript <i>modules</i> using the RequireJS module loading system. </p> <div class="mw-heading mw-heading2"><h2 id="Core_principles">Core principles</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=5" title="Edit section: Core principles"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The Tapestry project documentation cites four "principles" that govern all development decisions for Tapestry, starting with version 5 in 2008:<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">&#91;</span>14<span class="cite-bracket">&#93;</span></a></sup> </p> <ul><li>Static Structure, Dynamic Behavior—page and component structure is essentially static, eliminating the need to construct (and store in session memory) large page and component trees.</li> <li>Adaptive API—the framework is designed to adapt to the code, rather than having the code adapt to the framework</li> <li>Differentiate Public vs. Internal APIs—all APIs are explicitly "internal" (private) except those that are necessarily public.</li> <li>Ensure Backwards Compatibility—The Tapestry developers are reportedly committed to ensuring that upgrading to the latest version of Tapestry is always easy.</li></ul> <div class="mw-heading mw-heading2"><h2 id="Criticism">Criticism</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=6" title="Edit section: Criticism"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Tapestry has been criticized as not being backward-compatible across major versions, especially noted in the transition from version 4 to version 5, where no clean migration path was available for existing applications.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">&#91;</span>15<span class="cite-bracket">&#93;</span></a></sup> Project team members have acknowledged this as a major problem for Tapestry's users in the past, and backward compatibility was made a major design goal for Tapestry going forward. From early on in the development of version 5, backward compatibility was listed as one of Tapestry's four new "Core Principles", and two of the other three were intended to make the evolution of the framework possible without sacrificing backward compatibility. Project team members claim that all Tapestry releases since 5.0 have been highly backward compatible. </p><p>Early criticisms of Tapestry 5 also mentioned documentation as a shortcoming. Project members now claim that this deficiency has been largely addressed with a thoroughly revised and updated User's Guide and other documentation. </p><p>Since version 5.0, Tapestry has bundled the Prototype and Scriptaculous JavaScript libraries. According to Howard Lewis Ship, in the 2008-2009 timeframe these were reasonable choices. Since then, however, Prototype's popularity has declined, and jQuery's has risen dramatically. In response, the Tapestry community developed modules that allowed jQuery to be used in addition to, or instead of, Prototype. Meanwhile, the current version of Tapestry, 5.4, removes the dependency on Prototype entirely, replacing it with a compatibility layer into which either jQuery or Prototype (or potentially any other JavaScript framework) can be plugged. </p> <div class="mw-heading mw-heading2"><h2 id="Relation_to_other_frameworks">Relation to other frameworks</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=7" title="Edit section: Relation to other frameworks"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>According to Howard Lewis Ship, Tapestry was initially conceived as an attempt to implement in Java some of the general concepts and approaches found in WebObjects, which was at that time written in <a href="/wiki/Objective-C" title="Objective-C">Objective-C</a> and closed-source.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">&#91;</span>16<span class="cite-bracket">&#93;</span></a></sup> </p><p><a href="/wiki/Apache_Wicket" title="Apache Wicket">Apache Wicket</a> was developed as a response to the complexity of early versions of Tapestry, according to Wicket originator Jonathan Locke.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">&#91;</span>17<span class="cite-bracket">&#93;</span></a></sup> </p><p><a href="/wiki/Facelets" title="Facelets">Facelets</a>, the default view technology in <a href="/wiki/JavaServer_Faces" class="mw-redirect" title="JavaServer Faces">JavaServer Faces</a>, was reportedly inspired by early versions of Tapestry, as an attempt to fill the need for "a framework like Tapestry, backed by JavaServer Faces as the industry standard".<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">&#91;</span>18<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">&#91;</span>19<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="History">History</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=8" title="Edit section: History"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <table class="wikitable sortable"> <tbody><tr> <th>Version</th> <th>Date</th> <th>Description </th></tr> <tr> <td style="color:black; background-color: #FDB3AB;" title="Old version, no longer maintained" data-sort-value="1.0"><span style="display: none;">Old version, no longer maintained:</span> 1.0 </td> <td>2000</td> <td>Developed by Howard Lewis Ship for internal use </td></tr> <tr> <td style="color:black; background-color: #FDB3AB;" title="Old version, no longer maintained" data-sort-value="2.0"><span style="display: none;">Old version, no longer maintained:</span> 2.0 </td> <td>2002-04</td> <td>First made available on <a href="/wiki/SourceForge" title="SourceForge">SourceForge</a> under the <a href="/wiki/GNU_Lesser_General_Public_License" title="GNU Lesser General Public License">GNU Lesser General Public License</a>.<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">&#91;</span>20<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td style="color:black; background-color: #FDB3AB;" title="Old version, no longer maintained" data-sort-value="3.0"><span style="display: none;">Old version, no longer maintained:</span> 3.0 </td> <td>2004-04</td> <td>The first release under Apache, as a Jakarta sub-project.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">&#91;</span>21<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td style="color:black; background-color: #FDB3AB;" title="Old version, no longer maintained" data-sort-value="4.0"><span style="display: none;">Old version, no longer maintained:</span> 4.0 </td> <td>2006-01</td> <td>Introduced support for JDK 1.5 annotations, a new input validation subsystem, and improved error reporting <sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">&#91;</span>22<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td class="templateVersion co" style="color:black; background-color: #FEF8C6;" title="Old version, yet still maintained" data-sort-value="5.0"><span style="display: none;">Old version, yet still maintained:</span> 5.0 </td> <td>2008-12</td> <td>A nearly complete rewrite from Tapestry 4, introducing a new POJO-based component model emphasizing convention over configuration, and replaced Hivemind with a new no-XML Inversion of Control layer. </td></tr> <tr> <td class="templateVersion co" style="color:black; background-color: #FEF8C6;" title="Old version, yet still maintained" data-sort-value="5.1"><span style="display: none;">Old version, yet still maintained:</span> 5.1 </td> <td>2009-04</td> <td>Performance and memory improvements, automatic GZIP compression, JavaScript aggregation, but remained backwards compatible to Tapestry 5.0. </td></tr> <tr> <td class="templateVersion co" style="color:black; background-color: #FEF8C6;" title="Old version, yet still maintained" data-sort-value="5.2"><span style="display: none;">Old version, yet still maintained:</span> 5.2 </td> <td>2010-12</td> <td>Added <a href="/wiki/Bean_Validation" title="Bean Validation">JSR 303 Bean Validation</a>.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">&#91;</span>23<span class="cite-bracket">&#93;</span></a></sup> Extended live class reloading to service implementations. Removed page pooling.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">&#91;</span>24<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td class="templateVersion co" style="color:black; background-color: #FEF8C6;" title="Old version, yet still maintained" data-sort-value="5.3"><span style="display: none;">Old version, yet still maintained:</span> 5.3 </td> <td>2011-11</td> <td>Added support for HTML5 doctype, JSR-330 annotations for injection,<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">&#91;</span>25<span class="cite-bracket">&#93;</span></a></sup> performance and memory improvements, new components, switched from JavaAssist to ASM bytecode manipulation </td></tr> <tr> <td class="templateVersion co" style="color:black; background-color: #FEF8C6;" title="Old version, yet still maintained" data-sort-value="5.3.1 - 5.3.8"><span style="display: none;">Old version, yet still maintained:</span> 5.3.1 - 5.3.8 </td> <td>2012-2014</td> <td>Bug fixes and minor enhancements </td></tr> <tr> <td class="templateVersion c" style="color:black; background-color: #D4F4B4;" title="Current stable version" data-sort-value="5.4-5.4.5"><span style="display: none;">Current stable version:</span> <b>5.4-5.4.5</b> </td> <td>2015-2019</td> <td>Major client-side enhancements. New JavaScript layer for switchable jQuery/Prototype support, uses Require.js for its JavaScript module system, <a href="/wiki/Twitter_Bootstrap" class="mw-redirect" title="Twitter Bootstrap">Twitter Bootstrap</a> for its default styling.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">&#91;</span>26<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td class="templateVersion c" style="color:black; background-color: #D4F4B4;" title="Current stable version" data-sort-value="5.5"><span style="display: none;">Current stable version:</span> <b>5.5</b> </td> <td>2020-03</td> <td>Current stable version. Support for Java 12 bytecode, Typescript, and Bootstrap 4. </td></tr></tbody></table> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=9" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Apache_Wicket" title="Apache Wicket">Apache Wicket</a></li> <li><a href="/wiki/Comparison_of_server-side_web_frameworks" title="Comparison of server-side web frameworks">Comparison of web frameworks</a></li> <li><a href="/wiki/Facelets" title="Facelets">Facelets</a></li> <li><a href="/wiki/Java_Platform,_Enterprise_Edition" class="mw-redirect" title="Java Platform, Enterprise Edition">Java EE</a></li> <li><a href="/wiki/Java_view_technologies_and_frameworks" title="Java view technologies and frameworks">Java view technologies and frameworks</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=10" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239549316">.mw-parser-output .refbegin{margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li{margin-left:0;padding-left:3.2em;text-indent:-3.2em}.mw-parser-output .refbegin-hanging-indents ul,.mw-parser-output .refbegin-hanging-indents ul li{list-style:none}@media(max-width:720px){.mw-parser-output .refbegin-hanging-indents>ul>li{padding-left:1.6em;text-indent:-1.6em}}.mw-parser-output .refbegin-columns{margin-top:0.3em}.mw-parser-output .refbegin-columns ul{margin-top:0}.mw-parser-output .refbegin-columns li{page-break-inside:avoid;break-inside:avoid-column}@media screen{.mw-parser-output .refbegin{font-size:90%}}</style><div class="refbegin" style=""> <ul><li><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite id="CITEREFDrobiazko2012" class="citation cs2">Drobiazko, Igor (2012), <a rel="nofollow" class="external text" href="https://web.archive.org/web/20141215032146/http://www.tapestry5book.com/"><i>Tapestry 5: Rapid web application development in Java</i></a>, Igor Drobiazko, p.&#160;482, archived from <a rel="nofollow" class="external text" href="http://www.tapestry5book.com/">the original</a> on 2014-12-15<span class="reference-accessdate">, retrieved <span class="nowrap">2013-01-20</span></span></cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Tapestry+5%3A+Rapid+web+application+development+in+Java&amp;rft.pages=482&amp;rft.pub=Igor+Drobiazko&amp;rft.date=2012&amp;rft.aulast=Drobiazko&amp;rft.aufirst=Igor&amp;rft_id=http%3A%2F%2Fwww.tapestry5book.com%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKolesnikov2008" class="citation cs2">Kolesnikov, Alexander (January 15, 2008), <a rel="nofollow" class="external text" href="http://www.packtpub.com/tapestry-5/book"><i>Tapestry 5: Building Web Applications: A step-by-step guide to Java Web development with the developer-friendly Apache Tapestry framework</i></a>, <a href="/wiki/Packt" title="Packt">Packt Publishing</a>, p.&#160;280, <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&#160;<a href="/wiki/Special:BookSources/978-1-84719-307-0" title="Special:BookSources/978-1-84719-307-0"><bdi>978-1-84719-307-0</bdi></a></cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Tapestry+5%3A+Building+Web+Applications%3A+A+step-by-step+guide+to+Java+Web+development+with+the+developer-friendly+Apache+Tapestry+framework&amp;rft.pages=280&amp;rft.pub=Packt+Publishing&amp;rft.date=2008-01-15&amp;rft.isbn=978-1-84719-307-0&amp;rft.aulast=Kolesnikov&amp;rft.aufirst=Alexander&amp;rft_id=http%3A%2F%2Fwww.packtpub.com%2Ftapestry-5%2Fbook&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFIok_Tong2007" class="citation cs2">Iok Tong, Ka (January 1, 2007), <i>Enjoying Web Development with Tapestry</i> (3rd&#160;ed.), p.&#160;497, <a href="/wiki/ASIN_(identifier)" class="mw-redirect" title="ASIN (identifier)">ASIN</a>&#160;<a rel="nofollow" class="external text" href="https://www.amazon.com/dp/B00262M3HS">B00262M3HS</a></cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Enjoying+Web+Development+with+Tapestry&amp;rft.pages=497&amp;rft.edition=3rd&amp;rft.date=2007-01-01&amp;rft_id=https%3A%2F%2Fwww.amazon.com%2Fdp%2FB00262M3HS%23id-name%3DASIN&amp;rft.aulast=Iok+Tong&amp;rft.aufirst=Ka&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLewis_Ship2004" class="citation cs2">Lewis Ship, Howard (2004), <i>Tapestry in Action</i>, <a href="/wiki/Manning_Publications" title="Manning Publications">Manning</a>, p.&#160;580, <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&#160;<a href="/wiki/Special:BookSources/1932394117" title="Special:BookSources/1932394117"><bdi>1932394117</bdi></a></cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Tapestry+in+Action&amp;rft.pages=580&amp;rft.pub=Manning&amp;rft.date=2004&amp;rft.isbn=1932394117&amp;rft.aulast=Lewis+Ship&amp;rft.aufirst=Howard&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></li></ul> </div> <div class="mw-heading mw-heading3"><h3 id="Notes">Notes</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=11" title="Edit section: Notes"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist"> <div class="mw-references-wrap mw-references-columns"><ol class="references"> <li id="cite_note-wikidata-58b52d0c2d06efd3bf5fbbf98f9542844e0fc25f-v18-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-wikidata-58b52d0c2d06efd3bf5fbbf98f9542844e0fc25f-v18_1-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://tapestry.apache.org/download.html">"Download"</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Download&amp;rft_id=https%3A%2F%2Ftapestry.apache.org%2Fdownload.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130122114626/http://devrates.com/post/show/345948/howard-lewis-ship-of-tapestry-interview-%5Bpart-1%5D">"Howard Lewis Ship of Tapestry interview &#91;part 1&#93; (2012-10-22)"</a>. Archived from <a rel="nofollow" class="external text" href="http://devrates.com/post/show/345948/howard-lewis-ship-of-tapestry-interview-%5Bpart-1%5D">the original</a> on 2013-01-22<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-01-28</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Howard+Lewis+Ship+of+Tapestry+interview+%5Bpart+1%5D+%282012-10-22%29&amp;rft_id=http%3A%2F%2Fdevrates.com%2Fpost%2Fshow%2F345948%2Fhoward-lewis-ship-of-tapestry-interview-%255Bpart-1%255D&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text">Drobiazko 2012, p. 1.</span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://tapestryjava.blogspot.com/2006/07/tapestry-5-updates.html">"Tapestry Central: Tapestry 5 Updates"</a>. 24 July 2006.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Tapestry+Central%3A+Tapestry+5+Updates&amp;rft.date=2006-07-24&amp;rft_id=http%3A%2F%2Ftapestryjava.blogspot.com%2F2006%2F07%2Ftapestry-5-updates.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text">Tapestry in Action - Preface by Howard Lewis Ship</span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://tapestry.apache.org/class-reloading.html">"Class Reloading - Apache Tapestry"</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Class+Reloading+-+Apache+Tapestry&amp;rft_id=http%3A%2F%2Ftapestry.apache.org%2Fclass-reloading.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text">Drobiazko 2012, p. 20.</span> </li> <li id="cite_note-Drobiazko_2012,_p._7-8"><span class="mw-cite-backlink">^ <a href="#cite_ref-Drobiazko_2012,_p._7_8-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Drobiazko_2012,_p._7_8-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">Drobiazko 2012, p. 7.</span> </li> <li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://tapestry.apache.org/performance-and-clustering.html">"Performance and Clustering - Apache Tapestry"</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Performance+and+Clustering+-+Apache+Tapestry&amp;rft_id=http%3A%2F%2Ftapestry.apache.org%2Fperformance-and-clustering.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://tapestry.apache.org/forms-and-validation.html">"Forms and Validation - Apache Tapestry"</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Forms+and+Validation+-+Apache+Tapestry&amp;rft_id=http%3A%2F%2Ftapestry.apache.org%2Fforms-and-validation.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://tawus.wordpress.com/2011/04/18/meeting-plastic/">"Meeting Plastic I: Introduction | Java Magic"</a>. 18 April 2011.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Meeting+Plastic+I%3A+Introduction+%7C+Java+Magic&amp;rft.date=2011-04-18&amp;rft_id=http%3A%2F%2Ftawus.wordpress.com%2F2011%2F04%2F18%2Fmeeting-plastic%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130618005639/http://mail-archive.ow2.org/asm/2011-04/msg00033.html">"&#91;asm&#93; Plastic: An ASM wrapper for Tapestry 5.3"</a>. Archived from <a rel="nofollow" class="external text" href="http://mail-archive.ow2.org/asm/2011-04/msg00033.html">the original</a> on 2013-06-18<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-02-21</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=%26%2391%3Basm%26%2393%3B+Plastic%3A+An+ASM+wrapper+for+Tapestry+5.3&amp;rft_id=http%3A%2F%2Fmail-archive.ow2.org%2Fasm%2F2011-04%2Fmsg00033.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://tapestryjava.blogspot.com/2012/10/zeroing-in-on-tapestry-54.html">"Tapestry Central: Zeroing in on Tapestry 5.4"</a>. 19 October 2012.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Tapestry+Central%3A+Zeroing+in+on+Tapestry+5.4&amp;rft.date=2012-10-19&amp;rft_id=http%3A%2F%2Ftapestryjava.blogspot.com%2F2012%2F10%2Fzeroing-in-on-tapestry-54.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://tapestry.apache.org/principles.html">"Principles"</a>. 2010-12-21. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20121012021755/http://tapestry.apache.org/principles.html">Archived</a> from the original on 12 October 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-10-12</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Principles&amp;rft.date=2010-12-21&amp;rft_id=http%3A%2F%2Ftapestry.apache.org%2Fprinciples.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130121232236/http://tapestry.1045711.n5.nabble.com/Tapestry5-future-compatiblity-td2431085.html">"Tapestry5 future compatiblity&#32;&#91;<i>sic</i>&#93;"</a>. 2009-04-30. Archived from <a rel="nofollow" class="external text" href="http://tapestry.1045711.n5.nabble.com/Tapestry5-future-compatiblity-td2431085.html">the original</a> on 2013-01-21<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-01-21</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Tapestry5+future+compatiblity%26%2332%3B%26%2391%3Bsic%26%2393%3B&amp;rft.date=2009-04-30&amp;rft_id=http%3A%2F%2Ftapestry.1045711.n5.nabble.com%2FTapestry5-future-compatiblity-td2431085.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130122114626/http://devrates.com/post/show/345948/howard-lewis-ship-of-tapestry-interview-%5Bpart-1%5D">"DevRates &#124; Howard Lewis Ship of Tapestry interview &#91;part 1&#93;"</a>. Archived from <a rel="nofollow" class="external text" href="http://devrates.com/post/show/345948/howard-lewis-ship-of-tapestry-interview-%5Bpart-1%5D">the original</a> on 2013-01-22<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-01-28</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=DevRates+%26%23124%3B+Howard+Lewis+Ship+of+Tapestry+interview+%26%2391%3Bpart+1%26%2393%3B&amp;rft_id=http%3A%2F%2Fdevrates.com%2Fpost%2Fshow%2F345948%2Fhoward-lewis-ship-of-tapestry-interview-%255Bpart-1%255D&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20040909074534/http://www.theserverside.com/news/thread.tss?thread_id=28162">"Wicket: Do we need yet another presentation layer framework?"</a>. <i>www.theserverside.com</i>. Archived from <a rel="nofollow" class="external text" href="http://www.theserverside.com/news/thread.tss?thread_id=28162">the original</a> on 9 September 2004<span class="reference-accessdate">. Retrieved <span class="nowrap">11 January</span> 2022</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=www.theserverside.com&amp;rft.atitle=Wicket%3A+Do+we+need+yet+another+presentation+layer+framework%3F&amp;rft_id=http%3A%2F%2Fwww.theserverside.com%2Fnews%2Fthread.tss%3Fthread_id%3D28162&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20070706220453/https://facelets.dev.java.net/">"Facelets: JavaServer Facelets"</a>. <i>facelets.dev.java.net</i>. Archived from <a rel="nofollow" class="external text" href="https://facelets.dev.java.net/">the original</a> on 6 July 2007<span class="reference-accessdate">. Retrieved <span class="nowrap">11 January</span> 2022</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=facelets.dev.java.net&amp;rft.atitle=Facelets%3A+JavaServer+Facelets&amp;rft_id=https%3A%2F%2Ffacelets.dev.java.net%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130113100928/http://www.jsfcentral.com/articles/facelets_1.html">"JSF Central - Inside Facelets Part 1: An Introduction"</a>. <i>www.jsfcentral.com</i>. Archived from <a rel="nofollow" class="external text" href="http://www.jsfcentral.com/articles/facelets_1.html">the original</a> on 13 January 2013<span class="reference-accessdate">. Retrieved <span class="nowrap">11 January</span> 2022</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=www.jsfcentral.com&amp;rft.atitle=JSF+Central+-+Inside+Facelets+Part+1%3A+An+Introduction&amp;rft_id=http%3A%2F%2Fwww.jsfcentral.com%2Farticles%2Ffacelets_1.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.theserverside.com/discussions/thread.tss?thread_id=12750">"Tapestry: Java Web Components Release 2.0 is Out"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2013-01-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Tapestry%3A+Java+Web+Components+Release+2.0+is+Out&amp;rft_id=http%3A%2F%2Fwww.theserverside.com%2Fdiscussions%2Fthread.tss%3Fthread_id%3D12750&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.theserverside.com/discussions/thread.tss?thread_id=25354">"Tapestry 3.0 Final Release"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2013-01-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Tapestry+3.0+Final+Release&amp;rft_id=http%3A%2F%2Fwww.theserverside.com%2Fdiscussions%2Fthread.tss%3Fthread_id%3D25354&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.theserverside.com/news/thread.tss?thread_id=38407">"Tapestry 4.0 Released"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2013-01-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Tapestry+4.0+Released&amp;rft_id=http%3A%2F%2Fwww.theserverside.com%2Fnews%2Fthread.tss%3Fthread_id%3D38407&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://blog.tapestry5.de/index.php/2010/01/04/tapestry-and-jsr-303-bean-validation-api/">"Tapestry and JSR-303 Bean Validation API"</a>. 2010-01-04. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100416154003/http://blog.tapestry5.de/index.php/2010/01/04/tapestry-and-jsr-303-bean-validation-api/">Archived</a> from the original on 16 April 2010<span class="reference-accessdate">. Retrieved <span class="nowrap">2010-03-13</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Tapestry+and+JSR-303+Bean+Validation+API&amp;rft.date=2010-01-04&amp;rft_id=http%3A%2F%2Fblog.tapestry5.de%2Findex.php%2F2010%2F01%2F04%2Ftapestry-and-jsr-303-bean-validation-api%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://tapestry.apache.org/2010/12/17/announcing-tapestry-52.html">"Announcing Tapestry 5.2"</a>. 2010-12-17. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20121114182121/http://tapestry.apache.org/2010/12/17/announcing-tapestry-52.html/">Archived</a> from the original on 14 November 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-11-14</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Announcing+Tapestry+5.2&amp;rft.date=2010-12-17&amp;rft_id=http%3A%2F%2Ftapestry.apache.org%2F2010%2F12%2F17%2Fannouncing-tapestry-52.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://tapestry.apache.org/using-jsr-330-standard-annotations.html">"Using JSR 330 standard annotations - Apache Tapestry"</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Using+JSR+330+standard+annotations+-+Apache+Tapestry&amp;rft_id=http%3A%2F%2Ftapestry.apache.org%2Fusing-jsr-330-standard-annotations.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> <li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20121114180615/http://tapestry.apache.org/javascript-rewrite.html">"JavaScript Rewrite"</a>. Archived from <a rel="nofollow" class="external text" href="https://tapestry.apache.org/javascript-rewrite.html">the original</a> on 2012-11-14<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-01-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=JavaScript+Rewrite&amp;rft_id=http%3A%2F%2Ftapestry.apache.org%2Fjavascript-rewrite.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Tapestry" class="Z3988"></span></span> </li> </ol></div></div> <div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Tapestry&amp;action=edit&amp;section=12" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="https://tapestry.apache.org">Official website</a></span></span> <span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q617093#P856" title="Edit this at Wikidata"><img alt="Edit this at Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></li></ul> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="Web_frameworks" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Web_frameworks" title="Template:Web frameworks"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Web_frameworks" title="Template talk:Web frameworks"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Web_frameworks" title="Special:EditPage/Template:Web frameworks"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Web_frameworks" style="font-size:114%;margin:0 4em"><a href="/wiki/Web_framework" title="Web framework">Web frameworks</a></div></th></tr><tr><td class="navbox-abovebelow hlist" colspan="2"><div> <ul><li><a href="/wiki/Comparison_of_server-side_web_frameworks" title="Comparison of server-side web frameworks">Comparison</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/.NET" title=".NET">.NET</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/ASP.NET" title="ASP.NET">ASP.NET</a> <ul><li><a href="/wiki/ASP.NET_Core" title="ASP.NET Core">Core</a></li> <li><a href="/wiki/ASP.NET_AJAX" title="ASP.NET AJAX">AJAX</a></li> <li><a href="/wiki/ASP.NET_Dynamic_Data" title="ASP.NET Dynamic Data">Dynamic Data</a></li> <li><a href="/wiki/ASP.NET_MVC" title="ASP.NET MVC">MVC</a></li> <li><a href="/wiki/ASP.NET_Razor" title="ASP.NET Razor">Razor</a></li> <li><a href="/wiki/ASP.NET_Web_Forms" title="ASP.NET Web Forms">Web Forms</a></li></ul></li> <li><a href="/wiki/Blazor" title="Blazor">Blazor</a></li> <li><a href="/wiki/DotNetNuke" class="mw-redirect" title="DotNetNuke">DNN</a></li> <li><a href="/wiki/Base_One_Foundation_Component_Library" title="Base One Foundation Component Library">BFC</a></li> <li><a href="/wiki/MonoRail_(software)" title="MonoRail (software)">MonoRail</a></li> <li><a href="/wiki/Umbraco" title="Umbraco">Umbraco</a></li> <li><a href="/wiki/WebSharper" title="WebSharper">WebSharper</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/C%2B%2B" title="C++">C++</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/CppCMS" title="CppCMS">CppCMS</a></li> <li><a href="/wiki/Drogon_(software)" title="Drogon (software)">Drogon</a></li> <li><a href="/wiki/Wt_(web_toolkit)" title="Wt (web toolkit)">Wt</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Adobe_ColdFusion" title="Adobe ColdFusion">ColdFusion</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/ColdBox_Platform" title="ColdBox Platform">ColdBox Platform</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Common_Lisp" title="Common Lisp">Common Lisp</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/CL-HTTP" title="CL-HTTP">CL-HTTP</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Haskell" title="Haskell">Haskell</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Servant_(web_framework)" title="Servant (web framework)">Servant</a></li> <li><a href="/wiki/Snap_(web_framework)" title="Snap (web framework)">Snap</a></li> <li><a href="/wiki/Yesod_(web_framework)" title="Yesod (web framework)">Yesod</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Java_(software_platform)" title="Java (software platform)">Java</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/AppFuse" title="AppFuse">AppFuse</a></li> <li><a href="/wiki/Grails_(framework)" title="Grails (framework)">Grails</a></li> <li><a href="/wiki/Google_Web_Toolkit" title="Google Web Toolkit">GWT</a></li> <li><a href="/wiki/ICEfaces" title="ICEfaces">ICEfaces</a></li> <li><a href="/wiki/JHipster" title="JHipster">JHipster</a></li> <li><a href="/wiki/JWt_(Java_web_toolkit)" title="JWt (Java web toolkit)">JWt</a></li> <li><a href="/wiki/Jakarta_Faces#JSF_and_Ajax" title="Jakarta Faces">Mojarra</a></li> <li><a href="/wiki/Play_Framework" title="Play Framework">Play</a></li> <li><a href="/wiki/Remote_Application_Platform" title="Remote Application Platform">Remote Application Platform</a></li> <li><a href="/wiki/JBoss_Seam" title="JBoss Seam">Seam</a></li> <li><a href="/wiki/Apache_Sling" title="Apache Sling">Sling</a></li> <li><a href="/wiki/Spring_Framework#Model-view-controller_framework" title="Spring Framework">Spring</a></li> <li><a href="/wiki/Stripes_(framework)" title="Stripes (framework)">Stripes</a></li> <li><a href="/wiki/Apache_Struts" title="Apache Struts">Struts</a></li> <li><a class="mw-selflink selflink">Tapestry</a></li> <li><a href="/wiki/Vaadin" title="Vaadin">Vaadin</a></li> <li><a href="/wiki/Vert.x" title="Vert.x">Vert.x</a></li> <li><a href="/wiki/Apache_Wicket" title="Apache Wicket">Wicket</a></li> <li><a href="/wiki/WaveMaker" title="WaveMaker">WaveMaker</a></li> <li><a href="/wiki/ZK_(framework)" title="ZK (framework)">ZK</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/JavaScript" title="JavaScript">JavaScript</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Angular_(web_framework)" title="Angular (web framework)">Angular</a>/<a href="/wiki/AngularJS" title="AngularJS">AngularJS</a></li> <li><a href="/wiki/Backbone.js" title="Backbone.js">Backbone.js</a></li> <li><a href="/wiki/Google_Closure_Tools" title="Google Closure Tools">Closure</a></li> <li><a href="/wiki/Dojo_Toolkit" title="Dojo Toolkit">Dojo Toolkit</a></li> <li><a href="/wiki/Ember.js" title="Ember.js">Ember.js</a></li> <li><a href="/wiki/Express.js" title="Express.js">Express.js</a></li> <li><a href="/wiki/Ext_JS" title="Ext JS">Ext JS</a></li> <li><a href="/wiki/Fastify" title="Fastify">Fastify</a></li> <li><a href="/wiki/Htmx" title="Htmx">htmx</a></li> <li><a href="/wiki/JQuery" title="JQuery">jQuery</a></li> <li><a href="/wiki/Knockout.js" class="mw-redirect" title="Knockout.js">Knockout.js</a></li> <li><a href="/wiki/Meteor_(web_framework)" title="Meteor (web framework)">Meteor</a></li> <li><a href="/wiki/MooTools" title="MooTools">MooTools</a></li> <li><a href="/wiki/NestJS" title="NestJS">NestJS</a></li> <li><a href="/wiki/Next.js" title="Next.js">Next.js</a></li> <li><a href="/wiki/Nuxt.js" title="Nuxt.js">Nuxt.js</a></li> <li><a href="/wiki/Node.js" title="Node.js">Node.js</a></li> <li><a href="/wiki/OpenUI5" title="OpenUI5">OpenUI5</a></li> <li><a href="/wiki/Prototype_JavaScript_Framework" title="Prototype JavaScript Framework">Prototype</a></li> <li><a href="/wiki/React_(software)" title="React (software)">React</a></li> <li><a href="/wiki/Remix_(web_framework)" title="Remix (web framework)">Remix</a></li> <li><a href="/wiki/Sencha_Touch" title="Sencha Touch">Sencha Touch</a></li> <li><a href="/wiki/SproutCore" title="SproutCore">SproutCore</a></li> <li><a href="/wiki/Svelte" title="Svelte">Svelte</a></li> <li><a href="/wiki/Vue.js" title="Vue.js">Vue.js</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Perl" title="Perl">Perl</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Catalyst_(software)" title="Catalyst (software)">Catalyst</a></li> <li><a href="/wiki/Dancer_(software)" title="Dancer (software)">Dancer</a></li> <li><a href="/wiki/Maypole_framework" class="mw-redirect" title="Maypole framework">Maypole</a></li> <li><a href="/wiki/Mojolicious" title="Mojolicious">Mojolicious</a></li> <li><a href="/wiki/WebGUI" title="WebGUI">WebGUI</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/PHP" title="PHP">PHP</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/CakePHP" title="CakePHP">CakePHP</a></li> <li><a href="/wiki/CodeIgniter" title="CodeIgniter">CodeIgniter</a></li> <li><a href="/wiki/Drupal" title="Drupal">Drupal</a></li> <li><a href="/wiki/EZ_Publish" title="EZ Publish">eZ Publish</a></li> <li><a href="/wiki/Fat-Free_Framework" title="Fat-Free Framework">Fat-Free</a></li> <li><a href="/wiki/Neos_Flow" title="Neos Flow">Flow</a></li> <li><a href="/wiki/FuelPHP" title="FuelPHP">FuelPHP</a></li> <li><a href="/wiki/Grav_(CMS)" title="Grav (CMS)">Grav</a></li> <li><a href="/wiki/Gyroscope_(software)" title="Gyroscope (software)">Gyroscope</a></li> <li><a href="/wiki/Horde_(software)" title="Horde (software)">Horde</a></li> <li><a href="/wiki/Joomla" title="Joomla">Joomla!</a></li> <li><a href="/wiki/Laminas" title="Laminas">Laminas</a></li> <li><a href="/wiki/Laravel" title="Laravel">Laravel</a></li> <li><a href="/wiki/Li3_(software)" title="Li3 (software)">li₃</a></li> <li><a href="/wiki/Midgard_(software)" title="Midgard (software)">Midgard</a></li> <li><a href="/wiki/MODX" title="MODX">MODX</a></li> <li><a href="/wiki/Phalcon_(framework)" title="Phalcon (framework)">Phalcon</a></li> <li><a href="/wiki/PHP-Fusion" title="PHP-Fusion">PHP-Fusion</a></li> <li><a href="/wiki/PHP-Nuke" title="PHP-Nuke">PHP-Nuke</a></li> <li><a href="/wiki/Pop_PHP_Framework" title="Pop PHP Framework">Pop PHP</a></li> <li><a href="/wiki/PRADO_(framework)" title="PRADO (framework)">PRADO</a></li> <li><a href="/wiki/ProcessWire" title="ProcessWire">ProcessWire</a></li> <li><a href="/wiki/Qcodo" title="Qcodo">Qcodo</a></li> <li><a href="/wiki/Silverstripe_CMS" title="Silverstripe CMS">Silverstripe</a></li> <li><a href="/wiki/Symfony" title="Symfony">Symfony</a></li> <li><a href="/wiki/TYPO3" title="TYPO3">TYPO3</a></li> <li><a href="/wiki/WordPress" title="WordPress">WordPress</a></li> <li><a href="/wiki/XOOPS" title="XOOPS">XOOPS</a></li> <li><a href="/wiki/Yii" title="Yii">Yii</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Zope#BlueBream" title="Zope">BlueBream</a></li> <li><a href="/wiki/CherryPy" title="CherryPy">CherryPy</a></li> <li><a href="/wiki/CubicWeb" title="CubicWeb">CubicWeb</a></li> <li><a href="/wiki/Django_(web_framework)" title="Django (web framework)">Django</a></li> <li><a href="/wiki/FastAPI" title="FastAPI">FastAPI</a></li> <li><a href="/wiki/Flask_(web_framework)" title="Flask (web framework)">Flask</a></li> <li><a href="/wiki/Grok_(web_framework)" title="Grok (web framework)">Grok</a></li> <li><a href="/wiki/Nevow" class="mw-redirect" title="Nevow">Nevow</a></li> <li><a href="/wiki/Pyjs" title="Pyjs">Pyjs</a></li> <li><a href="/wiki/Pylons_project#Pylons_Framework" title="Pylons project">Pylons</a></li> <li><a href="/wiki/Pylons_project#Pyramid" title="Pylons project">Pyramid</a></li> <li><a href="/wiki/Quixote_(web_framework)" title="Quixote (web framework)">Quixote</a></li> <li><a href="/wiki/TACTIC_(web_framework)" title="TACTIC (web framework)">TACTIC</a></li> <li><a href="/wiki/Tornado_(web_server)" title="Tornado (web server)">Tornado</a></li> <li><a href="/wiki/TurboGears" title="TurboGears">TurboGears</a></li> <li><a href="/wiki/Web2py" title="Web2py">web2py</a></li> <li><a href="/wiki/Zope#Zope_2" title="Zope">Zope 2</a></li> <li><i><a href="/wiki/Category:Python_(programming_language)_web_frameworks" title="Category:Python (programming language) web frameworks">more</a></i>...</li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Merb" title="Merb">Merb</a></li> <li><a href="/wiki/Padrino_(web_framework)" title="Padrino (web framework)">Padrino</a></li> <li><a href="/wiki/Ruby_on_Rails" title="Ruby on Rails">Ruby on Rails</a></li> <li><a href="/wiki/Sinatra_(software)" title="Sinatra (software)">Sinatra</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Rocket_(web_framework)" title="Rocket (web framework)">Rocket</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Scala_(programming_language)" title="Scala (programming language)">Scala</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Lift_(web_framework)" title="Lift (web framework)">Lift</a></li> <li><a href="/wiki/Play_Framework" title="Play Framework">Play</a></li> <li><a href="/wiki/Scalatra" title="Scalatra">Scalatra</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/AIDA/Web" title="AIDA/Web">AIDA/Web</a></li> <li><a href="/wiki/Seaside_(software)" title="Seaside (software)">Seaside</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other languages</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Oracle_Application_Express" title="Oracle Application Express">Application Express</a> (<a href="/wiki/PL/SQL" title="PL/SQL">PL/SQL</a>)</li> <li><a href="/wiki/Grails_(framework)" title="Grails (framework)">Grails</a> (<a href="/wiki/Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Groovy</a>)</li> <li><a href="/wiki/OpenACS" class="mw-redirect" title="OpenACS">OpenACS</a> (<a href="/wiki/Tcl" title="Tcl">Tcl</a>)</li> <li><a href="/wiki/Phoenix_(web_framework)" title="Phoenix (web framework)">Phoenix</a> (<a href="/wiki/Elixir_(programming_language)" title="Elixir (programming language)">Elixir</a>)</li> <li><a href="/wiki/Shiny_(web_framework)" title="Shiny (web framework)">Shiny (web framework)</a> (<a href="/wiki/R_(programming_language)" title="R (programming language)">R</a>)</li> <li><a href="/wiki/SproutCore" title="SproutCore">SproutCore</a> (<a href="/wiki/JavaScript" title="JavaScript">JavaScript</a>-<a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>)</li> <li><a href="/wiki/Yaws_(web_server)" title="Yaws (web server)">Yaws</a> (<a href="/wiki/Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a>)</li></ul> </div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236075235"></div><div role="navigation" class="navbox" aria-labelledby="The_Apache_Software_Foundation" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239400231"><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Apache_Software_Foundation" title="Template:Apache Software Foundation"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Apache_Software_Foundation" title="Template talk:Apache Software Foundation"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Apache_Software_Foundation" title="Special:EditPage/Template:Apache Software Foundation"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="The_Apache_Software_Foundation" style="font-size:114%;margin:0 4em"><a href="/wiki/The_Apache_Software_Foundation" title="The Apache Software Foundation">The Apache Software Foundation</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Top-level<br />projects</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_Accumulo" title="Apache Accumulo">Accumulo</a></li> <li><a href="/wiki/Apache_ActiveMQ" title="Apache ActiveMQ">ActiveMQ</a></li> <li><a href="/wiki/Apache_Airavata" title="Apache Airavata">Airavata</a></li> <li><a href="/wiki/Apache_Airflow" title="Apache Airflow">Airflow</a></li> <li><a href="/wiki/Apache_Allura" title="Apache Allura">Allura</a></li> <li><a href="/wiki/Apache_Ambari" class="mw-redirect" title="Apache Ambari">Ambari</a></li> <li><a href="/wiki/Apache_Ant" title="Apache Ant">Ant</a></li> <li><a href="/wiki/Apache_Aries" title="Apache Aries">Aries</a></li> <li><a href="/wiki/Apache_Arrow" title="Apache Arrow">Arrow</a></li> <li><a href="/wiki/Apache_HTTP_Server" title="Apache HTTP Server">Apache HTTP Server</a></li> <li><a href="/wiki/Apache_Portable_Runtime" title="Apache Portable Runtime">APR</a></li> <li><a href="/wiki/Apache_Avro" title="Apache Avro">Avro</a></li> <li><a href="/wiki/Apache_Axis" title="Apache Axis">Axis</a></li> <li><a href="/wiki/Apache_Axis2" title="Apache Axis2">Axis2</a></li> <li><a href="/wiki/Apache_Beam" title="Apache Beam">Beam</a></li> <li><a href="/wiki/Apache_Bloodhound" class="mw-redirect" title="Apache Bloodhound">Bloodhound</a></li> <li><a href="/wiki/Apache_Brooklyn" title="Apache Brooklyn">Brooklyn</a></li> <li><a href="/wiki/Apache_Calcite" title="Apache Calcite">Calcite</a></li> <li><a href="/wiki/Apache_Camel" title="Apache Camel">Camel</a></li> <li><a href="/wiki/Apache_CarbonData" title="Apache CarbonData">CarbonData</a></li> <li><a href="/wiki/Apache_Cassandra" title="Apache Cassandra">Cassandra</a></li> <li><a href="/wiki/Apache_Cayenne" title="Apache Cayenne">Cayenne</a></li> <li><a href="/wiki/Apache_CloudStack" title="Apache CloudStack">CloudStack</a></li> <li><a href="/wiki/Apache_Cocoon" title="Apache Cocoon">Cocoon</a></li> <li><a href="/wiki/Apache_Cordova" title="Apache Cordova">Cordova</a></li> <li><a href="/wiki/Apache_CouchDB" title="Apache CouchDB">CouchDB</a></li> <li><a href="/wiki/Apache_cTAKES" title="Apache cTAKES">cTAKES</a></li> <li><a href="/wiki/Apache_CXF" title="Apache CXF">CXF</a></li> <li><a href="/wiki/Apache_Derby" title="Apache Derby">Derby</a></li> <li><a href="/wiki/Apache_Directory" title="Apache Directory">Directory</a></li> <li><a href="/wiki/Apache_Drill" title="Apache Drill">Drill</a></li> <li><a href="/wiki/Apache_Druid" title="Apache Druid">Druid</a></li> <li><a href="/wiki/Apache_Empire-db" title="Apache Empire-db">Empire-db</a></li> <li><a href="/wiki/Apache_Felix" title="Apache Felix">Felix</a></li> <li><a href="/wiki/Apache_Flex" title="Apache Flex">Flex</a></li> <li><a href="/wiki/Apache_Flink" title="Apache Flink">Flink</a></li> <li><a href="/wiki/Apache_Flume" class="mw-redirect" title="Apache Flume">Flume</a></li> <li><a href="/wiki/FreeMarker" title="FreeMarker">FreeMarker</a></li> <li><a href="/wiki/Apache_Geronimo" title="Apache Geronimo">Geronimo</a></li> <li><a href="/wiki/Apache_Groovy" title="Apache Groovy">Groovy</a></li> <li><a href="/wiki/Apache_Guacamole" title="Apache Guacamole">Guacamole</a></li> <li><a href="/wiki/Apache_Gump" title="Apache Gump">Gump</a></li> <li><a href="/wiki/Apache_Hadoop" title="Apache Hadoop">Hadoop</a></li> <li><a href="/wiki/Apache_HBase" title="Apache HBase">HBase</a></li> <li><a href="/wiki/Apache_Helix" title="Apache Helix">Helix</a></li> <li><a href="/wiki/Apache_Hive" title="Apache Hive">Hive</a></li> <li><a href="/wiki/Apache_Iceberg" title="Apache Iceberg">Iceberg</a></li> <li><a href="/wiki/Apache_Ignite" title="Apache Ignite">Ignite</a></li> <li><a href="/wiki/Apache_Impala" title="Apache Impala">Impala</a></li> <li><a href="/wiki/Apache_Jackrabbit" title="Apache Jackrabbit">Jackrabbit</a></li> <li><a href="/wiki/Apache_James" title="Apache James">James</a></li> <li><a href="/wiki/Apache_Jena" title="Apache Jena">Jena</a></li> <li><a href="/wiki/Apache_JMeter" title="Apache JMeter">JMeter</a></li> <li><a href="/wiki/Apache_Kafka" title="Apache Kafka">Kafka</a></li> <li><a href="/wiki/Apache_Kudu" title="Apache Kudu">Kudu</a></li> <li><a href="/wiki/Apache_Kylin" title="Apache Kylin">Kylin</a></li> <li><a href="/wiki/Apache_Lucene" title="Apache Lucene">Lucene</a></li> <li><a href="/wiki/Apache_Mahout" title="Apache Mahout">Mahout</a></li> <li><a href="/wiki/Apache_Maven" title="Apache Maven">Maven</a></li> <li><a href="/wiki/Apache_MINA" title="Apache MINA">MINA</a></li> <li><a href="/wiki/Mod_perl" title="Mod perl">mod_perl</a></li> <li><a href="/wiki/Apache_MyFaces" title="Apache MyFaces">MyFaces</a></li> <li><a href="/wiki/Apache_Mynewt" title="Apache Mynewt">Mynewt</a></li> <li><a href="/wiki/Apache_NiFi" title="Apache NiFi">NiFi</a></li> <li><a href="/wiki/NetBeans" title="NetBeans">NetBeans</a></li> <li><a href="/wiki/Apache_Nutch" title="Apache Nutch">Nutch</a></li> <li><a href="/wiki/NuttX" title="NuttX">NuttX</a></li> <li><a href="/wiki/Apache_OFBiz" title="Apache OFBiz">OFBiz</a></li> <li><a href="/wiki/Apache_Oozie" title="Apache Oozie">Oozie</a></li> <li><a href="/wiki/Apache_OpenEJB" title="Apache OpenEJB">OpenEJB</a></li> <li><a href="/wiki/Apache_OpenJPA" title="Apache OpenJPA">OpenJPA</a></li> <li><a href="/wiki/Apache_OpenNLP" title="Apache OpenNLP">OpenNLP</a></li> <li><a href="/wiki/Apache_OpenOffice" title="Apache OpenOffice">OрenOffice</a></li> <li><a href="/wiki/Apache_ORC" title="Apache ORC">ORC</a></li> <li><a href="/wiki/Apache_PDFBox" title="Apache PDFBox">PDFBox</a></li> <li><a href="/wiki/Apache_Parquet" title="Apache Parquet">Parquet</a></li> <li><a href="/wiki/Apache_Phoenix" title="Apache Phoenix">Phoenix</a></li> <li><a href="/wiki/Apache_POI" title="Apache POI">POI</a></li> <li><a href="/wiki/Apache_Pig" title="Apache Pig">Pig</a></li> <li><a href="/wiki/Apache_Pinot" title="Apache Pinot">Pinot</a></li> <li><a href="/wiki/Apache_Pivot" title="Apache Pivot">Pivot</a></li> <li><a href="/wiki/Apache_Qpid" title="Apache Qpid">Qpid</a></li> <li><a href="/wiki/Apache_Roller" title="Apache Roller">Roller</a></li> <li><a href="/wiki/Apache_RocketMQ" title="Apache RocketMQ">RocketMQ</a></li> <li><a href="/wiki/Apache_Samza" title="Apache Samza">Samza</a></li> <li><a href="/wiki/Apache_Shiro" title="Apache Shiro">Shiro</a></li> <li><a href="/wiki/Apache_SINGA" title="Apache SINGA">SINGA</a></li> <li><a href="/wiki/Apache_Sling" title="Apache Sling">Sling</a></li> <li><a href="/wiki/Apache_Solr" title="Apache Solr">Solr</a></li> <li><a href="/wiki/Apache_Spark" title="Apache Spark">Spark</a></li> <li><a href="/wiki/Apache_Storm" title="Apache Storm">Storm</a></li> <li><a href="/wiki/Apache_SpamAssassin" title="Apache SpamAssassin">SpamAssassin</a></li> <li><a href="/wiki/Apache_Struts" title="Apache Struts">Struts</a> <ul><li><a href="/wiki/Apache_Struts_1" title="Apache Struts 1">1</a></li></ul></li> <li><a href="/wiki/Apache_Subversion" title="Apache Subversion">Subversion</a></li> <li><a href="/wiki/Apache_Superset" title="Apache Superset">Superset</a></li> <li><a href="/wiki/Apache_SystemDS" title="Apache SystemDS">SystemDS</a></li> <li><a class="mw-selflink selflink">Tapestry</a></li> <li><a href="/wiki/Apache_Thrift" title="Apache Thrift">Thrift</a></li> <li><a href="/wiki/Apache_Tika" title="Apache Tika">Tika</a></li> <li><a href="/wiki/Apache_TinkerPop" class="mw-redirect" title="Apache TinkerPop">TinkerPop</a></li> <li><a href="/wiki/Apache_Tomcat" title="Apache Tomcat">Tomcat</a></li> <li><a href="/wiki/Apache_Trafodion" class="mw-redirect" title="Apache Trafodion">Trafodion</a></li> <li><a href="/wiki/Apache_Traffic_Server" title="Apache Traffic Server">Traffic Server</a></li> <li><a href="/wiki/UIMA" title="UIMA">UIMA</a></li> <li><a href="/wiki/Apache_Velocity" title="Apache Velocity">Velocity</a></li> <li><a href="/wiki/Apache_Wicket" title="Apache Wicket">Wicket</a></li> <li><a href="/wiki/Apache_Xalan" title="Apache Xalan">Xalan</a></li> <li><a href="/wiki/Apache_Xerces" title="Apache Xerces">Xerces</a></li> <li><a href="/wiki/Apache_XMLBeans" title="Apache XMLBeans">XMLBeans</a></li> <li>Yetus</li> <li><a href="/wiki/Apache_ZooKeeper" title="Apache ZooKeeper">ZooKeeper</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Apache_Commons" title="Apache Commons">Commons</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Byte_Code_Engineering_Library" title="Byte Code Engineering Library">BCEL</a></li> <li><a href="/wiki/Bean_Scripting_Framework" title="Bean Scripting Framework">BSF</a></li> <li><a href="/wiki/Commons_Daemon" title="Commons Daemon">Daemon</a></li> <li><a href="/wiki/Apache_Jelly" title="Apache Jelly">Jelly</a></li> <li><a href="/wiki/Apache_Commons_Logging" title="Apache Commons Logging">Logging</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Incubator</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_Taverna" title="Apache Taverna">Taverna</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other projects</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_Batik" title="Apache Batik">Batik</a></li> <li><a href="/wiki/Apache_FOP_(Formatting_Objects_Processor)" class="mw-redirect" title="Apache FOP (Formatting Objects Processor)">FOP</a></li> <li><a href="/wiki/Apache_Ivy" title="Apache Ivy">Ivy</a></li> <li><a href="/wiki/Log4j" title="Log4j">Log4j</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Attic</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_Apex" title="Apache Apex">Apex</a></li> <li><a href="/wiki/AxKit" title="AxKit">AxKit</a></li> <li><a href="/wiki/Apache_Beehive" title="Apache Beehive">Beehive</a></li> <li><a href="/wiki/Apache_iBATIS" title="Apache iBATIS">iBATIS</a></li> <li><a href="/wiki/Apache_Click" title="Apache Click">Click</a></li> <li><a href="/wiki/Apache_Continuum" title="Apache Continuum">Continuum</a></li> <li><a href="/wiki/Deltacloud" title="Deltacloud">Deltacloud</a></li> <li><a href="/wiki/Etch_(protocol)" title="Etch (protocol)">Etch</a></li> <li><a href="/wiki/Apache_Giraph" title="Apache Giraph">Giraph</a></li> <li><a href="/wiki/Apache_Hama" title="Apache Hama">Hama</a></li> <li><a href="/wiki/Apache_Harmony" title="Apache Harmony">Harmony</a></li> <li><a href="/wiki/Jakarta_Project" title="Jakarta Project">Jakarta</a></li> <li><a href="/wiki/Apache_Marmotta" title="Apache Marmotta">Marmotta</a></li> <li><a href="/wiki/Apache_MXNet" title="Apache MXNet">MXNet</a></li> <li><a href="/wiki/Apache_ODE" title="Apache ODE">ODE</a></li> <li><a href="/wiki/Jini" title="Jini">River</a></li> <li><a href="/wiki/Apache_Shale" title="Apache Shale">Shale</a></li> <li><a href="/wiki/Jakarta_Slide" class="mw-redirect" title="Jakarta Slide">Slide</a></li> <li><a href="/wiki/Sqoop" title="Sqoop">Sqoop</a></li> <li><a href="/wiki/Apache_Stanbol" title="Apache Stanbol">Stanbol</a></li> <li><a href="/wiki/Apache_Tuscany" class="mw-redirect" title="Apache Tuscany">Tuscany</a></li> <li><a href="/wiki/Apache_Wave" class="mw-redirect" title="Apache Wave">Wave</a></li> <li><a href="/wiki/Apache_XML" title="Apache XML">XML</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Licenses</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_License" title="Apache License">Apache License</a></li></ul> </div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div> <ul><li><span class="noviewer" typeof="mw:File"><span title="Category"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/16px-Symbol_category_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/23px-Symbol_category_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/31px-Symbol_category_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <b><a href="/wiki/Category:Apache_Software_Foundation" title="Category:Apache Software Foundation">Category</a></b></li></ul> </div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236075235"></div><div role="navigation" class="navbox authority-control" aria-label="Navbox" style="padding:3px"><table class="nowraplinks hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Help:Authority_control" title="Help:Authority control">Authority control databases</a>: National <span class="mw-valign-text-top noprint" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q617093#identifiers" title="Edit this at Wikidata"><img alt="Edit this at Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4793313-6">Germany</a></span></li></ul></div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐api‐int.codfw.main‐849f99967d‐6gns4 Cached time: 20241124121307 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 0.635 seconds Real time usage: 0.793 seconds Preprocessor visited node count: 2995/1000000 Post‐expand include size: 103898/2097152 bytes Template argument size: 4185/2097152 bytes Highest expansion depth: 18/100 Expensive parser function count: 8/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 111640/5000000 bytes Lua time usage: 0.399/10.000 seconds Lua memory usage: 6839563/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 673.285 1 -total 33.27% 223.984 2 Template:Infobox 28.06% 188.901 1 Template:Infobox_software 22.95% 154.527 1 Template:Infobox_software/simple 19.95% 134.307 2 Template:Navbox 18.58% 125.114 1 Template:Application_frameworks 16.78% 112.946 3 Template:Wikidata 15.53% 104.551 1 Template:Reflist 11.77% 79.245 21 Template:Cite_web 10.59% 71.291 1 Template:Short_description --> <!-- Saved in parser cache with key enwiki:pcache:idhash:2052309-0!canonical and timestamp 20241124121307 and revision id 1216811581. Rendering was triggered because: api-parse --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Apache_Tapestry&amp;oldid=1216811581">https://en.wikipedia.org/w/index.php?title=Apache_Tapestry&amp;oldid=1216811581</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Apache_Software_Foundation_projects" title="Category:Apache Software Foundation projects">Apache Software Foundation projects</a></li><li><a href="/wiki/Category:Java_enterprise_platform" title="Category:Java enterprise platform">Java enterprise platform</a></li><li><a href="/wiki/Category:Web_frameworks" title="Category:Web frameworks">Web frameworks</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_is_different_from_Wikidata" title="Category:Short description is different from Wikidata">Short description is different from Wikidata</a></li><li><a href="/wiki/Category:Wikipedia_articles_needing_clarification_from_February_2024" title="Category:Wikipedia articles needing clarification from February 2024">Wikipedia articles needing clarification from February 2024</a></li><li><a href="/wiki/Category:All_articles_with_vague_or_ambiguous_time" title="Category:All articles with vague or ambiguous time">All articles with vague or ambiguous time</a></li><li><a href="/wiki/Category:Vague_or_ambiguous_time_from_March_2018" title="Category:Vague or ambiguous time from March 2018">Vague or ambiguous time from March 2018</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 2 April 2024, at 03:04<span class="anonymous-show">&#160;(UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Apache_Tapestry&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-6d67bf974d-whrvc","wgBackendResponseTime":141,"wgPageParseReport":{"limitreport":{"cputime":"0.635","walltime":"0.793","ppvisitednodes":{"value":2995,"limit":1000000},"postexpandincludesize":{"value":103898,"limit":2097152},"templateargumentsize":{"value":4185,"limit":2097152},"expansiondepth":{"value":18,"limit":100},"expensivefunctioncount":{"value":8,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":111640,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 673.285 1 -total"," 33.27% 223.984 2 Template:Infobox"," 28.06% 188.901 1 Template:Infobox_software"," 22.95% 154.527 1 Template:Infobox_software/simple"," 19.95% 134.307 2 Template:Navbox"," 18.58% 125.114 1 Template:Application_frameworks"," 16.78% 112.946 3 Template:Wikidata"," 15.53% 104.551 1 Template:Reflist"," 11.77% 79.245 21 Template:Cite_web"," 10.59% 71.291 1 Template:Short_description"]},"scribunto":{"limitreport-timeusage":{"value":"0.399","limit":"10.000"},"limitreport-memusage":{"value":6839563,"limit":52428800}},"cachereport":{"origin":"mw-api-int.codfw.main-849f99967d-6gns4","timestamp":"20241124121307","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Apache Tapestry","url":"https:\/\/en.wikipedia.org\/wiki\/Apache_Tapestry","sameAs":"http:\/\/www.wikidata.org\/entity\/Q617093","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q617093","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2005-06-15T18:51:59Z","dateModified":"2024-04-02T03:04:42Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/7\/76\/Apache_Tapestry_logo.svg","headline":"web application framework"}</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10