Acessando o caminho de contexto do Tomcat a partir do servlet
Pergunta
No meu Servlet eu gostaria de acessar a raiz do contexto para poder fazer algumas minificações de JavaScript.
Seria possível fazer a redução como parte do processo de instalação, mas eu gostaria de fazer isso na inicialização do Servlet para reduzir o custo de implementação.
Alguém conhece um método para obter o diretório de contexto para que eu possa carregar e gravar arquivos no disco?
Solução
Isso deve fornecer o caminho real que você pode usar para extrair/editar arquivos.
Estamos fazendo algo semelhante em um ouvinte de contexto.
public class MyServlet extends HttpServlet {
public void init(final ServletConfig config) {
final String context = config.getServletContext().getRealPath("/");
...
}
...
}
Outras dicas
No meu Servlet eu gostaria de acessar a raiz do contexto para poder fazer algumas minificações de JavaScript
Você também pode acessar os arquivos no WebContent por ServletContext#getResource()
.Portanto, se o seu arquivo JS estiver, por exemplo, localizado em WebContent/js/file.js
então você pode usar o seguinte em seu Servlet
para obter um File
lidar com isso:
File file = new File(getServletContext().getResource("/js/file.js").getFile());
ou para obter um InputStream
:
InputStream input = getServletContext().getResourceAsStream("/js/file.js");
Dito isto, com que frequência você precisa reduzir os arquivos JS?Nunca vi a necessidade de minificação baseada em solicitações; isso apenas adicionaria muita sobrecarga desnecessariamente.Você provavelmente desejará fazer isso apenas uma vez durante a inicialização do aplicativo.Se sim, então usando um Servlet
pois isso é uma má ideia.Melhor uso ServletContextListener
e faça o que quiser contextInitialized()
.
Eu estava pesquisando o resultado no Google e não cheguei a lugar nenhum.Em páginas JSP que precisam usar Java Script para acessar o atual contextoPath na verdade é muito fácil.
Basta colocar as seguintes linhas em seu cabeça HTML dentro de um script
bloquear.
// set up a global java script variable to access the context path
var contextPath = "${request.contextPath}"
Você quer dizer:
public class MyServlet extends HttpServlet {
public void init(final ServletConfig config) {
final String context = config.getServletContext();
...
}
...
}
Ou algo mais complexo?