<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta charset="utf-8">
	
	

        <title> Apache Wicket</title>
        <meta name="viewport" content="width=device-width, initial-scale=1" />

        <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon" />
        <link rel="stylesheet" href="/css/style.css" type="text/css" media="screen" />
        <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />

		<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
        <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.5.5/slick.css"/>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.5.5/slick-theme.css"/>

<script type="text/javascript" src="//cdn.jsdelivr.net/jquery.slick/1.5.5/slick.min.js"></script>


    </head>
    <body class="index">
        <div class="header default">
    <div class="l-container">
        
<nav class="mainmenu">
    <div class="nav-logo">
    <a href="/"><img src="/img/logo-apachewicket.svg" alt="Apache Wicket"></a>
</div>

    <div class="nav-container">
    
		
    	
        
        
		<!-- /start/quickstart.html || / -->
		
    	
        
    	<a href="/start/quickstart.html" class=" nav-items">Quick Start</a>
    
		
    	
        
        
		<!-- /start/download.html || / -->
		
    	
        
    	<a href="/start/download.html" class=" nav-items">Download</a>
    
		
    	
        
        
		<!-- /learn || / -->
		
    	
        
    	<a href="/learn" class=" nav-items">Documentation</a>
    
		
    	
        
        
		<!-- /help || / -->
		
    	
        
    	<a href="/help" class=" nav-items">Support</a>
    
		
    	
        
        
		<!-- /contribute || / -->
		
    	
        
    	<a href="/contribute" class=" nav-items">Contribute</a>
    
		
    	
        
        
		<!-- /community || / -->
		
    	
        
    	<a href="/community" class=" nav-items">Community</a>
    
		
    	
        
        
		<!-- /apache || / -->
		
    	
        
    	<a href="/apache" class=" nav-items">Apache</a>
    
    </div>
    <div class="nav-container  ">
        <a href="https://github.com/apache/wicket" target="_blank"><i class="fa fa-github nav-items"></i></a>
        <a href="https://twitter.com/apache_wicket" target="_blank"><i class="fa fa-twitter nav-items"></i></a>
        <a href="https://builtwithwicket.tumblr.com" target="_blank"><i class="fa fa-tumblr nav-items"></i></a>
    </div>    
</nav>
        
    </div>
</div>
<main>
    <div class="l-container">
        <header class="l-full preamble">
            <h1></h1>
            
            
            
        </header>
        <section class="toc left post index">
            <div id="toc" class="toc"><div id="toc-title"><h2>Table of Contents</h2></div><ul><li class="toc--level-1 toc--section-1"><a href="#"><span class="toc-number">1</span> <span class="toc-text">Getting Started with Wicket 9</span></a></li></ul></div>
        </section>
        <section>
            <div class="l-full">
    <p class="meta"></p>
    <div class="l-full l-first preamble">
    <a class="acevent"></a>
    <br />
    <h1 id="introduction" class="announce">Announcing Apache Wicket 9: get into the modern Java world!</h1>
    <div>
      <img src="/img/wicket-9-sun.png" alt="Apache Wicket" class="responsive-logo" />
    </div>
    <p>
      The Apache Wicket project announces the 9th major release of the open source Java web framework servicing websites and applications across the globe since 2004.     
      Built on top of Java 11, this version of Wicket brings web development into the modern Java world, offering a fundamental tool to keep you code up to date with Java's evolution.
    </p>
</div>
<div class="l-first">
  <div class="l-full">
    <h3>Bring the web into the modern Java era</h3>
    <p>
     The release of Java 9 has been a turning point in Java history which laid the foundation for the modern Java era. However, the magnitude of this change has discouraged many developers from leaving the safe harbor represented by Java 8. With Wicket 9 we finally have a fundamental tool to move on and bring our web applications into the new Java world.  
    </p>
    <p>
      With this version Wicket has been completely revisited and improved to embrace new technologies such as Java modularization and new libraries like JUnit 5.
    </p>
  </div>
</div>

