Como alterar o aplicativo ROOT?

130

Estou tentando alterar o aplicativo padrão de um servidor da Web Tomcat 6 para um aplicativo diferente de "ROOT" (dentro da pasta webapps). Qual é a melhor maneira de fazer isso?

user247702
fonte

Respostas:

129

Existem três métodos:

  • Primeiro desligue o seu Tomcat a partir do bindiretório ( sh shutdown.sh). Em seguida, exclua todo o conteúdo da sua webappspasta Tomcat ( rm -fr *). Em seguida, renomeie seu arquivo WAR para ROOT.ware, finalmente, inicie o Tomcat a partir do bindiretório ( sh startup.sh).

  • Deixe seu arquivo de guerra $CATALINA_BASE/webappscom o nome original. Desative o autoDeploy e deployOnStartup no seu elemento Host no server.xmlarquivo. Defina explicitamente todos os Contextos do aplicativo server.xml, especificando os atributos path e docBase . Você deve fazer isso porque desabilitou todos os mecanismos de implantação automática do Tomcat e o Tomcat não implantará mais seus aplicativos, a menos que encontre seu Contexto no server.xml.

    segundo método: para fazer alterações em qualquer aplicativo, você precisará parar e reiniciar o Tomcat.

  • Coloque seu arquivo WAR fora de $CATALINA_BASE/webapps(ele deve estar fora para impedir a implementação dupla). Coloque um arquivo de contexto chamado ROOT.xmlem $CATALINA_BASE/conf/. O único elemento neste arquivo de contexto DEVE ter um atributo docBase apontando para o local do seu arquivo WAR. O elemento path não deve ser definido - é derivado do nome do .xmlarquivo, neste caso ROOT.xml. Consulte a documentação do contêiner de contexto para obter detalhes.

Referência


fonte
4
Eu tentei o primeiro método e funciona! Bdw - você não precisa excluir tudo. Acabei de excluir a pasta ROOT e renomeei minha guerra para ROOT.war e funciona como um encanto.
hostnik 4/11/11
Eu sei que realmente não está seguindo as regras do sof, mas que se dane ..... Obrigado! Eu gostaria de poder votar mais de uma vez. Super útil. BTW, eu tive que reiniciar o tomcat antes que isso funcionasse, @hostnik.
Febre
O terceiro método do @ danny-london não funcionou para mim no Tomcat 7, mas funcionará se você colocar o arquivo ROOT.xml no $CATALINA_BASE/conf/[enginename]/[hostname]diretório (que para minha configuração básica é $CATALINA_HOME/conf/Catalina/localhost). Consulte a documentação do Context Container .
Michael Scheper
Alternativa moderna para iniciar Tomcat: sudo systemctl start tomcatxonde xrepresenta o número da versão
EarthMind
24

Adicionando uma <Context>tag na <Host>tag no server.xmlpara Tomcat 6 vai resolver o problema.

Se você usar path=""vazio, poderá usar um URL como http://localhost/first.do.

Na marca de contexto, defina os atributos docBase="E:\struts-ITRCbook\myStrutsbook"e reloadable="true", em seguida, termine a marca de contexto.

Deve ser algo como isto:

<Host name="localhost"  appBase="webapps" 
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
    </Context>
</Host>
Z e.
fonte
isso também é verdade para o tomcat 7?
Marcy Sutton
4
De acordo com a documentação: para o Tomcat 6, diferente do Tomcat 4.x, NÃO é recomendável colocar os elementos <Context> diretamente no arquivo server.xml. Isso ocorre porque a modificação da configuração do Contexto é mais invasiva, pois o arquivo principal conf / server.xml não pode ser recarregado sem reiniciar o Tomcat.
vamos notificar esta abordagem tem efeito colateral! O myStrutsbook será implantado duas vezes Uma vez no localhost: 8080 e uma vez no localhost: 8080 / myStrutsbook! e pode causar erros de conexão de banco de dados e muito mais uso de recursos
Ali.Mojtehedy
24

No Tomcat 7 com essas alterações, eu posso acessar myAPPem /e ROOTem/ROOT

<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>

Adicione acima à <Host>seção em server.xml

Sudheer Palyam
fonte
Apenas a solução que eu estava procurando! Muito obrigado, Sudheer! Funciona como um encanto para mim. E ei! Eu tenho outra pergunta. Quando acesso o ROOT /ROOTe tento fazer login na página do Gerenciador usando as credenciais corretas, o acesso é negado. Você saberia como consertar isso?
Saturnian
@Sudheer Palyam eu fiz o mesmo. Alterei o arquivo server.xml e iniciei o servidor. Mas quando eu carreguei / visitei o host local: 8080, ele me mostrou um erro de status 404. Se eu excluir essas linhas do server.xml, carregue a porta acima.
Sachin Kumar 27/03
16

O aplicativo padrão ROOT geralmente é o Tomcat Manager - o que pode ser útil, então tive vontade de mantê-lo por perto.

Então, a maneira como eu criei meu aplicativo ROOT e mantive o TCmgr foi assim.

renomeou ROOT para outra coisa

mv ROOT TCmgr

então criei um link simbólico pelo qual o ROOT aponta para o aplicativo que eu quero usar como padrão.

ln -s <your app> ROOT

