Eu tenho o arquivo de guerra do meu aplicativo. Eu preciso implantar isso no nível raiz. O URL atual é http://localhost:8080/war_name/application_name.
Você poderia especificar qual é exatamente o seu problema? Quando você implanta um arquivo war no tomcat, o aplicativo é acessado usando URL: localhost: 8080 / war_name sem a extensão .war.
ashishjmeshram
1
Sim, você está certo, preciso acessar meu aplicativo. " Localhost / application_name ", isso eu posso conseguir quando estou renomeando meu arquivo de guerra para "ROOT.war", mas o seu jogando fora de exceção de memória, porque o meu tamanho do arquivo guerra é de cerca de 120MB
iamjustcoder
1
@ user661660 - Parece que você tem um problema diferente - renomear para ROOT.wardeve funcionar. Sugiro fazer outra pergunta sobre você OutOfMemoryException, fornecendo o rastreamento da pilha e os detalhes. Você provavelmente pode contornar isso configurando -Xmxpara a JVM.
Rob Hruska
.lang.OutOfMemoryError: PermGen space 16 de março de 2011 9:52:52 Registro com.ebay.kernel.logger.Logger SEVERE: Erro no thread Perfmon java.lang.OutOfMemoryError: PermGen space Exceção de espaço no thread "CalClient: NotifyThreadDestroyThread-0 "java.lang.OutOfMemor yError: PermGen space Exceção no segmento" MetricsSnapshotScheduler "java.lang.OutOfMemoryError: PermG no espaço 16 de março de 2011 9:53:36 AM com.ebay.kernel.logger.Logger log SEVERO: erro no Perfmon thread java.lang.OutOfMemoryError: PermGen space Exceção no segmento "CalClient: NotifyThreadDestroyThread-0" java.lang.OutOfMemor yError: PermGen space
Se Tomcat está definido para autodeploy, você não precisa se preocupar com a opção 2.
Buhake Sindi
4
@ Dejel - Nada tecnicamente. Eu já fiz isso bastante; Isso finaliza o trabalho. Parece um pouco complicado ter que renomear seu próprio arquivo de guerra para algo que seja um tipo de detalhe de implementação do contêiner.
Rob Hruska
4
Como por link que você forneceu não é recomendado para o lugar <context> elementos diretamente no arquivo server.xml
Nilesh
6
Esta resposta recomenda uma técnica mencionada explicitamente na documentação como forma incorreta. A técnica adequada é detalhado aqui: stackoverflow.com/questions/41263245/...
Christopher Schultz
5
+1 por chamá-lo de ROOT.war. De acordo com os documentos do Tomcat, você precisa ter muito cuidado ao especificar "caminho" para evitar a implantação dupla: "Mesmo ao definir estaticamente um Contexto no server.xml, esse atributo não deve ser definido, a menos que o docBase não esteja localizado no diretório Host. appBase ou deployOnStartup e autoDeploy são falsos. Se essa regra não for seguida, é provável que ocorra uma implantação dupla. " - from tomcat.apache.org/tomcat-8.0-doc/config/context.html
Anthony Hayward
31
no tomcat v.7 (instalação baunilha)
em seu conf / server.xml, adicione o seguinte bit no final do arquivo, pouco antes da </Host>tag de fechamento:
<Context path="" docBase="app_name"><!--Default set of monitored resources --><WatchedResource>WEB-INF/web.xml</WatchedResource></Context>
Observe esse atributo docBase . É a parte importante. Você deve ter implantado app_name antes de alterar seu aplicativo Web raiz ou apenas copiado seu webapp descompactado (app_name) na pasta webapps do tomcat. Inicialização, visite root, veja seu app_name lá!
No tomcat 7 com essas alterações, eu consigo acessar o myAPP em / e ROOT em / ROOT
<Context path="" docBase="myAPP"><!--Default set of monitored resources --><WatchedResource>WEB-INF/web.xml</WatchedResource></Context><Context path="ROOT" docBase="ROOT"><!--Default set of monitored resources --><WatchedResource>WEB-INF/web.xml</WatchedResource></Context>
Um caminho de contexto deve ser uma sequência vazia ou começar com um '/'. O caminho [ROOT] não atender a esses critérios e foi alterado para [/ ROOT]
Nikita Bosik
11
Eu sei que minha resposta está meio que sobreposta com algumas das outras respostas, mas esta é uma solução completa que tem algumas vantagens. Isso funciona no Tomcat 8:
O aplicativo principal é servido a partir da raiz
A implantação de arquivos war através da interface da web é mantida.
O aplicativo principal será executado na porta 80 enquanto apenas os administradores tiverem acesso às pastas de gerenciamento (eu percebo que os sistemas * nix exigem um superusuário para vincular ao 80, mas no Windows isso não é um problema).
Isso significa que você só precisa reiniciar o tomcat uma vez e, após a atualização dos arquivos war, pode ser implantado sem problemas.
Etapa 1: no arquivo server.xml, localize a entrada do conector e substitua-a por:
Observe que eu enderecei todos os aplicativos na pasta webapp. O primeiro efetivamente muda a raiz e o aplicativo principal da posição. Agora, o ROOT está ativado http://example.com/ROOTe o aplicativo principal está ativado http://example.com/. Os aplicativos da web protegidos por senha requerem o privileged="true"atributo
Quando você implanta um arquivo CAS.war que corresponda à raiz ( <Context path="/" docBase="CAS">é necessário recarregá-lo no painel de administração, pois ele não é atualizado com a implantação).
Não inclua o <Context path="/CAS" docBase="CAS">em seus contextos, pois isso desativa a opção de gerente para implantar arquivos de guerra. Isso significa que você pode acessar o aplicativo de duas maneiras: http://example.com/ehttp://example.com/APP/
Etapa 3: para impedir o acesso indesejado à pasta raiz e do gerenciador, adicione um valvea essas tags de contexto como esta:
Isso basicamente limita o acesso à pasta de aplicativos da web de administração a pessoas do meu próprio domínio (endereço IP falso) e host local quando eles usam a porta 8080 padrão e mantém a capacidade de implantar dinamicamente os arquivos de guerra por meio da interface da web.
Se você quiser usar isso para vários aplicativos que usam endereços IP diferentes, adicione o endereço IP ao conector ( address="143.21.2.1").
Se você deseja executar vários aplicativos da Web a partir da raiz, pode duplicar a etiqueta de Serviço (use um nome diferente para o segundo) e alterar a base de dados de <Context path="/" docBase="CAS">para, por exemplo <Context path="/" docBase="ICR">.
Ele funciona com o Tomcat 8. autoDeploy e deployOnStartup precisam ser configurados como false para impedir que o tomcat seja implantado myAppduas vezes.
Tentei fazer o upload do WAR e ele não funcionou. Isso é apenas para WARs explodidas?
Logixplayer 15/07/2015
Tentei fazer o upload do WAR e ele não funcionou com base no exemplo de @ Jingguo. Isso é apenas para WARs explodidas? EDIT: É realmente apenas para guerras explodidas. Por que é isso? Não posso simplesmente carregar o WAR e evitar esta etapa dupla? Como posso fazer isso funcionar?
Logixplayer 15/07/2015
@logixplayer. Minha solução funciona com WAR. Eu não a explodi. Esqueci de mencionar que $CATALINA_HOME/webapps/ROOTprecisa ser removido. Remova-o e tente novamente.
Jingguo Yao
Eu removi a raiz como você disse. Implantei meu WAR (diretório não explodido). Percebi que um novo diretório ROOT foi criado com minhas coisas, por exemplo, WEB-INF. O site está em execução. É assim que deve funcionar?
logixplayer
Eu também tentei esse método e tudo quando tento abrir a página no navegador, continua esperando pelo servidor. O catalina.out diz apenas que o servidor foi iniciado.
Asu
1
Adicionando ao sol de @Rob Hruska, essa configuração na seção interna server.xml funciona:
você não mencionou onde colocar isso. A resposta do @Sudheer Palyam foi útil.
Kannan Ramamoorthy
1
Adicionando à resposta do @Dima , se você estiver usando mavenpara criar seu pacote, você pode dizer para definir o nome do seu arquivo WAR ROOTem pom.xml:
<build><finalName>ROOT</finalName></build>
Por padrão, tomcatimplantará o ROOT.warwebapp no contexto raiz ( /).
abra o gerenciador do tomact url: - http: // localhost: 8080 / manager / html /
, em aplicativos, você vê um aplicativo com o caminho como "/" sendo implementado simplesmente. Renomeie o arquivo de guerra do seu aplicativo como ROOT.war e coloque-o no caminho: -
inicie o Tomcat Não é necessária nenhuma configuração extra.
Agora podemos ver a página inicial do aplicativo ou o URL configurado em http: // localhost: 8080 C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps
ROOT.war
deve funcionar. Sugiro fazer outra pergunta sobre vocêOutOfMemoryException
, fornecendo o rastreamento da pilha e os detalhes. Você provavelmente pode contornar isso configurando-Xmx
para a JVM.Respostas:
Você tem algumas opções:
Remova o
ROOT/
diretório pronto para uso do tomcat e renomeie seu arquivo war paraROOT.war
antes de implementá-lo.Implantar seu guerra como (a partir de seu exemplo)
war_name.war
e configurar a raiz do contexto emconf/server.xml
usar seu arquivo de guerra:O primeiro é mais fácil, mas um pouco mais arrogante. O segundo é provavelmente a maneira mais elegante de fazer isso.
fonte
no tomcat v.7 (instalação baunilha)
em seu conf / server.xml, adicione o seguinte bit no final do arquivo, pouco antes da
</Host>
tag de fechamento:Observe esse atributo docBase . É a parte importante. Você deve ter implantado app_name antes de alterar seu aplicativo Web raiz ou apenas copiado seu webapp descompactado (app_name) na pasta webapps do tomcat. Inicialização, visite root, veja seu app_name lá!
fonte
No tomcat 7 com essas alterações, eu consigo acessar o myAPP em / e ROOT em / ROOT
Adicione acima à
<Host>
seção em server.xmlfonte
Eu sei que minha resposta está meio que sobreposta com algumas das outras respostas, mas esta é uma solução completa que tem algumas vantagens. Isso funciona no Tomcat 8:
Isso significa que você só precisa reiniciar o tomcat uma vez e, após a atualização dos arquivos war, pode ser implantado sem problemas.
Etapa 1: no arquivo server.xml, localize a entrada do conector e substitua-a por:
Etapa 2: defina contextos na
<Host ...>
tag:Observe que eu enderecei todos os aplicativos na pasta webapp. O primeiro efetivamente muda a raiz e o aplicativo principal da posição. Agora, o ROOT está ativado
http://example.com/ROOT
e o aplicativo principal está ativadohttp://example.com/
. Os aplicativos da web protegidos por senha requerem oprivileged="true"
atributoQuando você implanta um arquivo CAS.war que corresponda à raiz (
<Context path="/" docBase="CAS">
é necessário recarregá-lo no painel de administração, pois ele não é atualizado com a implantação).Não inclua o
<Context path="/CAS" docBase="CAS">
em seus contextos, pois isso desativa a opção de gerente para implantar arquivos de guerra. Isso significa que você pode acessar o aplicativo de duas maneiras:http://example.com/
ehttp://example.com/APP/
Etapa 3: para impedir o acesso indesejado à pasta raiz e do gerenciador, adicione um
valve
a essas tags de contexto como esta:Isso basicamente limita o acesso à pasta de aplicativos da web de administração a pessoas do meu próprio domínio (endereço IP falso) e host local quando eles usam a porta 8080 padrão e mantém a capacidade de implantar dinamicamente os arquivos de guerra por meio da interface da web.
Se você quiser usar isso para vários aplicativos que usam endereços IP diferentes, adicione o endereço IP ao conector (
address="143.21.2.1"
).Se você deseja executar vários aplicativos da Web a partir da raiz, pode duplicar a etiqueta de Serviço (use um nome diferente para o segundo) e alterar a base de dados de
<Context path="/" docBase="CAS">
para, por exemplo<Context path="/" docBase="ICR">
.fonte
O caminho mais rápido.
Verifique se você não tem o aplicativo ROOT implantado, desinstale-o se tiver um
Renomeie sua guerra para ROOT.war, deploy, isso é tudo, não são necessárias alterações na configuração
fonte
Retire
$CATALINA_HOME/webapps/ROOT
. Atualização$CATALINA_HOME/conf/server.xml
, verifique se o elemento Host se parece com o seguinte texto:Ele funciona com o Tomcat 8. autoDeploy e deployOnStartup precisam ser configurados como false para impedir que o tomcat seja implantado
myApp
duas vezes.fonte
$CATALINA_HOME/webapps/ROOT
precisa ser removido. Remova-o e tente novamente.Adicionando ao sol de @Rob Hruska, essa configuração na seção interna server.xml funciona:
Nota: override = "true" pode ser necessário em alguns casos.
fonte
Adicionando à resposta do @Dima , se você estiver usando
maven
para criar seu pacote, você pode dizer para definir o nome do seu arquivo WARROOT
empom.xml
:Por padrão,
tomcat
implantará oROOT.war
webapp no contexto raiz (/
).fonte
abra o gerenciador do tomact url: - http: // localhost: 8080 / manager / html /
, em aplicativos, você vê um aplicativo com o caminho como "/" sendo implementado
simplesmente. Renomeie o arquivo de guerra do seu aplicativo como ROOT.war e coloque-o no caminho: - inicie o Tomcat Não é necessária nenhuma configuração extra. Agora podemos ver a página inicial do aplicativo ou o URL configurado em http: // localhost: 8080
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps
fonte
No meu servidor, estou usando isso e o root autodeploy funciona perfeitamente:
fonte