<div class="l-first l-flex">
  <div class="l-half">
    <h3>Stay up to date with the Java release cycle</h3>
    <p>
      With Java releasing at a faster pace it's important to keep a library up to date with the latest changes introduced in the platform and ensure it works with the latest Java release. Wicket does all of this by taking part in the <a href="https://wiki.openjdk.java.net/display/quality/Quality+Outreach" target="_blank">OpenJDK Quality Outreach</a>, an initiative aimed to test popular Open Source projects with both the latest OpenJDK release and the Early Access release.
    </p>
  </div>
  <div class="l-half">
    <h3>Be ready for the next Java Enterprise</h3>
    <p>
     Shortly after Java 9 was released, Oracle submitted Java EE to the Eclipse Foundation. As side effect of this owner change, the package name 'javax' had to be migrated to 'jakarta'. Wicket historically promoted decoupling of Java EE APIs and application code, making the transition to future Java Enterprise versions much easier. 
    </p>
  </div>
</div>

<div class="l-first l-flex">
  <div class="l-full">
    <h3>Protect your web apps with Content Security Policy (CSP)</h3>
    <p>
     As the number of security threats grows, it's crucial for web applications to adopt the latest security standards and countermeasures. CSP is a modern standard that allows applications to declare approved origins of content (such as JavaScript, CSS, images, etc...) for the browser to load. Constructing a safe and at the same time complete CSP can be challenging. 
     You either risk leaving holes in the defense of your application or you break certain functionality. Protecting against unwanted inline scripts is the most important target to attain. In CSP this is called 'unsafe-inline' and it's the most common cause of cross-site scripting vulnerabilities.
    </p>
    <p>
     Wicket 9 comes with full support for CSP and does not need any unsafe directives. Wicket will automatically add a nonce to every header contribution and whitelist this nonce. This allows for flexible loading of resources without the need for a complex CSP. Of course it is possible to modify and customize the CSP, add additional directives or disable it entirely. Lookup our <a href="http://wicket.apache.org/learn/#guide" target="_blank">documentation</a> for more information.     
    </p>
  </div>
</div>

<div class="l-first l-flex">
  <div class="l-half">
    <h3>A Smooth Transition to Java 11+</h3>
    <p>
      If you come from Wicket 8 chances are you don't need to change your application code to enjoy all the improvements offered by Java 11, such as better Docker support, improved performance, new Z Garbage Collector, etc...
    </p>
    <p>
      That said, as this is a new major version we have, in accordance with semantic versioning, cleaned up many APIs and you might have compile errors when you migrate from previous Wicket versions.
    </p>
  </div>
  <div class="l-half">
    <h3>Migrating to Wicket 9</h3>
    <p>
      When you migrate from a previous Wicket version to Wicket 9, a full list of changes and migrations is available at the following page:
    </p>
    <p>
      <a href="https://s.apache.org/wicket9migrate">https://s.apache.org/wicket9migrate</a>
    </p>
    <p>
      Please consult this migration guide when you are moving towards Wicket 9.
    </p>
  </div>
</div>
<div class="l-first l-flex">
  <div class="l-full">
    <h2>Getting Started with Wicket 9</h2>
    <p>
      It is very easy to get started with Wicket: use our <a href="/start/quickstart.html">quick-start wizard</a> or 
      use one of the options below.
    </p>
  </div>
  <div class="l-half">
    <h3>Download using Apache Maven</h3>
    <p>
      With Apache Maven update your dependency to (and don't forget to
      update any other dependencies on Wicket projects to the same version):
    </p>

<figure class="highlight"><pre><code class="language-xml" data-lang="xml"><span class="nt">&lt;dependency&gt;</span>
    <span class="nt">&lt;groupId&gt;</span>org.apache.wicket<span class="nt">&lt;/groupId&gt;</span>
    <span class="nt">&lt;artifactId&gt;</span>wicket-core<span class="nt">&lt;/artifactId&gt;</span>
    <span class="nt">&lt;version&gt;</span>9.7.0<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;/dependency&gt;</span></code></pre></figure>

  </div>
  <div class="l-half">
    <h3>Download sources/binaries manually</h3>
    <p>
      You can download and build the distribution yourself, or use our
      convenient binary package:
    </p>
    <ul>
      <li>Source: <a href="http://www.apache.org/dyn/closer.cgi/wicket/9.7.0">9.7.0 source download</a></li>
      <li>Binary: <a href="http://www.apache.org/dyn/closer.cgi/wicket/9.7.0/binaries">9.7.0 binary download</a></li>
    </ul>
  </div>