trabalhou para mim e parecia a abordagem mais fácil.

nestochan
fonte
@ Vic você está certo, mas o Windows tem links simbólicos, no XP e acima eu acho que você pode usar o mklink. Observe que eu não fiz isso e pode haver outros motivos para não usar links simbólicos.
22715 MichaelStoner
12

Você pode fazer isso de uma maneira um pouco hack-y:

  1. Pare o Tomcat
  2. Mova ROOT.war para o lado e rm -rf webapps / ROOT
  3. Copie o webapp que você deseja webapps / ROOT.war
  4. Inicie o Tomcat
gareth_bowles
fonte
2
Feio ou talvez nojento, mas hacky pode ser o termo errado, já que esse parece ser o método oficial / suportado.
Brian Knoblauch
3

Uma solução alternativa seria criar um servlet que envie um redirecionamento para o aplicativo da web padrão desejado e mapear esse servlet para todos os URLs no aplicativo da web ROOT.

package com.example.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RedirectServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.sendRedirect("/myRootWebapp");
  }
}

Adicione a classe acima a
CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet.
E adicione o seguinte a
CATALINA_BASE/webapps/ROOT/WEB-INF/web.xml:

  <servlet>
    <display-name>Redirect</display-name>
    <servlet-name>Redirect</servlet-name>
    <servlet-class>com.example.servlet.RedirectServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Redirect</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

E, se desejado, você pode modificar facilmente o RedirectServlet para aceitar um parâmetro init para permitir que você defina o webapp padrão sem precisar modificar a fonte.

Não tenho certeza se fazer isso teria implicações negativas, mas testei isso e parece funcionar.

Jonathan Dixon
fonte
2

a configuração context.xml não funcionou para mim. O Tomcat 6.0.29 reclama que o docBase está dentro do appBase: ... Para o Tomcat 5, isso realmente funcionou.

Portanto, uma solução é colocar o aplicativo na pasta ROOT.

Outra solução muito simples é colocar um index.jsp no ROOT que redireciona para o meu aplicativo assim: response.sendRedirect ("/ MyApplicationXy");

Atenciosamente, Jan

Jan
fonte
1

Eu tenho um problema ao configurar o Tomcat ' server.xmle adicionar o elemento Context. Ele simplesmente não quer usar minha configuração: http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html

Se você estiver em um Unix-likesistema:

  1. mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
  2. ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT

Feito.

Funciona para mim.

AC de Souza
fonte
1

A melhor maneira de alterar o aplicativo raiz do tomcat. Testado no Tomcat 7 e 8.

  1. Mova para o diretório tomap webapps:

    Exemplo na minha máquina: ~/stack/apache-tomcat/webapps

  2. Renomeie, substitua ou exclua a pasta ROOT. Meu conselho é renomear ou criar uma cópia para backup. Exemplo de renomeação de ROOT para RENAMED_ROOT:

    mv ROOT RENAMED_ROOT

  3. Mova o arquivo war com seu aplicativo para o diretório tomcat webapps (é um diretório onde estava a pasta ROOT antiga, na minha máquina: ~ / stack / apache-tomcat / webapps)

O arquivo war deve ter um nome ROOT.war . Renomeie seu aplicativo, se necessário: yourApplicationName.war -> ROOT.war

  1. Reinicie o tomcat. Após reiniciar, seu aplicativo será uma raiz.
Jackkobec
fonte
0

Vou dar uma olhada nos meus documentos; existe uma maneira de especificar uma configuração para alterar o caminho do aplicativo Web raiz para longe do ROOT (ou ROOT.war), mas parece ter mudado entre o Tomcat 5 e 6.

Encontrou isto:

http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html

Portanto, parece que alterar o caminho raiz (no ROOT.xml) é possível, mas um pouco danificado - você precisa mover seu WAR para fora do diretório de implantação automática. Se importa se eu perguntar por que apenas renomear seu arquivo para ROOT.war não é uma solução viável?

Don Werve
fonte
1
Infelizmente, alterar o arquivo war para ROOT.war não é uma opção para mim. Jacques
um pouco atrasado, mas ... para mim, não posso alterá-lo porque estou usando um sistema criado por terceiros, que parece ter codificado alguns locais para jar arquivos ... movendo-o para o ROOT.war torna um problema, já que os olhares pedido inicial de seu próprio frasco sob um diretório que está em [originalapp.war]
mur
0

Não é uma solução muito boa, mas uma maneira é redirecionar do aplicativo ROOT para o YourWebApp. Para isso, você precisa modificar o ROOT index.html.

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
    </head>
    <body onLoad="javascript:window.location='YourWebApp';">
    </body>
</html>

OU

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
        <meta http-equiv="refresh" content="0;url=YourWebApp" />
    </head>
    <body>
    </body>
</html>

Referência: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

abbas
fonte
-4

No Tomcat 7 (no servidor Windows), não adicionei nem editei nada em nenhum arquivo de configuração. Acabei de renomear a pasta ROOT para outra coisa e renomeei minha pasta de aplicativos para ROOT e funcionou bem.

Dov
fonte
1
Essa pode ser uma boa solução alternativa, mas a pergunta de Jaques é sobre como alterar o aplicativo padrão; pode haver razões pelas quais ele não pode alterar o conteúdo da pasta ROOT.
JVMATL