Como servir conteúdo estático do tomcat

Eu tenho um diretório contendo um número de arquivo estático (* .png, * .css, etc).
Eu pensei (por engano, talvez) que apenas criando um diretório no arquivo WEB-INF do meu aplicativo seria suficiente e eu seria capaz de acessar os arquivos apenas referindo-se a eles pelo nome:
Ex:

 

Minha estrutura de diretórios é a seguinte:

 +WEB-INF | +---static | +--styles.css +--header.png 

Meu web.xml é o seguinte

   myapp  contextConfigLocation classpath:com/example/myapp/spring/applicationContext.xml    org.springframework.web.context.ContextLoaderListener     com.example.myapp.ContextListener   <!-- There are three means to configure Wickets configuration mode and they are tested in the order given. 1) A system property: -Dwicket.configuration 2) servlet specific  3) context specific  The value might be either "development" (reloading when templates change) or "deployment". If no configuration is found, "development" is the default. -->  wicket.myapp org.apache.wicket.protocol.http.WicketFilter  applicationFactoryClassName org.apache.wicket.spring.SpringWebApplicationFactory    wicket.session org.apache.wicket.protocol.http.servlet.WicketSessionFilter  filterName wicket.myapp    wicket.myapp /*   wicket.session /servlet/*   

Mas….
Isso não funciona, apenas recebo um arquivo 404 não encontrado ao tentar acessar os resources contidos no diretório “estático”. Há algo que estou sentindo falta aqui?

Não os coloque no WEB-INF, essa pasta é para as coisas que você não quer que sejam servidas diretamente.

Coloque-o ao lado de WEB-INF

 +- WEB-INF +- static 

Os arquivos não devem estar dentro do WEB-INF. Eles devem ser colocados diretamente dentro do diretório de aplicativos da web ou do arquivo WAR.

Veja minha resposta aqui para include o caminho do contexto antes de seus resources estáticos.

WEB-INF é um diretório protegido. Eles devem ser colocados em um subdiretório no diretório do aplicativo da web de nível superior.