</div>

<hr />

<div class="l-full l-first preamble">
    <h1 id="introduction">Introducing Apache&nbsp;Wicket</h1>
    <p>Invented in 2004, Wicket is one of the few survivors of the Java
    serverside web framework wars of the mid 2000's. Wicket is an open
    source, component oriented, serverside, Java web application framework.
    With a history of over a decade, it is still going strong and has a
    solid future ahead. Learn why you should consider Wicket for your next
    web application.</p>
</div>

<div class="l-first l-flex">
    <div class="l-one-third">
        <img src="/img/java-wicket-html5.png" class="l-full" />
        <h3>Just Java &amp; HTML</h3>
        <p>Leverage what you know about Java or your favourite HTML 
        editor to write Wicket applications. With pure Java code and HTML 
        markup Wicket is the go-to web framework for purists.</p>
    </div>
    <div class="l-one-third">
        <img src="/img/wicket-safe.png" class="l-full" />
        <h3>Secure by Default</h3>
        <p>URLs do not expose sensitive information and all component paths are
        session-relative. Wicket keeps your model private except those parts
        you explicitly expose.</p>
    </div>
    <div class="l-one-third">
        <img src="/img/wicket-components.png" class="l-full" />
        <h3>AJAX Components</h3>
        <p>Write Ajax applications without having to write a single line 
        of JavaScript code. Wicket's Ajax functionality makes it trivial 
        to update selected parts of a UI, and comes with a great selection 
        of basic Ajax components.</p>
    </div>
</div>
<div class="l-first l-flex">
    <div class="l-one-third">
        <h3>Open Source with Apache License</h3>
        <p>Since its inception in 2004 Wicket has been an open source
        project and remains available under one of the most permissive
        licenses: the Apache Software License.</p>
    </div>
    <div class="l-one-third">
        <h3>Maintainable code</h3>
        <p>Pages and Components in Wicket are real Java objects that support
        encapsulation, inheritance and events. Create high level components
        with ease and bundle its stylesheets, JavaScript and other resources
        into one reusable package.</p>
    </div>
    <div class="l-one-third">
        <h3>Internationalized to take on the world</h3>
        <p>With support of over 25 languages out-of-the-box, Wicket let's 
        you get started in your own language, or a second language with no 
        effort. You can provide alternative languages on the application, 
        page, or even component level.</p>
    </div>
</div>
<div class="l-first l-flex">
    <div class="l-one-third">
        <h3>Multi-tab and window support</h3>
        <p>No more pain while keeping tabs on multiple tabs and windows. 
        Wicket's automatic state storage ensures that your users can open 
        pages in new tabs and windows without causing problems.</p>
    </div>
    <div class="l-two-third">
        <h3>Work with JavaScript and CSS</h3>
        <p>Global JavaScript libraries and CSS styling mix properly with 
        component local JavaScript and CSS resources. You can use custom 
        component libraries that ship with default JavaScript behaviour and 
        CSS styling, without having to do anything yourself. Creating such 
        self-contained component libraries is as easy as creating a JAR 
        file.</p>
    </div>
</div>
<div class="l-first l-flex">
    <div class="l-one-third">
        <h3>Test your pages and components</h3>
        <p>With WicketTester you can achieve testing coverage your QA 
        department can only dream of. Test your pages without having to run 
        inside a browser, or start a container. Test your components directly, 
        check their rendered markup tags, attributes and contents with ease.</p>
    </div>
    <div class="l-one-third">
        <h3>Injection support</h3>
        <p>Inject your services into your pages and components with the 
        technology of your choosing: Wicket provides integration with CDI 
        (JSR-305), Spring and Guice.</p>
    </div>
    <div class="l-one-third">
        <h3>JavaEE integration</h3>
        <p>If you are using the Web profile of JavaEE 6 or newer, you can 
        leverage JPA, EJBs, Bean Validation and CDI with Wicket's integrations 
        for these specifications.</p>
    </div>
</div>
<div class="l-first">
</div>
<hr />


</div>


            <article id="builtwithwicket" class="builtwithwicket">
                <header class="preamble">
    <h1 id="poweredby">Projects Using Apache Wicket</h1>
    <p>
        Many projects use Wicket but are not known for it. 
        Below you find a list of projects that are <a href="http://builtwithwicket.tumblr.com" rel="nofollow">Powered by Wicket</a>.
    </p>
