<html><head>
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <title>webdefault.xml</title><link rel="stylesheet" type="text/css" href="css/docbook.css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"><meta name="keywords" content="jetty, servlet-api, cometd, http, spdy, eclipse, maven, java, software"><link rel="home" href="index.html" title="Jetty : The Definitive Reference"><link rel="up" href="reference-section.html" title="Chapter&nbsp;33.&nbsp;Reference Section"><link rel="prev" href="jetty-env-xml.html" title="jetty-env.xml"><link rel="next" href="override-web-xml.html" title="Jetty override-web.xml"><link xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" rel="shortcut icon" href="images/favicon.ico"><script type="text/javascript" src="js/shCore.js"></script><script type="text/javascript" src="js/shBrushJava.js"></script><script type="text/javascript" src="js/shBrushXml.js"></script><script type="text/javascript" src="js/shBrushBash.js"></script><script type="text/javascript" src="js/shBrushJScript.js"></script><script type="text/javascript" src="js/shBrushSql.js"></script><script type="text/javascript" src="js/shBrushProperties.js"></script><script type="text/javascript" src="js/shBrushPlain.js"></script><link type="text/css" rel="stylesheet" href="css/shCore.css"><link type="text/css" rel="stylesheet" href="css/shThemeEclipse.css"><link type="text/css" rel="stylesheet" href="css/font-awesome.min.css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><tr><td style="width: 25%"><a href="http://www.eclipse.org/jetty"><img src="images/jetty-header-logo.png" alt="Jetty Logo"></a><br><span style="font-size: small">
            Version: 9.0.6.v20130930</span></td><td style="width: 50%"><script type="text/javascript">  (function() {
            var cx = '016459005284625897022:obd4lsai2ds';
            var gcse = document.createElement('script');
            gcse.type = 'text/javascript';
            gcse.async = true;
            gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
            '//www.google.com/cse/cse.js?cx=' + cx;
            var s = document.getElementsByTagName('script')[0];
            s.parentNode.insertBefore(gcse, s);
            })();
          </script><gcse:search></gcse:search></td></tr></table><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"><code class="filename">webdefault.xml</code></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="jetty-env-xml.html"><i class="icon-chevron-left"></i> Previous</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;33.&nbsp;Reference Section<br><a accesskey="p" href="index.html"><i class="icon-home"></i> Home</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="override-web-xml.html">Next <i class="icon-chevron-right"></i></a></td></tr></table><hr></div><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="jetty-callout"><h5 class="callout"><a href="http://www.webtide.com/support.jsp">Contact the core Jetty developers at
          <span class="website">www.webtide.com</span></a></h5><p>
 private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ...
 scalability guidance for your apps and Ajax/Comet projects ... development services from 1 day to full product delivery
      </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="webdefault-xml"></a><code class="filename">webdefault.xml</code></h2></div></div></div><div class="toc"><dl><dt><span class="section"><a href="webdefault-xml.html#using-webdefault-xml">Using <code class="filename">webdefault.xml</code></a></span></dt></dl></div><p>The <code class="filename">webdefault.xml</code> file saves web applications
  from having to define a lot of house-keeping and container-specific elements
  in their own <code class="filename">web.xml</code> files. For example, you can use it
  to set up mime-type mappings and JSP servlet-mappings. Jetty applies
  <code class="filename">webdefault.xml</code> to a web application
  <span class="emphasis"><em>before</em></span> the application's own
  <code class="filename">WEB-INF/web.xml</code>, which means that it cannot override
  values inside the webapp's <code class="filename">web.xml</code>. It uses the <a class="xref" href="jetty-xml-config.html" title="jetty.xml"><code class="filename">jetty.xml</code></a> syntax. Generally, it is convenient for all
  webapps in a Jetty instance to share the same
  <code class="filename">webdefault.xml</code> file. However, it is certainly possible
  to provide differentiated <code class="filename"> webdefault.xml</code> files for
  individual web applications.</p><p>The <code class="filename">webdefault.xml</code> file is located in <code class="filename">
  $(jetty.home)/etc/webdefault.xml</code>.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="using-webdefault-xml"></a>Using <code class="filename">webdefault.xml</code></h3></div></div></div><p>You can specify a custom configuration file to use for specific
    webapps, or for all webapps. If you do not specify an alternate defaults
    descriptor, the $JETTY-HOME/etc/jetty-deploy.xml file will configure jetty
    to automatically use
    $JETTY_HOME/etc/<code class="filename">webdefault.xml</code>.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="creating-custom-webdefault-xml-one-webapp"></a>Creating a Custom <code class="filename">webdefault.xml</code> for One
      WebApp</h4></div></div></div><p>You can specify a custom <code class="filename">webdefault.xml</code> for
      an individual web application in that webapp's <a class="xref" href="jetty-xml-config.html" title="jetty.xml"><code class="filename">jetty.xml</code></a> as follows:</p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
          <![CDATA[
 
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  ...
  <!-- Set up the absolute path to the custom webdefault.xml -->
  <Set name="defaultsDescriptor">/my/path/to/webdefault.xml</Set>
  ...
</Configure>

        ]]>
        </script></div><p>The equivalent in code is:</p><div class="informalexample"><script type="syntaxhighlighter" class="brush: java;toolbar: false">
          <![CDATA[
 
import org.eclipse.jetty.webapp.WebAppContext;

    ...

    WebAppContext wac = new WebAppContext();
    ...
    //Set up the absolute path to the custom webdefault.xml.
    wac.setDefaultsDescriptor("/my/path/to/webdefault.xml");
    ...

        ]]>
        </script></div><p>Alternatively, you can use a <a class="xref" href="jetty-classloading.html" title="Jetty Classloading">Jetty Classloading</a>
      to find the resource representing your custom
      <code class="filename">webdefault.xml</code>.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="creating-custom-webdefault-xml-multiple-webapps"></a>Creating a Custom <code class="filename">webdefault.xml</code> for
      Multiple WebApps</h4></div></div></div><p>If you want to apply the same custom
      <code class="filename">webdefault.xml</code> to a number of webapps, provide the
      path to the file in <a class="xref" href="jetty-xml-config.html" title="jetty.xml"><code class="filename">jetty.xml</code></a> in the
      $JETTY_HOME/etc/jetty-deploy.xml file:</p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
          <![CDATA[   <Set name="defaultsDescriptor"><Property name="jetty.home" default="." />/other/path/to/another/webdefault.xml</Set>]]>
        </script></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="webdefault-xml-using-jetty-maven-plugin"></a>Using the Jetty Maven Plugin</h4></div></div></div><p>Similarly, when using the <a class="link" href="jetty-maven-plugin.html" title="Configuring the Jetty Maven Plugin">Jetty
      Maven Plugin</a> you provide a customized
      <code class="filename">webdefault.xml</code> file for your webapp as
      follows:</p><div class="informalexample"><script type="syntaxhighlighter" class="brush: xml;toolbar: false">
          <![CDATA[
 
<project>
    ...
    <plugins>
        <plugin>
            ...
            <artifactId>jetty-maven-plugin</artifactId>
            <configuration>
                <webAppConfig>
                  ...
                  <defaultsDescriptor>/my/path/to/webdefault.xml</defaultsDescriptor>
                </webAppConfig>
            </configuration>
        </plugin>
        ...
    </plugins>
    ...
</project>

        ]]>
        </script></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="webdefault-xml-additional-resources"></a>Additional Resources</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="xref" href="jetty-web-xml-config.html" title="jetty-web.xml"><code class="filename">jetty-web.xml</code></a> &#8211;Reference for
          <code class="filename">web.xml</code> files</p></li><li class="listitem"><p><a class="xref" href="override-web-xml.html" title="Jetty override-web.xml">Jetty <code class="filename">override-web.xml</code></a> &#8211;Information for this
          <code class="filename">web.xml</code> -formatted file, applied after the
          webapp's <code class="filename">web.xml</code> webapp.</p></li><li class="listitem"><p><a class="xref" href="jetty-xml-config.html" title="jetty.xml"><code class="filename">jetty.xml</code></a> &#8211;Reference for
          <code class="filename">jetty.xml</code> files</p></li></ul></div></div></div></div><script type="text/javascript">
      SyntaxHighlighter.all()
    </script><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="jetty-env-xml.html"><i class="icon-chevron-left"></i> Previous</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="reference-section.html"><i class="icon-chevron-up"></i> Top</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="override-web-xml.html">Next <i class="icon-chevron-right"></i></a></td></tr><tr><td width="40%" align="left" valign="top"><code class="filename">jetty-env.xml</code>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html"><i class="icon-home"></i> Home</a></td><td width="40%" align="right" valign="top">&nbsp;Jetty <code class="filename">override-web.xml</code></td></tr></table></div><p xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><div class="jetty-callout">
            See an error or something missing?
            <span class="callout"><a href="http://github.com/jetty-project/jetty-documentation">Contribute to this documentation at
                <span class="website"><i class="icon-github"></i> Github!</span></a></span><span style="float: right"><i>(Generated: 2013-10-30T13:20:45-05:00)</i></span></div></p><script xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1149868-7']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
    </script></body></html>