Mapear tanto arquivos dinâmicos estática e no Tomcat / Primavera?
Pergunta
Eu estava usando o seguinte em web.xml para configurar um servlet para gerar dinamicamente PDFs.
<servlet-mapping>
<servlet-name>pdfServlet</servlet-name>
<url-pattern>*.pdf</url-pattern>
</servlet-mapping>
Agora, eu também tenho que servir alguns arquivos estáticos PDF. Qual é a maneira mais limpa para configurar isso? Atualmente estou servindo apenas quatro ou cinco arquivos dinâmicos, e não esperar que a aumentar, se isso ajuda em tudo.
Solução
Você não precisa de arquivos estáticos configurar pelo todo; se o Tomcat pode encontrar um arquivo, ele irá servi-lo. A configuração só é necessário quando você quer Tomcat para invocar algum código.
Outras dicas
Este é um problema surpreendentemente irritante que eu ainda tenho que encontrar uma solução satisfatória para.
A base do problema, como eu tenho certeza que você está ciente, é que o seu web.xml é configurado para enviar todos os pedidos de * .pdf para o seu servlet Primavera. A coisa óbvia a tentar é para o servlet de reconhecer que os pedidos são para PDFs estáticos, e em seguida, encaminhar o pedido internamente para esse arquivo estático, mas porque o arquivo provavelmente vai acabar com .pdf, o pedido só vai voltar através do servlet novamente, ad nauseum.
A única solução para este que eu tentei é ter o servlet manualmente ler o PDF estático do contexto do servlet (usando ServletContext.getResource()
), e escrevê-lo para o fluxo de saída servlet, certificando-se de definir os diversos cabeçalhos corretamente. Não é muito agradável.
A única opção que posso pensar é fazer o url-pattern
em web.xml
um pouco menos amplo, de modo que os pedidos PDF somente dinâmicas se encaminhado para o servlet, e pedidos de PDFs estáticos são roteadas para o arquivo, mas isso exigiria algum tipo de convenção de nomenclatura para os seus documentos, que pode não ser uma opção.