</header>
<article class="l-full">
    <div class="builtwithwicket-slider"></div>
    <br><br>
    <p>
        This list is generated from our Tumblr feed 'Built with Wicket'. 
        You can submit your own project to this list through 
        <a href="http://builtwithwicket.tumblr.com/submit" rel="nofollow">this form</a>.
    </p>
</article>
<div class="l-first"></div>
<!-- Only display the blog image, title and post URL -->   
<script type="text/javascript"> 
    function randomIntFromInterval(min,max)
    {
        return Math.floor(Math.random()*(max-min+1)+min);
    }

    $.getJSON('./tumblr.json',
        function(response) {
            var posts = response.posts;  

            for(var postIndex in posts) {
                var post = posts[postIndex];
                var caption = jQuery('<div>' + post['photo-caption'] + '</div>').text().substring(0,150) + "...";
                var newSlide = $('.builtwithwicket-slider').append(
                    '<div class="builtwithwicket-post">\n' +
                    '  <img class="builtwithwicket-screenshot" data-lazy="' + post['photo-url-500'] + '">\n' +
                    '  <p class="builtwithwicket-caption">' + caption + '</p>\n' +
                    '  <a href="' + post['url'] + '" rel="nofollow">More</a>\n' + 
                    '</div>');
            }

            $('.builtwithwicket-slider').slick({
                arrows: true,
                autoplay: true,
                autoplaySpeed: 5000,
                dots: true,
                draggable: true,
                infinite: true,
                initialSlide: randomIntFromInterval(0, posts.length),
                lazyLoad: 'ondemand',
                pauseOnDotsHover: true,
                responsive: [    {
                        breakpoint: 590,
                        settings: {
                            slidesToShow: 1,
                            slidesToScroll: 1
                        }
                    },
                    {
                        breakpoint: 960,
                        settings: {
                            slidesToShow: 2,
                            slidesToScroll: 2
                        }
                    },
                ],
                slidesToShow: 3,
                slidesToScroll: 3,
                swipe: true,
            });
        });
</script>

            </article>

            <article id="news" class="">
                <div class="l-full l-first preamble">
    <h1 id="news">News about Apache Wicket</h1>
    <p>Get the latest updates to releases, security bulletins, community 
    news and more.</p>
</div>


<div class="l-flex"> 
	<div class="l-two-third" >
	
	    <article>
	        <h2>Apache Wicket 9.7.0 released</h2>
	        <small>01 Dec 2021</small>
	        <p>The Apache Wicket PMC is proud to announce Apache Wicket 9.7.0!</p>

<p>Apache Wicket is an open source Java component oriented web application
framework that powers thousands of web applications and web sites for
governments, stores, universities, cities, banks, email providers, and
more. You can find more about Apache Wicket at https://wicket.apache.org</p>

<p>This release marks another minor release of Wicket 9. We
use semantic versioning for the development of Wicket, and as such no
API breaks are present in this release compared to 9.0.0.</p>

<h2 id="using-this-release">Using this release</h2>

<p>With Apache Maven update your dependency to (and don’t forget to
update any other dependencies on Wicket projects to the same version):</p>

<figure class="highlight"><pre><code class="language-xml" data-lang="xml"><span class="nt">&lt;dependency&gt;</span>
    <span class="nt">&lt;groupId&gt;</span>org.apache.wicket<span class="nt">&lt;/groupId&gt;</span>
    <span class="nt">&lt;artifactId&gt;</span>wicket-core<span class="nt">&lt;/artifactId&gt;</span>
    <span class="nt">&lt;version&gt;</span>9.7.0<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;/dependency&gt;</span></code></pre></figure>

<p>Or download and build the distribution yourself, or use our
convenience binary package you can find here:</p>

<ul>
  <li>Download: http://wicket.apache.org/start/wicket-9.x.html#manually</li>
</ul>


	        <a href="/news/2021/12/01/wicket-9.7.0-released.html">Read more...</a> 
	    </article>
	
	    <article>
	        <h2>Apache Wicket 9.6.0 released</h2>
	        <small>02 Nov 2021</small>
	        <p>The Apache Wicket PMC is proud to announce Apache Wicket 9.6.0!</p>

