ti-enxame.com

Como definir o caminho do contexto no Tomcat para que se possa entrar no site sem anexar o nome da pasta implantada?

Eu li sobre isso no guia do Tomcat aqui e algumas SO perguntas. E acho que estou fazendo a mesma coisa. Mas de alguma forma não consigo ter sucesso .

Em primeiro lugar, devo dizer que meu aplicativo está implantado em um servidor Tomcat compartilhado sobre o qual não tenho controle. Eu simplesmente descarto meu arquivo . War e ele é implantado.

Tentei empacotar meu aplicativo como ROOT.war mas não funcionou. O administrador me disse para empacotá-lo com o nome que eu quiser e eles cuidariam disso. Eu empacotei como my-application.war e foi implantado, mas eu tenho que inserir http: // my-Host/my-application para chegar ao site.

Depois de entrar em contato com o administrador, eles me disseram que colocaram um elemento de contexto no arquivo de configuração do meu Host no Tomcat como:

<Context path="" docBase="path of my-application deployed folder"/>

que deveria definir my-application como aplicativo padrão para todas as solicitações provenientes de my-Host. Mas não funcionou e sempre que eu entro http: // my-Host Eu recebo:

HTTP Status 404 - / The requested resource (/) is not available

Mas, novamente, quando eu insiro http: // meu-Host/meu-aplicativo tudo funciona bem. Qualquer sugestão sobre o que pode estar errado é definitivamente apreciada.

Atualizações:
Tentei seguir as etapas descritas na documentação do Tomcat em como tornar o aplicativo padrão . Três maneiras são descritas e eu tentei todas as três maneiras e consegui implantar meu aplicativo como ROOT no localhost.

Também tentei reproduzir o problema que estou enfrentando no servidor remoto para encontrar o motivo e relatar ao administrador. Eu encontro alguns problemas.

  1. Em server.xml fragmento que o administrador me enviou autoDeploy e deployOnStartUp são definidos como verdadeiros, mas deveriam ser falsos se definindo explicitamente o elemento Context em server.xml. Isso causará implantação dupla, que criará uma pasta ROOT e uma pasta com o nome do arquivo .war. Excluir o .war excluirá sua pasta correspondente e desimplanta o aplicativo, mas o ROOT permanece e deve ser excluído manualmente e requer a reinicialização do Tomcat. Até que seja reiniciado, qualquer implantação de ROOT.war falhará.
  2. Percebi que existem alguns motivos que impedem a implantação de ROOT.war. Pode ser que um ROOT.xml existe em conf/{engine-name}/{Host-name} ou uma pasta ROOT existe no appBase do Host ou como descrevi acima, um aplicativo ROOT da implantação anterior não é desimplantado e requer reinicialização do Tomcat.

De qualquer forma, não consegui identificar exatamente o que está impedindo o ROOT.war de implantar, uma vez que isso requer o acesso aos arquivos de log e arquivos conf do Tomcat para verificar os casos que descrevi acima.

Além disso, pelo que vejo, o administrador parece incapaz de manter um servidor Tomcat e de encontrar o problema. Então, decidi ir com um servidor Tomcat dedicado depois de lutar com o compartilhado.

11
doctrey

Em sua pergunta, você afirma que o administrador definiu o contexto como:

<Context path="" docBase="path of my-application deployed folder"/>

Com base nos comentários acima, sugiro tentar usar o caminho relativo do seu aplicativo em vez do caminho absoluto.

Eu tentei isso no meu servidor Tomcat com:

<Context path="/" docBase="my-application/" />

e isso funcionou.

O elemento Host que contém o elemento Context na verdade define alguns parâmetros que também podem impactar o contexto. Se forem as configurações padrão, um contexto relativo deve simplesmente apontar para a pasta webapps. Se for alterado, os resultados podem variar.

5
Jeff Goldberg

Normalmente, isso pode ser alcançado através das seguintes etapas:

  • Defina um arquivo de contexto ROOT.xml em conf/Catalina/localhost
  • Nomeie seu webapp WAR como “ROOT.war” ou contendo a pasta “ROOT”

No entanto, duvido que você consiga fazer isso em uma instância compartilhada do Tomcat. Apenas um aplicativo pode ser executado como o aplicativo padrão. A empresa de hospedagem provavelmente não permitirá, caso contrário, qual aplicativo eles permitirão que seja o padrão entre as muitas pessoas que compartilham a mesma instância do Tomcat?

Veja este link: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-Tomcat.html

4
ziggy

O Tomcat Wiki tem uma seção sobre como colocar aplicativos no contexto padrão. No entanto, para fazer isso, isso implica algum controle sobre o servidor Tomcat que pode não ser possível no contexto compartilhado que você descreve.

Se você tiver a capacidade de instalar outros sistemas no servidor, uma solução alternativa seria usar um servidor proxy como o NGINX. Isso é muito mais complicado do que simplesmente nomear seu arquivo war como ROOT.war, mas às vezes é a única opção.

Se você tiver NGINX escutando no servidor e tiver seu próprio url, use o HttpProxyModule com configurações como:

server {
        listen          80;
        server_name     my.domain.com;
        location / {
            proxy_pass              http://my-Host/my-application;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_Host;
        }
    }

Além disso, para fazer isso funcionar, você teria que possuir o url "my.domain.com" e ele precisaria ser separado do um que todos estão usando para o servidor Tomcat compartilhado.

A parte nginx da solução é gratuita, mas se você precisar registrar um novo url e usar algo como no-ip.com para redirecioná-lo para o servidor Tomcat, isso custaria dinheiro.

3
Jeff Goldberg