Os exemplos neste artigo resumem os métodos comuns de processamento de arquivos estáticos em Javaweb, que são de grande valor prático no desenvolvimento de programas Javaweb. Os métodos específicos são resumidos a seguir:
Método 1: Ative o defaultServlet do Tomcat para processar arquivos estáticos
Adicione web.xml:
<servlet-mapping> <servlet-name>padrão</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>padrão</ nome do servlet> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>padrão</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
Nota: Deve ser escrito na frente do DispatcherServlet e deixar o defaultServlet interceptar a solicitação primeiro, para que a solicitação não entre no Spring, acho que o desempenho é o melhor.
O nome do Servlet padrão que vem com Tomcat, Jetty, JBoss e GlassFish – “default”
O nome do servlet padrão que vem com o Google App Engine -- "_ah_default"
O nome do Servlet padrão que vem com o Resin – “resin-file”
O nome do Servlet padrão que vem com o WebLogic – “FileServlet”
O nome do Servlet padrão que acompanha o WebSphere -- "SimpleFileServlet"
Método 2: mvc:resources é fornecido na primavera 3.0.4 e versões posteriores. Como usar:
<!-- Acesso a arquivos de recursos estáticos--> <mvc:resources mapeamento="/images/**" location="/images/" />
Descrição: /images/** é mapeado para ResourceHttpRequestHandler para processamento e location especifica o local do recurso estático. Ele pode estar no diretório raiz do aplicativo da web ou dentro do pacote jar, para que os recursos estáticos possam ser compactados. o pacote jar. período de cache pode permitir que recursos estáticos sejam armazenados em cache da web
Método três, use <mvc:default-servlet-handler/>
<mvc:default-servlet-handler/>
A url "/**" será registrada no urlMap do SimpleUrlHandlerMapping, e o acesso aos recursos estáticos será transferido do HandlerMapping para org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler para processamento e retorno.
DefaultServletHttpRequestHandler usa o Servlet padrão de cada contêiner de Servlet.
Nota complementar: Problemas com a ordem de execução de vários HandlerMappings:
O valor do atributo de pedido de DefaultAnnotationHandlerMapping é: 0
<mvc:resources/>O valor do atributo order do SimpleUrlHandlerMapping registrado automaticamente é: 2147483646
<mvc:default-servlet-handler/>O valor do atributo order do SimpleUrlHandlerMapping registrado automaticamente é: 2147483647
Spring executará primeiro o pedido com um valor menor. Ao acessar um arquivo de imagem a.jpg, primeiro encontre o processador através de DefaultAnnotationHandlerMapping. Ele não deve ser encontrado porque não temos uma Action chamada a.jpg. Em seguida, pesquise em ordem crescente de valor do pedido. Como o último SimpleUrlHandlerMapping corresponde a "/**", ele definitivamente corresponderá e você poderá responder à imagem.
Para acessar uma imagem, você precisa passar por camadas de correspondência. Não tem certeza de como é o desempenho?
Por fim, deixe-me explicar que ao acessar recursos estáticos no Esquema 2 e no Esquema 3, se houver um interceptor total correspondente (aproximado), o interceptor será usado. Se você implementar a verificação de permissão na interceptação, tenha cuidado ao filtrar essas solicitações por arquivos estáticos.
Se o seu DispatcherServlet interceptar sufixos de URL como *.do, os problemas acima não existirão. Ainda é conveniente ter um sufixo.