<p>Apache Wicket is an open source Java component oriented web application
framework that powers thousands of web applications and web sites for
governments, stores, universities, cities, banks, email providers, and
more. You can find more about Apache Wicket at https://wicket.apache.org</p>

<p>This release marks another minor release of Wicket 9. We
use semantic versioning for the development of Wicket, and as such no
API breaks are present in this release compared to 9.0.0.</p>

<h2 id="using-this-release">Using this release</h2>

<p>With Apache Maven update your dependency to (and don’t forget to
update any other dependencies on Wicket projects to the same version):</p>

<figure class="highlight"><pre><code class="language-xml" data-lang="xml"><span class="nt">&lt;dependency&gt;</span>
    <span class="nt">&lt;groupId&gt;</span>org.apache.wicket<span class="nt">&lt;/groupId&gt;</span>
    <span class="nt">&lt;artifactId&gt;</span>wicket-core<span class="nt">&lt;/artifactId&gt;</span>
    <span class="nt">&lt;version&gt;</span>9.6.0<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;/dependency&gt;</span></code></pre></figure>

<p>Or download and build the distribution yourself, or use our
convenience binary package you can find here:</p>

<ul>
  <li>Download: http://wicket.apache.org/start/wicket-9.x.html#manually</li>
</ul>


	        <a href="/news/2021/11/02/wicket-9.6.0-released.html">Read more...</a> 
	    </article>
	
	</div>

    <div class="l-one-third news">
        
		<h2>Older news</h2>
		
		<p>See the <a href="/news">archives</a> for all news
		articles concerning release, security and community updates.</p>
		
		<p>Note that you can subscribe to our <a type="application/atom+xml"
		title="Atom 1.0 feed" href="/atom.xml">RSS feed</a> to
		get updates in your favorite RSS reader the moment they happen.</p>
		
		<ul>
		
		<li>
		    <h3>Apache Wicket 9.6.0 released</h3>
		    <small>02 Nov 2021</small>
		    The Apache Wicket PMC is proud to announce Apache Wicket 9.6.0! Apache Wicket is an open source Java component oriented web application framework that powers...
		    <a href="/news/2021/11/02/wicket-9.6.0-released.html">more</a>
		</li>
		
		<li>
		    <h3>Apache Wicket 9.5.0 released</h3>
		    <small>12 Sep 2021</small>
		    The Apache Wicket PMC is proud to announce Apache Wicket 9.5.0! Apache Wicket is an open source Java component oriented web application framework that powers...
		    <a href="/news/2021/09/12/wicket-9.5.0-released.html">more</a>
		</li>
		
		<li>
		    <h3>Apache Wicket 8.13.0 released</h3>
		    <small>13 Jul 2021</small>
		    The Apache Wicket PMC is proud to announce Apache Wicket 8.13.0! Apache Wicket is an open source Java component oriented web application framework that powers...
		    <a href="/news/2021/07/13/wicket-8.13.0-released.html">more</a>
		</li>
		
		<li>
		    <h3>Apache Wicket 9.4.0 released</h3>
		    <small>07 Jul 2021</small>
		    The Apache Wicket PMC is proud to announce Apache Wicket 9.4.0! Apache Wicket is an open source Java component oriented web application framework that powers...
		    <a href="/news/2021/07/07/wicket-9.4.0-released.html">more</a>
		</li>
		
		<li>
		    <h3>Apache Wicket 7.18.0 released</h3>
		    <small>06 Apr 2021</small>
		    The Apache Wicket PMC is proud to announce Apache Wicket 7.18.0! Apache Wicket is an open source Java component oriented web application framework that powers...
		    <a href="/news/2021/04/06/wicket-7.18.0-released.html">more</a>
		</li>
		
		</ul>
	</div>
</div>
<div class="l-first"></div>

            </article>

        </section>
    </div>
</main>

        <footer>
            <div class="l-container">
    <div class="left">
        <img src="/img/asf_logo_url.svg" style="height:90px; float:left; margin-right:10px;">
        <div style="margin-top:12px;">Copyright © 2021 — The Apache Software Foundation. Apache Wicket, Wicket, Apache, the Apache feather logo, and the Apache Wicket project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
    </div>
</div>

        </footer>
    </body>
</html>
