You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2020/02/11 12:57:01 UTC

[tomcat] 02/02: Align MIME type mappings for embedded with those in conf/web.xml

This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 31be526af7bbf558b73264211d260c0398f264f6
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Dec 4 18:03:36 2019 +0000

    Align MIME type mappings for embedded with those in conf/web.xml
    
    Switch Tomcat embedded to loading MIME type mappings from a property
    file generated from the default web.xml so the MIME type mappings are
    consistent regardless of how Tomcat is started.
    Add the code to generate the properties file and a test case to check
    that the two remain in sync.
---
 .../catalina/startup/LocalStrings.properties       |    1 +
 .../catalina/startup/MimeTypeMappings.properties   | 1025 ++++++++++++++++++++
 java/org/apache/catalina/startup/Tomcat.java       |  206 +---
 .../apache/tomcat/buildutil/MimeTypeMappings.java  |   73 ++
 java/org/apache/tomcat/buildutil/Utils.java        |   59 ++
 .../apache/tomcat/buildutil/translate/Import.java  |   32 +-
 .../catalina/startup/TestTomcatNoServer.java       |   92 ++
 webapps/docs/changelog.xml                         |    5 +
 8 files changed, 1278 insertions(+), 215 deletions(-)

diff --git a/java/org/apache/catalina/startup/LocalStrings.properties b/java/org/apache/catalina/startup/LocalStrings.properties
index 93d094a..c857b48 100644
--- a/java/org/apache/catalina/startup/LocalStrings.properties
+++ b/java/org/apache/catalina/startup/LocalStrings.properties
@@ -149,6 +149,7 @@ tomcat.addWebapp.conflictChild=Unable to deploy WAR at [{0}] to context path [{1
 tomcat.addWebapp.conflictFile=Unable to deploy WAR at [{0}] to context path [{1}] because of existing file [{2}]
 tomcat.baseDirMakeFail=Unable to create the directory [{0}] to use as the base directory
 tomcat.baseDirNotDir=The location [{0}] specified for the base directory is not a directory
+tomcat.defaultMimeTypeMappingsFail=Unable to load the default MIME types
 tomcat.homeDirMakeFail=Unable to create the directory [{0}] to use as the home directory
 tomcat.invalidCommandLine=Invalid command line arguments [{0}]
 tomcat.noContextClass=Failed to instantiate context class [{0}] for host [{1}] and url [{2}]
diff --git a/java/org/apache/catalina/startup/MimeTypeMappings.properties b/java/org/apache/catalina/startup/MimeTypeMappings.properties
new file mode 100644
index 0000000..a043c5b
--- /dev/null
+++ b/java/org/apache/catalina/startup/MimeTypeMappings.properties
@@ -0,0 +1,1025 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+123=application/vnd.lotus-1-2-3
+3dml=text/vnd.in3d.3dml
+3ds=image/x-3ds
+3g2=video/3gpp2
+3gp=video/3gpp
+7z=application/x-7z-compressed
+aab=application/x-authorware-bin
+aac=audio/x-aac
+aam=application/x-authorware-map
+aas=application/x-authorware-seg
+abs=audio/x-mpeg
+abw=application/x-abiword
+ac=application/pkix-attr-cert
+acc=application/vnd.americandynamics.acc
+ace=application/x-ace-compressed
+acu=application/vnd.acucobol
+acutc=application/vnd.acucorp
+adp=audio/adpcm
+aep=application/vnd.audiograph
+afm=application/x-font-type1
+afp=application/vnd.ibm.modcap
+ahead=application/vnd.ahead.space
+ai=application/postscript
+aif=audio/x-aiff
+aifc=audio/x-aiff
+aiff=audio/x-aiff
+aim=application/x-aim
+air=application/vnd.adobe.air-application-installer-package+zip
+ait=application/vnd.dvb.ait
+ami=application/vnd.amiga.ami
+anx=application/annodex
+apk=application/vnd.android.package-archive
+appcache=text/cache-manifest
+application=application/x-ms-application
+apr=application/vnd.lotus-approach
+arc=application/x-freearc
+art=image/x-jg
+asc=application/pgp-signature
+asf=video/x-ms-asf
+asm=text/x-asm
+aso=application/vnd.accpac.simply.aso
+asx=video/x-ms-asf
+atc=application/vnd.acucorp
+atom=application/atom+xml
+atomcat=application/atomcat+xml
+atomsvc=application/atomsvc+xml
+atx=application/vnd.antix.game-component
+au=audio/basic
+avi=video/x-msvideo
+avx=video/x-rad-screenplay
+aw=application/applixware
+axa=audio/annodex
+axv=video/annodex
+azf=application/vnd.airzip.filesecure.azf
+azs=application/vnd.airzip.filesecure.azs
+azw=application/vnd.amazon.ebook
+bat=application/x-msdownload
+bcpio=application/x-bcpio
+bdf=application/x-font-bdf
+bdm=application/vnd.syncml.dm+wbxml
+bed=application/vnd.realvnc.bed
+bh2=application/vnd.fujitsu.oasysprs
+bin=application/octet-stream
+blb=application/x-blorb
+blorb=application/x-blorb
+bmi=application/vnd.bmi
+bmp=image/bmp
+body=text/html
+book=application/vnd.framemaker
+box=application/vnd.previewsystems.box
+boz=application/x-bzip2
+bpk=application/octet-stream
+btif=image/prs.btif
+bz=application/x-bzip
+bz2=application/x-bzip2
+c=text/x-c
+c11amc=application/vnd.cluetrust.cartomobile-config
+c11amz=application/vnd.cluetrust.cartomobile-config-pkg
+c4d=application/vnd.clonk.c4group
+c4f=application/vnd.clonk.c4group
+c4g=application/vnd.clonk.c4group
+c4p=application/vnd.clonk.c4group
+c4u=application/vnd.clonk.c4group
+cab=application/vnd.ms-cab-compressed
+caf=audio/x-caf
+cap=application/vnd.tcpdump.pcap
+car=application/vnd.curl.car
+cat=application/vnd.ms-pki.seccat
+cb7=application/x-cbr
+cba=application/x-cbr
+cbr=application/x-cbr
+cbt=application/x-cbr
+cbz=application/x-cbr
+cc=text/x-c
+cct=application/x-director
+ccxml=application/ccxml+xml
+cdbcmsg=application/vnd.contact.cmsg
+cdf=application/x-cdf
+cdkey=application/vnd.mediastation.cdkey
+cdmia=application/cdmi-capability
+cdmic=application/cdmi-container
+cdmid=application/cdmi-domain
+cdmio=application/cdmi-object
+cdmiq=application/cdmi-queue
+cdx=chemical/x-cdx
+cdxml=application/vnd.chemdraw+xml
+cdy=application/vnd.cinderella
+cer=application/pkix-cert
+cfs=application/x-cfs-compressed
+cgm=image/cgm
+chat=application/x-chat
+chm=application/vnd.ms-htmlhelp
+chrt=application/vnd.kde.kchart
+cif=chemical/x-cif
+cii=application/vnd.anser-web-certificate-issue-initiation
+cil=application/vnd.ms-artgalry
+cla=application/vnd.claymore
+class=application/java
+clkk=application/vnd.crick.clicker.keyboard
+clkp=application/vnd.crick.clicker.palette
+clkt=application/vnd.crick.clicker.template
+clkw=application/vnd.crick.clicker.wordbank
+clkx=application/vnd.crick.clicker
+clp=application/x-msclip
+cmc=application/vnd.cosmocaller
+cmdf=chemical/x-cmdf
+cml=chemical/x-cml
+cmp=application/vnd.yellowriver-custom-menu
+cmx=image/x-cmx
+cod=application/vnd.rim.cod
+com=application/x-msdownload
+conf=text/plain
+cpio=application/x-cpio
+cpp=text/x-c
+cpt=application/mac-compactpro
+crd=application/x-mscardfile
+crl=application/pkix-crl
+crt=application/x-x509-ca-cert
+cryptonote=application/vnd.rig.cryptonote
+csh=application/x-csh
+csml=chemical/x-csml
+csp=application/vnd.commonspace
+css=text/css
+cst=application/x-director
+csv=text/csv
+cu=application/cu-seeme
+curl=text/vnd.curl
+cww=application/prs.cww
+cxt=application/x-director
+cxx=text/x-c
+dae=model/vnd.collada+xml
+daf=application/vnd.mobius.daf
+dart=application/vnd.dart
+dataless=application/vnd.fdsn.seed
+davmount=application/davmount+xml
+dbk=application/docbook+xml
+dcr=application/x-director
+dcurl=text/vnd.curl.dcurl
+dd2=application/vnd.oma.dd2+xml
+ddd=application/vnd.fujixerox.ddd
+deb=application/x-debian-package
+def=text/plain
+deploy=application/octet-stream
+der=application/x-x509-ca-cert
+dfac=application/vnd.dreamfactory
+dgc=application/x-dgc-compressed
+dib=image/bmp
+dic=text/x-c
+dir=application/x-director
+dis=application/vnd.mobius.dis
+dist=application/octet-stream
+distz=application/octet-stream
+djv=image/vnd.djvu
+djvu=image/vnd.djvu
+dll=application/x-msdownload
+dmg=application/x-apple-diskimage
+dmp=application/vnd.tcpdump.pcap
+dms=application/octet-stream
+dna=application/vnd.dna
+doc=application/msword
+docm=application/vnd.ms-word.document.macroenabled.12
+docx=application/vnd.openxmlformats-officedocument.wordprocessingml.document
+dot=application/msword
+dotm=application/vnd.ms-word.template.macroenabled.12
+dotx=application/vnd.openxmlformats-officedocument.wordprocessingml.template
+dp=application/vnd.osgi.dp
+dpg=application/vnd.dpgraph
+dra=audio/vnd.dra
+dsc=text/prs.lines.tag
+dssc=application/dssc+der
+dtb=application/x-dtbook+xml
+dtd=application/xml-dtd
+dts=audio/vnd.dts
+dtshd=audio/vnd.dts.hd
+dump=application/octet-stream
+dv=video/x-dv
+dvb=video/vnd.dvb.file
+dvi=application/x-dvi
+dwf=model/vnd.dwf
+dwg=image/vnd.dwg
+dxf=image/vnd.dxf
+dxp=application/vnd.spotfire.dxp
+dxr=application/x-director
+ecelp4800=audio/vnd.nuera.ecelp4800
+ecelp7470=audio/vnd.nuera.ecelp7470
+ecelp9600=audio/vnd.nuera.ecelp9600
+ecma=application/ecmascript
+edm=application/vnd.novadigm.edm
+edx=application/vnd.novadigm.edx
+efif=application/vnd.picsel
+ei6=application/vnd.pg.osasli
+elc=application/octet-stream
+emf=application/x-msmetafile
+eml=message/rfc822
+emma=application/emma+xml
+emz=application/x-msmetafile
+eol=audio/vnd.digital-winds
+eot=application/vnd.ms-fontobject
+eps=application/postscript
+epub=application/epub+zip
+es3=application/vnd.eszigno3+xml
+esa=application/vnd.osgi.subsystem
+esf=application/vnd.epson.esf
+et3=application/vnd.eszigno3+xml
+etx=text/x-setext
+eva=application/x-eva
+evy=application/x-envoy
+exe=application/octet-stream
+exi=application/exi
+ext=application/vnd.novadigm.ext
+ez=application/andrew-inset
+ez2=application/vnd.ezpix-album
+ez3=application/vnd.ezpix-package
+f=text/x-fortran
+f4v=video/x-f4v
+f77=text/x-fortran
+f90=text/x-fortran
+fbs=image/vnd.fastbidsheet
+fcdt=application/vnd.adobe.formscentral.fcdt
+fcs=application/vnd.isac.fcs
+fdf=application/vnd.fdf
+fe_launch=application/vnd.denovo.fcselayout-link
+fg5=application/vnd.fujitsu.oasysgp
+fgd=application/x-director
+fh=image/x-freehand
+fh4=image/x-freehand
+fh5=image/x-freehand
+fh7=image/x-freehand
+fhc=image/x-freehand
+fig=application/x-xfig
+flac=audio/flac
+fli=video/x-fli
+flo=application/vnd.micrografx.flo
+flv=video/x-flv
+flw=application/vnd.kde.kivio
+flx=text/vnd.fmi.flexstor
+fly=text/vnd.fly
+fm=application/vnd.framemaker
+fnc=application/vnd.frogans.fnc
+for=text/x-fortran
+fpx=image/vnd.fpx
+frame=application/vnd.framemaker
+fsc=application/vnd.fsc.weblaunch
+fst=image/vnd.fst
+ftc=application/vnd.fluxtime.clip
+fti=application/vnd.anser-web-funds-transfer-initiation
+fvt=video/vnd.fvt
+fxp=application/vnd.adobe.fxp
+fxpl=application/vnd.adobe.fxp
+fzs=application/vnd.fuzzysheet
+g2w=application/vnd.geoplan
+g3=image/g3fax
+g3w=application/vnd.geospace
+gac=application/vnd.groove-account
+gam=application/x-tads
+gbr=application/rpki-ghostbusters
+gca=application/x-gca-compressed
+gdl=model/vnd.gdl
+geo=application/vnd.dynageo
+gex=application/vnd.geometry-explorer
+ggb=application/vnd.geogebra.file
+ggt=application/vnd.geogebra.tool
+ghf=application/vnd.groove-help
+gif=image/gif
+gim=application/vnd.groove-identity-message
+gml=application/gml+xml
+gmx=application/vnd.gmx
+gnumeric=application/x-gnumeric
+gph=application/vnd.flographit
+gpx=application/gpx+xml
+gqf=application/vnd.grafeq
+gqs=application/vnd.grafeq
+gram=application/srgs
+gramps=application/x-gramps-xml
+gre=application/vnd.geometry-explorer
+grv=application/vnd.groove-injector
+grxml=application/srgs+xml
+gsf=application/x-font-ghostscript
+gtar=application/x-gtar
+gtm=application/vnd.groove-tool-message
+gtw=model/vnd.gtw
+gv=text/vnd.graphviz
+gxf=application/gxf
+gxt=application/vnd.geonext
+gz=application/x-gzip
+h=text/x-c
+h261=video/h261
+h263=video/h263
+h264=video/h264
+hal=application/vnd.hal+xml
+hbci=application/vnd.hbci
+hdf=application/x-hdf
+hh=text/x-c
+hlp=application/winhlp
+hpgl=application/vnd.hp-hpgl
+hpid=application/vnd.hp-hpid
+hps=application/vnd.hp-hps
+hqx=application/mac-binhex40
+htc=text/x-component
+htke=application/vnd.kenameaapp
+htm=text/html
+html=text/html
+hvd=application/vnd.yamaha.hv-dic
+hvp=application/vnd.yamaha.hv-voice
+hvs=application/vnd.yamaha.hv-script
+i2g=application/vnd.intergeo
+icc=application/vnd.iccprofile
+ice=x-conference/x-cooltalk
+icm=application/vnd.iccprofile
+ico=image/x-icon
+ics=text/calendar
+ief=image/ief
+ifb=text/calendar
+ifm=application/vnd.shana.informed.formdata
+iges=model/iges
+igl=application/vnd.igloader
+igm=application/vnd.insors.igm
+igs=model/iges
+igx=application/vnd.micrografx.igx
+iif=application/vnd.shana.informed.interchange
+imp=application/vnd.accpac.simply.imp
+ims=application/vnd.ms-ims
+in=text/plain
+ink=application/inkml+xml
+inkml=application/inkml+xml
+install=application/x-install-instructions
+iota=application/vnd.astraea-software.iota
+ipfix=application/ipfix
+ipk=application/vnd.shana.informed.package
+irm=application/vnd.ibm.rights-management
+irp=application/vnd.irepository.package+xml
+iso=application/x-iso9660-image
+itp=application/vnd.shana.informed.formtemplate
+ivp=application/vnd.immervision-ivp
+ivu=application/vnd.immervision-ivu
+jad=text/vnd.sun.j2me.app-descriptor
+jam=application/vnd.jam
+jar=application/java-archive
+java=text/x-java-source
+jisp=application/vnd.jisp
+jlt=application/vnd.hp-jlyt
+jnlp=application/x-java-jnlp-file
+joda=application/vnd.joost.joda-archive
+jpe=image/jpeg
+jpeg=image/jpeg
+jpg=image/jpeg
+jpgm=video/jpm
+jpgv=video/jpeg
+jpm=video/jpm
+js=application/javascript
+jsf=text/plain
+json=application/json
+jsonml=application/jsonml+json
+jspf=text/plain
+kar=audio/midi
+karbon=application/vnd.kde.karbon
+kfo=application/vnd.kde.kformula
+kia=application/vnd.kidspiration
+kml=application/vnd.google-earth.kml+xml
+kmz=application/vnd.google-earth.kmz
+kne=application/vnd.kinar
+knp=application/vnd.kinar
+kon=application/vnd.kde.kontour
+kpr=application/vnd.kde.kpresenter
+kpt=application/vnd.kde.kpresenter
+kpxx=application/vnd.ds-keypoint
+ksp=application/vnd.kde.kspread
+ktr=application/vnd.kahootz
+ktx=image/ktx
+ktz=application/vnd.kahootz
+kwd=application/vnd.kde.kword
+kwt=application/vnd.kde.kword
+lasxml=application/vnd.las.las+xml
+latex=application/x-latex
+lbd=application/vnd.llamagraphics.life-balance.desktop
+lbe=application/vnd.llamagraphics.life-balance.exchange+xml
+les=application/vnd.hhe.lesson-player
+lha=application/x-lzh-compressed
+link66=application/vnd.route66.link66+xml
+list=text/plain
+list3820=application/vnd.ibm.modcap
+listafp=application/vnd.ibm.modcap
+lnk=application/x-ms-shortcut
+log=text/plain
+lostxml=application/lost+xml
+lrf=application/octet-stream
+lrm=application/vnd.ms-lrm
+ltf=application/vnd.frogans.ltf
+lvp=audio/vnd.lucent.voice
+lwp=application/vnd.lotus-wordpro
+lzh=application/x-lzh-compressed
+m13=application/x-msmediaview
+m14=application/x-msmediaview
+m1v=video/mpeg
+m21=application/mp21
+m2a=audio/mpeg
+m2v=video/mpeg
+m3a=audio/mpeg
+m3u=audio/x-mpegurl
+m3u8=application/vnd.apple.mpegurl
+m4a=audio/mp4
+m4b=audio/mp4
+m4r=audio/mp4
+m4u=video/vnd.mpegurl
+m4v=video/mp4
+ma=application/mathematica
+mac=image/x-macpaint
+mads=application/mads+xml
+mag=application/vnd.ecowin.chart
+maker=application/vnd.framemaker
+man=text/troff
+mar=application/octet-stream
+mathml=application/mathml+xml
+mb=application/mathematica
+mbk=application/vnd.mobius.mbk
+mbox=application/mbox
+mc1=application/vnd.medcalcdata
+mcd=application/vnd.mcd
+mcurl=text/vnd.curl.mcurl
+mdb=application/x-msaccess
+mdi=image/vnd.ms-modi
+me=text/troff
+mesh=model/mesh
+meta4=application/metalink4+xml
+metalink=application/metalink+xml
+mets=application/mets+xml
+mfm=application/vnd.mfmp
+mft=application/rpki-manifest
+mgp=application/vnd.osgeo.mapguide.package
+mgz=application/vnd.proteus.magazine
+mid=audio/midi
+midi=audio/midi
+mie=application/x-mie
+mif=application/x-mif
+mime=message/rfc822
+mj2=video/mj2
+mjp2=video/mj2
+mk3d=video/x-matroska
+mka=audio/x-matroska
+mks=video/x-matroska
+mkv=video/x-matroska
+mlp=application/vnd.dolby.mlp
+mmd=application/vnd.chipnuts.karaoke-mmd
+mmf=application/vnd.smaf
+mmr=image/vnd.fujixerox.edmics-mmr
+mng=video/x-mng
+mny=application/x-msmoney
+mobi=application/x-mobipocket-ebook
+mods=application/mods+xml
+mov=video/quicktime
+movie=video/x-sgi-movie
+mp1=audio/mpeg
+mp2=audio/mpeg
+mp21=application/mp21
+mp2a=audio/mpeg
+mp3=audio/mpeg
+mp4=video/mp4
+mp4a=audio/mp4
+mp4s=application/mp4
+mp4v=video/mp4
+mpa=audio/mpeg
+mpc=application/vnd.mophun.certificate
+mpe=video/mpeg
+mpeg=video/mpeg
+mpega=audio/x-mpeg
+mpg=video/mpeg
+mpg4=video/mp4
+mpga=audio/mpeg
+mpkg=application/vnd.apple.installer+xml
+mpm=application/vnd.blueice.multipass
+mpn=application/vnd.mophun.application
+mpp=application/vnd.ms-project
+mpt=application/vnd.ms-project
+mpv2=video/mpeg2
+mpy=application/vnd.ibm.minipay
+mqy=application/vnd.mobius.mqy
+mrc=application/marc
+mrcx=application/marcxml+xml
+ms=text/troff
+mscml=application/mediaservercontrol+xml
+mseed=application/vnd.fdsn.mseed
+mseq=application/vnd.mseq
+msf=application/vnd.epson.msf
+msh=model/mesh
+msi=application/x-msdownload
+msl=application/vnd.mobius.msl
+msty=application/vnd.muvee.style
+mts=model/vnd.mts
+mus=application/vnd.musician
+musicxml=application/vnd.recordare.musicxml+xml
+mvb=application/x-msmediaview
+mwf=application/vnd.mfer
+mxf=application/mxf
+mxl=application/vnd.recordare.musicxml
+mxml=application/xv+xml
+mxs=application/vnd.triscape.mxs
+mxu=video/vnd.mpegurl
+n-gage=application/vnd.nokia.n-gage.symbian.install
+n3=text/n3
+nb=application/mathematica
+nbp=application/vnd.wolfram.player
+nc=application/x-netcdf
+ncx=application/x-dtbncx+xml
+nfo=text/x-nfo
+ngdat=application/vnd.nokia.n-gage.data
+nitf=application/vnd.nitf
+nlu=application/vnd.neurolanguage.nlu
+nml=application/vnd.enliven
+nnd=application/vnd.noblenet-directory
+nns=application/vnd.noblenet-sealer
+nnw=application/vnd.noblenet-web
+npx=image/vnd.net-fpx
+nsc=application/x-conference
+nsf=application/vnd.lotus-notes
+ntf=application/vnd.nitf
+nzb=application/x-nzb
+oa2=application/vnd.fujitsu.oasys2
+oa3=application/vnd.fujitsu.oasys3
+oas=application/vnd.fujitsu.oasys
+obd=application/x-msbinder
+obj=application/x-tgif
+oda=application/oda
+odb=application/vnd.oasis.opendocument.database
+odc=application/vnd.oasis.opendocument.chart
+odf=application/vnd.oasis.opendocument.formula
+odft=application/vnd.oasis.opendocument.formula-template
+odg=application/vnd.oasis.opendocument.graphics
+odi=application/vnd.oasis.opendocument.image
+odm=application/vnd.oasis.opendocument.text-master
+odp=application/vnd.oasis.opendocument.presentation
+ods=application/vnd.oasis.opendocument.spreadsheet
+odt=application/vnd.oasis.opendocument.text
+oga=audio/ogg
+ogg=audio/ogg
+ogv=video/ogg
+ogx=application/ogg
+omdoc=application/omdoc+xml
+onepkg=application/onenote
+onetmp=application/onenote
+onetoc=application/onenote
+onetoc2=application/onenote
+opf=application/oebps-package+xml
+opml=text/x-opml
+oprc=application/vnd.palm
+org=application/vnd.lotus-organizer
+osf=application/vnd.yamaha.openscoreformat
+osfpvg=application/vnd.yamaha.openscoreformat.osfpvg+xml
+otc=application/vnd.oasis.opendocument.chart-template
+otf=font/otf
+otg=application/vnd.oasis.opendocument.graphics-template
+oth=application/vnd.oasis.opendocument.text-web
+oti=application/vnd.oasis.opendocument.image-template
+otp=application/vnd.oasis.opendocument.presentation-template
+ots=application/vnd.oasis.opendocument.spreadsheet-template
+ott=application/vnd.oasis.opendocument.text-template
+oxps=application/oxps
+oxt=application/vnd.openofficeorg.extension
+p=text/x-pascal
+p10=application/pkcs10
+p12=application/x-pkcs12
+p7b=application/x-pkcs7-certificates
+p7c=application/pkcs7-mime
+p7m=application/pkcs7-mime
+p7r=application/x-pkcs7-certreqresp
+p7s=application/pkcs7-signature
+p8=application/pkcs8
+pas=text/x-pascal
+paw=application/vnd.pawaafile
+pbd=application/vnd.powerbuilder6
+pbm=image/x-portable-bitmap
+pcap=application/vnd.tcpdump.pcap
+pcf=application/x-font-pcf
+pcl=application/vnd.hp-pcl
+pclxl=application/vnd.hp-pclxl
+pct=image/pict
+pcurl=application/vnd.curl.pcurl
+pcx=image/x-pcx
+pdb=application/vnd.palm
+pdf=application/pdf
+pfa=application/x-font-type1
+pfb=application/x-font-type1
+pfm=application/x-font-type1
+pfr=application/font-tdpfr
+pfx=application/x-pkcs12
+pgm=image/x-portable-graymap
+pgn=application/x-chess-pgn
+pgp=application/pgp-encrypted
+pic=image/pict
+pict=image/pict
+pkg=application/octet-stream
+pki=application/pkixcmp
+pkipath=application/pkix-pkipath
+plb=application/vnd.3gpp.pic-bw-large
+plc=application/vnd.mobius.plc
+plf=application/vnd.pocketlearn
+pls=audio/x-scpls
+pml=application/vnd.ctc-posml
+png=image/png
+pnm=image/x-portable-anymap
+pnt=image/x-macpaint
+portpkg=application/vnd.macports.portpkg
+pot=application/vnd.ms-powerpoint
+potm=application/vnd.ms-powerpoint.template.macroenabled.12
+potx=application/vnd.openxmlformats-officedocument.presentationml.template
+ppam=application/vnd.ms-powerpoint.addin.macroenabled.12
+ppd=application/vnd.cups-ppd
+ppm=image/x-portable-pixmap
+pps=application/vnd.ms-powerpoint
+ppsm=application/vnd.ms-powerpoint.slideshow.macroenabled.12
+ppsx=application/vnd.openxmlformats-officedocument.presentationml.slideshow
+ppt=application/vnd.ms-powerpoint
+pptm=application/vnd.ms-powerpoint.presentation.macroenabled.12
+pptx=application/vnd.openxmlformats-officedocument.presentationml.presentation
+pqa=application/vnd.palm
+prc=application/x-mobipocket-ebook
+pre=application/vnd.lotus-freelance
+prf=application/pics-rules
+ps=application/postscript
+psb=application/vnd.3gpp.pic-bw-small
+psd=image/vnd.adobe.photoshop
+psf=application/x-font-linux-psf
+pskcxml=application/pskc+xml
+ptid=application/vnd.pvi.ptid1
+pub=application/x-mspublisher
+pvb=application/vnd.3gpp.pic-bw-var
+pwn=application/vnd.3m.post-it-notes
+pya=audio/vnd.ms-playready.media.pya
+pyv=video/vnd.ms-playready.media.pyv
+qam=application/vnd.epson.quickanime
+qbo=application/vnd.intu.qbo
+qfx=application/vnd.intu.qfx
+qps=application/vnd.publishare-delta-tree
+qt=video/quicktime
+qti=image/x-quicktime
+qtif=image/x-quicktime
+qwd=application/vnd.quark.quarkxpress
+qwt=application/vnd.quark.quarkxpress
+qxb=application/vnd.quark.quarkxpress
+qxd=application/vnd.quark.quarkxpress
+qxl=application/vnd.quark.quarkxpress
+qxt=application/vnd.quark.quarkxpress
+ra=audio/x-pn-realaudio
+ram=audio/x-pn-realaudio
+rar=application/x-rar-compressed
+ras=image/x-cmu-raster
+rcprofile=application/vnd.ipunplugged.rcprofile
+rdf=application/rdf+xml
+rdz=application/vnd.data-vision.rdz
+rep=application/vnd.businessobjects
+res=application/x-dtbresource+xml
+rgb=image/x-rgb
+rif=application/reginfo+xml
+rip=audio/vnd.rip
+ris=application/x-research-info-systems
+rl=application/resource-lists+xml
+rlc=image/vnd.fujixerox.edmics-rlc
+rld=application/resource-lists-diff+xml
+rm=application/vnd.rn-realmedia
+rmi=audio/midi
+rmp=audio/x-pn-realaudio-plugin
+rms=application/vnd.jcp.javame.midlet-rms
+rmvb=application/vnd.rn-realmedia-vbr
+rnc=application/relax-ng-compact-syntax
+roa=application/rpki-roa
+roff=text/troff
+rp9=application/vnd.cloanto.rp9
+rpss=application/vnd.nokia.radio-presets
+rpst=application/vnd.nokia.radio-preset
+rq=application/sparql-query
+rs=application/rls-services+xml
+rsd=application/rsd+xml
+rss=application/rss+xml
+rtf=application/rtf
+rtx=text/richtext
+s=text/x-asm
+s3m=audio/s3m
+saf=application/vnd.yamaha.smaf-audio
+sbml=application/sbml+xml
+sc=application/vnd.ibm.secure-container
+scd=application/x-msschedule
+scm=application/vnd.lotus-screencam
+scq=application/scvp-cv-request
+scs=application/scvp-cv-response
+scurl=text/vnd.curl.scurl
+sda=application/vnd.stardivision.draw
+sdc=application/vnd.stardivision.calc
+sdd=application/vnd.stardivision.impress
+sdkd=application/vnd.solent.sdkm+xml
+sdkm=application/vnd.solent.sdkm+xml
+sdp=application/sdp
+sdw=application/vnd.stardivision.writer
+see=application/vnd.seemail
+seed=application/vnd.fdsn.seed
+sema=application/vnd.sema
+semd=application/vnd.semd
+semf=application/vnd.semf
+ser=application/java-serialized-object
+setpay=application/set-payment-initiation
+setreg=application/set-registration-initiation
+sfd-hdstx=application/vnd.hydrostatix.sof-data
+sfs=application/vnd.spotfire.sfs
+sfv=text/x-sfv
+sgi=image/sgi
+sgl=application/vnd.stardivision.writer-global
+sgm=text/sgml
+sgml=text/sgml
+sh=application/x-sh
+shar=application/x-shar
+shf=application/shf+xml
+sid=image/x-mrsid-image
+sig=application/pgp-signature
+sil=audio/silk
+silo=model/mesh
+sis=application/vnd.symbian.install
+sisx=application/vnd.symbian.install
+sit=application/x-stuffit
+sitx=application/x-stuffitx
+skd=application/vnd.koan
+skm=application/vnd.koan
+skp=application/vnd.koan
+skt=application/vnd.koan
+sldm=application/vnd.ms-powerpoint.slide.macroenabled.12
+sldx=application/vnd.openxmlformats-officedocument.presentationml.slide
+slt=application/vnd.epson.salt
+sm=application/vnd.stepmania.stepchart
+smf=application/vnd.stardivision.math
+smi=application/smil+xml
+smil=application/smil+xml
+smv=video/x-smv
+smzip=application/vnd.stepmania.package
+snd=audio/basic
+snf=application/x-font-snf
+so=application/octet-stream
+spc=application/x-pkcs7-certificates
+spf=application/vnd.yamaha.smaf-phrase
+spl=application/x-futuresplash
+spot=text/vnd.in3d.spot
+spp=application/scvp-vp-response
+spq=application/scvp-vp-request
+spx=audio/ogg
+sql=application/x-sql
+src=application/x-wais-source
+srt=application/x-subrip
+sru=application/sru+xml
+srx=application/sparql-results+xml
+ssdl=application/ssdl+xml
+sse=application/vnd.kodak-descriptor
+ssf=application/vnd.epson.ssf
+ssml=application/ssml+xml
+st=application/vnd.sailingtracker.track
+stc=application/vnd.sun.xml.calc.template
+std=application/vnd.sun.xml.draw.template
+stf=application/vnd.wt.stf
+sti=application/vnd.sun.xml.impress.template
+stk=application/hyperstudio
+stl=application/vnd.ms-pki.stl
+str=application/vnd.pg.format
+stw=application/vnd.sun.xml.writer.template
+sub=text/vnd.dvb.subtitle
+sus=application/vnd.sus-calendar
+susp=application/vnd.sus-calendar
+sv4cpio=application/x-sv4cpio
+sv4crc=application/x-sv4crc
+svc=application/vnd.dvb.service
+svd=application/vnd.svd
+svg=image/svg+xml
+svgz=image/svg+xml
+swa=application/x-director
+swf=application/x-shockwave-flash
+swi=application/vnd.aristanetworks.swi
+sxc=application/vnd.sun.xml.calc
+sxd=application/vnd.sun.xml.draw
+sxg=application/vnd.sun.xml.writer.global
+sxi=application/vnd.sun.xml.impress
+sxm=application/vnd.sun.xml.math
+sxw=application/vnd.sun.xml.writer
+t=text/troff
+t3=application/x-t3vm-image
+taglet=application/vnd.mynfc
+tao=application/vnd.tao.intent-module-archive
+tar=application/x-tar
+tcap=application/vnd.3gpp2.tcap
+tcl=application/x-tcl
+teacher=application/vnd.smart.teacher
+tei=application/tei+xml
+teicorpus=application/tei+xml
+tex=application/x-tex
+texi=application/x-texinfo
+texinfo=application/x-texinfo
+text=text/plain
+tfi=application/thraud+xml
+tfm=application/x-tex-tfm
+tga=image/x-tga
+thmx=application/vnd.ms-officetheme
+tif=image/tiff
+tiff=image/tiff
+tmo=application/vnd.tmobile-livetv
+torrent=application/x-bittorrent
+tpl=application/vnd.groove-tool-template
+tpt=application/vnd.trid.tpt
+tr=text/troff
+tra=application/vnd.trueapp
+trm=application/x-msterminal
+tsd=application/timestamped-data
+tsv=text/tab-separated-values
+ttc=font/collection
+ttf=font/ttf
+ttl=text/turtle
+twd=application/vnd.simtech-mindmapper
+twds=application/vnd.simtech-mindmapper
+txd=application/vnd.genomatix.tuxedo
+txf=application/vnd.mobius.txf
+txt=text/plain
+u32=application/x-authorware-bin
+udeb=application/x-debian-package
+ufd=application/vnd.ufdl
+ufdl=application/vnd.ufdl
+ulw=audio/basic
+ulx=application/x-glulx
+umj=application/vnd.umajin
+unityweb=application/vnd.unity
+uoml=application/vnd.uoml+xml
+uri=text/uri-list
+uris=text/uri-list
+urls=text/uri-list
+ustar=application/x-ustar
+utz=application/vnd.uiq.theme
+uu=text/x-uuencode
+uva=audio/vnd.dece.audio
+uvd=application/vnd.dece.data
+uvf=application/vnd.dece.data
+uvg=image/vnd.dece.graphic
+uvh=video/vnd.dece.hd
+uvi=image/vnd.dece.graphic
+uvm=video/vnd.dece.mobile
+uvp=video/vnd.dece.pd
+uvs=video/vnd.dece.sd
+uvt=application/vnd.dece.ttml+xml
+uvu=video/vnd.uvvu.mp4
+uvv=video/vnd.dece.video
+uvva=audio/vnd.dece.audio
+uvvd=application/vnd.dece.data
+uvvf=application/vnd.dece.data
+uvvg=image/vnd.dece.graphic
+uvvh=video/vnd.dece.hd
+uvvi=image/vnd.dece.graphic
+uvvm=video/vnd.dece.mobile
+uvvp=video/vnd.dece.pd
+uvvs=video/vnd.dece.sd
+uvvt=application/vnd.dece.ttml+xml
+uvvu=video/vnd.uvvu.mp4
+uvvv=video/vnd.dece.video
+uvvx=application/vnd.dece.unspecified
+uvvz=application/vnd.dece.zip
+uvx=application/vnd.dece.unspecified
+uvz=application/vnd.dece.zip
+vcard=text/vcard
+vcd=application/x-cdlink
+vcf=text/x-vcard
+vcg=application/vnd.groove-vcard
+vcs=text/x-vcalendar
+vcx=application/vnd.vcx
+vis=application/vnd.visionary
+viv=video/vnd.vivo
+vob=video/x-ms-vob
+vor=application/vnd.stardivision.writer
+vox=application/x-authorware-bin
+vrml=model/vrml
+vsd=application/vnd.visio
+vsf=application/vnd.vsf
+vss=application/vnd.visio
+vst=application/vnd.visio
+vsw=application/vnd.visio
+vtu=model/vnd.vtu
+vxml=application/voicexml+xml
+w3d=application/x-director
+wad=application/x-doom
+wav=audio/x-wav
+wax=audio/x-ms-wax
+wbmp=image/vnd.wap.wbmp
+wbs=application/vnd.criticaltools.wbs+xml
+wbxml=application/vnd.wap.wbxml
+wcm=application/vnd.ms-works
+wdb=application/vnd.ms-works
+wdp=image/vnd.ms-photo
+weba=audio/webm
+webm=video/webm
+webp=image/webp
+wg=application/vnd.pmi.widget
+wgt=application/widget
+wks=application/vnd.ms-works
+wm=video/x-ms-wm
+wma=audio/x-ms-wma
+wmd=application/x-ms-wmd
+wmf=application/x-msmetafile
+wml=text/vnd.wap.wml
+wmlc=application/vnd.wap.wmlc
+wmls=text/vnd.wap.wmlscript
+wmlsc=application/vnd.wap.wmlscriptc
+wmv=video/x-ms-wmv
+wmx=video/x-ms-wmx
+wmz=application/x-msmetafile
+woff=font/woff
+woff2=font/woff2
+wpd=application/vnd.wordperfect
+wpl=application/vnd.ms-wpl
+wps=application/vnd.ms-works
+wqd=application/vnd.wqd
+wri=application/x-mswrite
+wrl=model/vrml
+wsdl=application/wsdl+xml
+wspolicy=application/wspolicy+xml
+wtb=application/vnd.webturbo
+wvx=video/x-ms-wvx
+x32=application/x-authorware-bin
+x3d=model/x3d+xml
+x3db=model/x3d+binary
+x3dbz=model/x3d+binary
+x3dv=model/x3d+vrml
+x3dvz=model/x3d+vrml
+x3dz=model/x3d+xml
+xaml=application/xaml+xml
+xap=application/x-silverlight-app
+xar=application/vnd.xara
+xbap=application/x-ms-xbap
+xbd=application/vnd.fujixerox.docuworks.binder
+xbm=image/x-xbitmap
+xdf=application/xcap-diff+xml
+xdm=application/vnd.syncml.dm+xml
+xdp=application/vnd.adobe.xdp+xml
+xdssc=application/dssc+xml
+xdw=application/vnd.fujixerox.docuworks
+xenc=application/xenc+xml
+xer=application/patch-ops-error+xml
+xfdf=application/vnd.adobe.xfdf
+xfdl=application/vnd.xfdl
+xht=application/xhtml+xml
+xhtml=application/xhtml+xml
+xhvml=application/xv+xml
+xif=image/vnd.xiff
+xla=application/vnd.ms-excel
+xlam=application/vnd.ms-excel.addin.macroenabled.12
+xlc=application/vnd.ms-excel
+xlf=application/x-xliff+xml
+xlm=application/vnd.ms-excel
+xls=application/vnd.ms-excel
+xlsb=application/vnd.ms-excel.sheet.binary.macroenabled.12
+xlsm=application/vnd.ms-excel.sheet.macroenabled.12
+xlsx=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
+xlt=application/vnd.ms-excel
+xltm=application/vnd.ms-excel.template.macroenabled.12
+xltx=application/vnd.openxmlformats-officedocument.spreadsheetml.template
+xlw=application/vnd.ms-excel
+xm=audio/xm
+xml=application/xml
+xo=application/vnd.olpc-sugar
+xop=application/xop+xml
+xpi=application/x-xpinstall
+xpl=application/xproc+xml
+xpm=image/x-xpixmap
+xpr=application/vnd.is-xpr
+xps=application/vnd.ms-xpsdocument
+xpw=application/vnd.intercon.formnet
+xpx=application/vnd.intercon.formnet
+xsl=application/xml
+xslt=application/xslt+xml
+xsm=application/vnd.syncml+xml
+xspf=application/xspf+xml
+xul=application/vnd.mozilla.xul+xml
+xvm=application/xv+xml
+xvml=application/xv+xml
+xwd=image/x-xwindowdump
+xyz=chemical/x-xyz
+xz=application/x-xz
+yang=application/yang
+yin=application/yin+xml
+z=application/x-compress
+z1=application/x-zmachine
+z2=application/x-zmachine
+z3=application/x-zmachine
+z4=application/x-zmachine
+z5=application/x-zmachine
+z6=application/x-zmachine
+z7=application/x-zmachine
+z8=application/x-zmachine
+zaz=application/vnd.zzazz.deck+xml
+zip=application/zip
+zir=application/vnd.zul
+zirz=application/vnd.zul
+zmm=application/vnd.handheld-entertainment+xml
diff --git a/java/org/apache/catalina/startup/Tomcat.java b/java/org/apache/catalina/startup/Tomcat.java
index 15fdd67..a6f09f3 100644
--- a/java/org/apache/catalina/startup/Tomcat.java
+++ b/java/org/apache/catalina/startup/Tomcat.java
@@ -30,6 +30,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.Stack;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
@@ -1090,11 +1091,8 @@ public class Tomcat {
         // Sessions
         ctx.setSessionTimeout(30);
 
-        // MIME mappings
-        for (int i = 0; i < DEFAULT_MIME_MAPPINGS.length;) {
-            ctx.addMimeMapping(DEFAULT_MIME_MAPPINGS[i++],
-                    DEFAULT_MIME_MAPPINGS[i++]);
-        }
+        // MIME type mappings
+        addDefaultMimeTypeMappings(ctx);
 
         // Welcome files
         ctx.addWelcomeFile("index.html");
@@ -1104,6 +1102,25 @@ public class Tomcat {
 
 
     /**
+     * Add the default MIME type mappings to the provide Context.
+     *
+     * @param context The web application to which the default MIME type
+     *                mappings should be added.
+     */
+    public static void addDefaultMimeTypeMappings(Context context) {
+        Properties defaultMimeMappings = new Properties();
+        try (InputStream is = Tomcat.class.getResourceAsStream("MimeTypeMappings.properties")) {
+            defaultMimeMappings.load(is);
+            for (Map.Entry<Object, Object>  entry: defaultMimeMappings.entrySet()) {
+                context.addMimeMapping((String) entry.getKey(), (String) entry.getValue());
+            }
+        } catch (IOException e) {
+            throw new IllegalStateException(sm.getString("tomcat.defaultMimeTypeMappingsFail"), e);
+        }
+    }
+
+
+    /**
      * Fix startup sequence - required if you don't use web.xml.
      *
      * <p>
@@ -1215,185 +1232,6 @@ public class Tomcat {
         }
     }
 
-    /**
-     * TODO: would a properties resource be better ? Or just parsing
-     * /etc/mime.types ?
-     * This is needed because we don't use the default web.xml, where this
-     * is encoded.
-     */
-    private static final String[] DEFAULT_MIME_MAPPINGS = {
-        "abs", "audio/x-mpeg",
-        "ai", "application/postscript",
-        "aif", "audio/x-aiff",
-        "aifc", "audio/x-aiff",
-        "aiff", "audio/x-aiff",
-        "aim", "application/x-aim",
-        "art", "image/x-jg",
-        "asf", "video/x-ms-asf",
-        "asx", "video/x-ms-asf",
-        "au", "audio/basic",
-        "avi", "video/x-msvideo",
-        "avx", "video/x-rad-screenplay",
-        "bcpio", "application/x-bcpio",
-        "bin", "application/octet-stream",
-        "bmp", "image/bmp",
-        "body", "text/html",
-        "cdf", "application/x-cdf",
-        "cer", "application/pkix-cert",
-        "class", "application/java",
-        "cpio", "application/x-cpio",
-        "csh", "application/x-csh",
-        "css", "text/css",
-        "dib", "image/bmp",
-        "doc", "application/msword",
-        "dtd", "application/xml-dtd",
-        "dv", "video/x-dv",
-        "dvi", "application/x-dvi",
-        "eps", "application/postscript",
-        "etx", "text/x-setext",
-        "exe", "application/octet-stream",
-        "gif", "image/gif",
-        "gtar", "application/x-gtar",
-        "gz", "application/x-gzip",
-        "hdf", "application/x-hdf",
-        "hqx", "application/mac-binhex40",
-        "htc", "text/x-component",
-        "htm", "text/html",
-        "html", "text/html",
-        "ief", "image/ief",
-        "jad", "text/vnd.sun.j2me.app-descriptor",
-        "jar", "application/java-archive",
-        "java", "text/x-java-source",
-        "jnlp", "application/x-java-jnlp-file",
-        "jpe", "image/jpeg",
-        "jpeg", "image/jpeg",
-        "jpg", "image/jpeg",
-        "js", "application/javascript",
-        "jsf", "text/plain",
-        "jspf", "text/plain",
-        "kar", "audio/midi",
-        "latex", "application/x-latex",
-        "m3u", "audio/x-mpegurl",
-        "mac", "image/x-macpaint",
-        "man", "text/troff",
-        "mathml", "application/mathml+xml",
-        "me", "text/troff",
-        "mid", "audio/midi",
-        "midi", "audio/midi",
-        "mif", "application/x-mif",
-        "mov", "video/quicktime",
-        "movie", "video/x-sgi-movie",
-        "mp1", "audio/mpeg",
-        "mp2", "audio/mpeg",
-        "mp3", "audio/mpeg",
-        "mp4", "video/mp4",
-        "mpa", "audio/mpeg",
-        "mpe", "video/mpeg",
-        "mpeg", "video/mpeg",
-        "mpega", "audio/x-mpeg",
-        "mpg", "video/mpeg",
-        "mpv2", "video/mpeg2",
-        "nc", "application/x-netcdf",
-        "oda", "application/oda",
-        "odb", "application/vnd.oasis.opendocument.database",
-        "odc", "application/vnd.oasis.opendocument.chart",
-        "odf", "application/vnd.oasis.opendocument.formula",
-        "odg", "application/vnd.oasis.opendocument.graphics",
-        "odi", "application/vnd.oasis.opendocument.image",
-        "odm", "application/vnd.oasis.opendocument.text-master",
-        "odp", "application/vnd.oasis.opendocument.presentation",
-        "ods", "application/vnd.oasis.opendocument.spreadsheet",
-        "odt", "application/vnd.oasis.opendocument.text",
-        "otg", "application/vnd.oasis.opendocument.graphics-template",
-        "oth", "application/vnd.oasis.opendocument.text-web",
-        "otp", "application/vnd.oasis.opendocument.presentation-template",
-        "ots", "application/vnd.oasis.opendocument.spreadsheet-template ",
-        "ott", "application/vnd.oasis.opendocument.text-template",
-        "ogx", "application/ogg",
-        "ogv", "video/ogg",
-        "oga", "audio/ogg",
-        "ogg", "audio/ogg",
-        "spx", "audio/ogg",
-        "flac", "audio/flac",
-        "anx", "application/annodex",
-        "axa", "audio/annodex",
-        "axv", "video/annodex",
-        "xspf", "application/xspf+xml",
-        "pbm", "image/x-portable-bitmap",
-        "pct", "image/pict",
-        "pdf", "application/pdf",
-        "pgm", "image/x-portable-graymap",
-        "pic", "image/pict",
-        "pict", "image/pict",
-        "pls", "audio/x-scpls",
-        "png", "image/png",
-        "pnm", "image/x-portable-anymap",
-        "pnt", "image/x-macpaint",
-        "ppm", "image/x-portable-pixmap",
-        "ppt", "application/vnd.ms-powerpoint",
-        "pps", "application/vnd.ms-powerpoint",
-        "ps", "application/postscript",
-        "psd", "image/vnd.adobe.photoshop",
-        "qt", "video/quicktime",
-        "qti", "image/x-quicktime",
-        "qtif", "image/x-quicktime",
-        "ras", "image/x-cmu-raster",
-        "rdf", "application/rdf+xml",
-        "rgb", "image/x-rgb",
-        "rm", "application/vnd.rn-realmedia",
-        "roff", "text/troff",
-        "rtf", "application/rtf",
-        "rtx", "text/richtext",
-        "sh", "application/x-sh",
-        "shar", "application/x-shar",
-        /*"shtml", "text/x-server-parsed-html",*/
-        "sit", "application/x-stuffit",
-        "snd", "audio/basic",
-        "src", "application/x-wais-source",
-        "sv4cpio", "application/x-sv4cpio",
-        "sv4crc", "application/x-sv4crc",
-        "svg", "image/svg+xml",
-        "svgz", "image/svg+xml",
-        "swf", "application/x-shockwave-flash",
-        "t", "text/troff",
-        "tar", "application/x-tar",
-        "tcl", "application/x-tcl",
-        "tex", "application/x-tex",
-        "texi", "application/x-texinfo",
-        "texinfo", "application/x-texinfo",
-        "tif", "image/tiff",
-        "tiff", "image/tiff",
-        "tr", "text/troff",
-        "tsv", "text/tab-separated-values",
-        "txt", "text/plain",
-        "ulw", "audio/basic",
-        "ustar", "application/x-ustar",
-        "vxml", "application/voicexml+xml",
-        "xbm", "image/x-xbitmap",
-        "xht", "application/xhtml+xml",
-        "xhtml", "application/xhtml+xml",
-        "xls", "application/vnd.ms-excel",
-        "xml", "application/xml",
-        "xpm", "image/x-xpixmap",
-        "xsl", "application/xml",
-        "xslt", "application/xslt+xml",
-        "xul", "application/vnd.mozilla.xul+xml",
-        "xwd", "image/x-xwindowdump",
-        "vsd", "application/vnd.visio",
-        "wav", "audio/x-wav",
-        "wbmp", "image/vnd.wap.wbmp",
-        "wml", "text/vnd.wap.wml",
-        "wmlc", "application/vnd.wap.wmlc",
-        "wmls", "text/vnd.wap.wmlsc",
-        "wmlscriptc", "application/vnd.wap.wmlscriptc",
-        "wmv", "video/x-ms-wmv",
-        "wrl", "model/vrml",
-        "wspolicy", "application/wspolicy+xml",
-        "Z", "application/x-compress",
-        "z", "application/x-compress",
-        "zip", "application/zip"
-    };
-
     protected URL getWebappConfigFile(String path, String contextName) {
         File docBase = new File(path);
         if (docBase.isDirectory()) {
diff --git a/java/org/apache/tomcat/buildutil/MimeTypeMappings.java b/java/org/apache/tomcat/buildutil/MimeTypeMappings.java
new file mode 100644
index 0000000..8c1e221
--- /dev/null
+++ b/java/org/apache/tomcat/buildutil/MimeTypeMappings.java
@@ -0,0 +1,73 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tomcat.buildutil;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import org.apache.tomcat.util.descriptor.DigesterFactory;
+import org.apache.tomcat.util.descriptor.XmlErrorHandler;
+import org.apache.tomcat.util.descriptor.web.WebRuleSet;
+import org.apache.tomcat.util.descriptor.web.WebXml;
+import org.apache.tomcat.util.digester.Digester;
+import org.xml.sax.InputSource;
+
+public class MimeTypeMappings {
+
+    public static void main(String... args) throws Exception {
+        InputSource globalWebXml = new InputSource(new File("conf/web.xml").getAbsoluteFile().toURI().toString());
+
+        WebXml webXmlDefaultFragment = new WebXml();
+        webXmlDefaultFragment.setOverridable(true);
+        webXmlDefaultFragment.setDistributable(true);
+        webXmlDefaultFragment.setAlwaysAddWelcomeFiles(false);
+
+        Digester digester = DigesterFactory.newDigester(true, true, new WebRuleSet(), true);
+        XmlErrorHandler handler = new XmlErrorHandler();
+        digester.setErrorHandler(handler);
+        digester.push(webXmlDefaultFragment);
+        digester.parse(globalWebXml);
+
+        Map<String,String> webXmlMimeMappings = webXmlDefaultFragment.getMimeMappings();
+        SortedMap<String,String> sortedWebXmlMimeMappings = new TreeMap<>();
+        sortedWebXmlMimeMappings.putAll(webXmlMimeMappings);
+
+        File f = new File("java/org/apache/catalina/startup/MimeTypeMappings.properties");
+        FileOutputStream fos = new FileOutputStream(f);
+        Writer w = new OutputStreamWriter(fos, StandardCharsets.US_ASCII);
+
+        Utils.insertLicense(w);
+
+        w.write(System.lineSeparator());
+
+        for (Map.Entry<String, String> mapping : sortedWebXmlMimeMappings.entrySet()) {
+            w.write(mapping.getKey());
+            w.write("=");
+            w.write(mapping.getValue());
+            w.write(System.lineSeparator());
+        }
+
+        w.close();
+        fos.close();
+    }
+}
diff --git a/java/org/apache/tomcat/buildutil/Utils.java b/java/org/apache/tomcat/buildutil/Utils.java
new file mode 100644
index 0000000..7799f59
--- /dev/null
+++ b/java/org/apache/tomcat/buildutil/Utils.java
@@ -0,0 +1,59 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tomcat.buildutil;
+
+import java.io.IOException;
+import java.io.Writer;
+
+public class Utils {
+
+    private Utils() {
+        // Utility class. Hide default constructor.
+    }
+
+
+    public static void insertLicense(Writer w) throws IOException {
+        w.write("# Licensed to the Apache Software Foundation (ASF) under one or more");
+        w.write(System.lineSeparator());
+        w.write("# contributor license agreements.  See the NOTICE file distributed with");
+        w.write(System.lineSeparator());
+        w.write("# this work for additional information regarding copyright ownership.");
+        w.write(System.lineSeparator());
+        w.write("# The ASF licenses this file to You under the Apache License, Version 2.0");
+        w.write(System.lineSeparator());
+        w.write("# (the \"License\"); you may not use this file except in compliance with");
+        w.write(System.lineSeparator());
+        w.write("# the License.  You may obtain a copy of the License at");
+        w.write(System.lineSeparator());
+        w.write("#");
+        w.write(System.lineSeparator());
+        w.write("#     http://www.apache.org/licenses/LICENSE-2.0");
+        w.write(System.lineSeparator());
+        w.write("#");
+        w.write(System.lineSeparator());
+        w.write("# Unless required by applicable law or agreed to in writing, software");
+        w.write(System.lineSeparator());
+        w.write("# distributed under the License is distributed on an \"AS IS\" BASIS,");
+        w.write(System.lineSeparator());
+        w.write("# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.");
+        w.write(System.lineSeparator());
+        w.write("# See the License for the specific language governing permissions and");
+        w.write(System.lineSeparator());
+        w.write("# limitations under the License.");
+        w.write(System.lineSeparator());
+    }
+}
diff --git a/java/org/apache/tomcat/buildutil/translate/Import.java b/java/org/apache/tomcat/buildutil/translate/Import.java
index bdffd73..fe637cc 100644
--- a/java/org/apache/tomcat/buildutil/translate/Import.java
+++ b/java/org/apache/tomcat/buildutil/translate/Import.java
@@ -69,7 +69,7 @@ public class Import {
                 File outFile = new File(currentPkg.replace('.', File.separatorChar), Constants.L10N_PREFIX + language + Constants.L10N_SUFFIX);
                 FileOutputStream fos = new FileOutputStream(outFile);
                 w = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
-                insertLicense(w);
+                org.apache.tomcat.buildutil.Utils.insertLicense(w);
             }
 
             if (!currentGroup.equals(cKey.group)) {
@@ -86,36 +86,6 @@ public class Import {
     }
 
 
-    private static void insertLicense(Writer w) throws IOException {
-        w.write("# Licensed to the Apache Software Foundation (ASF) under one or more");
-        w.write(System.lineSeparator());
-        w.write("# contributor license agreements.  See the NOTICE file distributed with");
-        w.write(System.lineSeparator());
-        w.write("# this work for additional information regarding copyright ownership.");
-        w.write(System.lineSeparator());
-        w.write("# The ASF licenses this file to You under the Apache License, Version 2.0");
-        w.write(System.lineSeparator());
-        w.write("# (the \"License\"); you may not use this file except in compliance with");
-        w.write(System.lineSeparator());
-        w.write("# the License.  You may obtain a copy of the License at");
-        w.write(System.lineSeparator());
-        w.write("#");
-        w.write(System.lineSeparator());
-        w.write("#     http://www.apache.org/licenses/LICENSE-2.0");
-        w.write(System.lineSeparator());
-        w.write("#");
-        w.write(System.lineSeparator());
-        w.write("# Unless required by applicable law or agreed to in writing, software");
-        w.write(System.lineSeparator());
-        w.write("# distributed under the License is distributed on an \"AS IS\" BASIS,");
-        w.write(System.lineSeparator());
-        w.write("# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.");
-        w.write(System.lineSeparator());
-        w.write("# See the License for the specific language governing permissions and");
-        w.write(System.lineSeparator());
-        w.write("# limitations under the License.");
-        w.write(System.lineSeparator());
-    }
     private static class CompositeKey {
 
         public final String pkg;
diff --git a/test/org/apache/catalina/startup/TestTomcatNoServer.java b/test/org/apache/catalina/startup/TestTomcatNoServer.java
new file mode 100644
index 0000000..5a2f374
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestTomcatNoServer.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.catalina.startup;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.catalina.core.StandardContext;
+import org.apache.tomcat.util.descriptor.DigesterFactory;
+import org.apache.tomcat.util.descriptor.XmlErrorHandler;
+import org.apache.tomcat.util.descriptor.web.WebRuleSet;
+import org.apache.tomcat.util.descriptor.web.WebXml;
+import org.apache.tomcat.util.digester.Digester;
+import org.xml.sax.InputSource;
+
+
+/**
+ * Tests that do not require a Tomcat instance to be started.
+ */
+public class TestTomcatNoServer {
+
+    @Test
+    public void testDefaultMimeTypeMappings() throws Exception {
+        StandardContext ctx = new StandardContext();
+
+        Tomcat.initWebappDefaults(ctx);
+
+        InputSource globalWebXml = new InputSource(new File("conf/web.xml").getAbsoluteFile().toURI().toString());
+
+        WebXml webXmlDefaultFragment = new WebXml();
+        webXmlDefaultFragment.setOverridable(true);
+        webXmlDefaultFragment.setDistributable(true);
+        webXmlDefaultFragment.setAlwaysAddWelcomeFiles(false);
+
+        Digester digester = DigesterFactory.newDigester(true, true, new WebRuleSet(), true);
+        XmlErrorHandler handler = new XmlErrorHandler();
+        digester.setErrorHandler(handler);
+        digester.push(webXmlDefaultFragment);
+        digester.parse(globalWebXml);
+        Assert.assertEquals(0, handler.getErrors().size());
+        Assert.assertEquals(0, handler.getWarnings().size());
+
+        Map<String,String> webXmlMimeMappings = webXmlDefaultFragment.getMimeMappings();
+
+        Set<String> embeddedExtensions = new HashSet<>();
+        embeddedExtensions.addAll(Arrays.asList(ctx.findMimeMappings()));
+
+        // Find entries present in conf/web.xml that are missing in embedded
+        Set<String> missingInEmbedded = new HashSet<>();
+        missingInEmbedded.addAll(webXmlMimeMappings.keySet());
+        missingInEmbedded.removeAll(embeddedExtensions);
+        if (missingInEmbedded.size() > 0) {
+            for (String missingExtension : missingInEmbedded) {
+                System.out.println("Missing in embedded: [" + missingExtension +
+                        "]-[" + webXmlMimeMappings.get(missingExtension) + "]");
+            }
+            Assert.fail("Embedded is missing [" + missingInEmbedded.size() + "] entires compared to conf/web.xml");
+        }
+
+        // Find entries present in embedded that are missing in conf/web.xml
+        Set<String> missingInWebXml = new HashSet<>();
+        missingInWebXml.addAll(embeddedExtensions);
+        missingInWebXml.removeAll(webXmlMimeMappings.keySet());
+        if (missingInWebXml.size() > 0) {
+            for (String missingExtension : missingInWebXml) {
+                System.out.println("Missing in embedded: [" + missingExtension +
+                        "]-[" + ctx.findMimeMapping(missingExtension) + "]");
+            }
+            Assert.fail("Embedded is missing [" + missingInWebXml.size() + "] entires compared to conf/web.xml");
+        }
+    }
+}
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 0d1f5f5..75146d8 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -56,6 +56,11 @@
         <code>HTTP_HOST</code> variable rather than extracting it from the
         <code>Host</code> header as this allows HTTP/2 to be supported. (markt)
       </fix>
+      <fix>
+        Switch Tomcat embedded to loading MIME type mappings from a property
+        file generated from the default <code>web.xml</code> so the MIME type
+        mappings are consistent regardless of how Tomcat is started. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Jasper">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org