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?
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?
Respostas:
Existem três métodos:
Primeiro desligue o seu Tomcat a partir do bin
diretório ( sh shutdown.sh
). Em seguida, exclua todo o conteúdo da sua webapps
pasta Tomcat ( rm -fr *
). Em seguida, renomeie seu arquivo WAR para ROOT.war
e, finalmente, inicie o Tomcat a partir do bin
diretório ( sh startup.sh
).
Deixe seu arquivo de guerra $CATALINA_BASE/webapps
com o nome original. Desative o
autoDeploy e deployOnStartup no seu elemento Host no server.xml
arquivo. 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.xml
em $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 .xml
arquivo, neste caso ROOT.xml
. Consulte a documentação do contêiner de contexto para obter detalhes.
$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 .
sudo systemctl start tomcatx
onde x
representa o número da versão
Adicionando uma <Context>
tag na <Host>
tag no server.xml
para 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>
No Tomcat 7 com essas alterações, eu posso acessar myAPP
em /
e ROOT
em/ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
Adicione acima à <Host>
seção em server.xml
/ROOT
e tento fazer login na página do Gerenciador usando as credenciais corretas, o acesso é negado. Você saberia como consertar isso?
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.
De acordo com os documentos do Apache Tomcat, você pode alterar o aplicativo criando um arquivo ROOT.xml. Veja isto para mais informações:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
"O aplicativo da web padrão pode ser definido usando um arquivo chamado ROOT.xml."
Você pode fazer isso de uma maneira um pouco hack-y:
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.
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
Eu tenho um problema ao configurar o Tomcat ' server.xml
e 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-like
sistema:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
Feito.
Funciona para mim.
A melhor maneira de alterar o aplicativo raiz do tomcat. Testado no Tomcat 7 e 8.
Mova para o diretório tomap webapps:
Exemplo na minha máquina: ~/stack/apache-tomcat/webapps
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
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
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?
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
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.