Problema de barra final no Tomcat 7 com webapps

13

Recentemente, atualizei meu servidor tomcat da versão 6.x para a versão 7.x mais recente.

Eu tive alguns problemas, esperando obter ajuda.

Eu tenho um aplicativo chamado MyApp

No tomcat6, quando eu ia para http://www.example.com/MyApp/page/ , normalmente obtinha o resultado desejado.

Agora, no tomcat7, visitando o mesmo URL exato (com a barra à direita), estou recebendo o erro: "O recurso não está disponível", pois o tomcat pensa que / MyApp / page / é um nome completo do webapp em vez de ser um nome de solicitação página no webapp MyApp.

Preciso da barra no final do meu URL porque, caso contrário, estou recebendo o erro: "Status HTTP 405 - O método de solicitação 'GET' não é suportado", o que é bom porque realmente não permiti o método GET à solicitação de "página" .

Se alguém souber como informar ao tomcat que a barra após o caminho do webapp existente não deve redirecioná-lo para novas chamadas do webapp para toda a "string" e apenas processar a solicitação como no tomcat6, seria ótimo!


fonte
Existe um servlet padrão no web.xmlqual é mapeado /*? Caso contrário, o tomcat usa uma lista de arquivos de boas-vindas. Normalmente, apenas o primeiro segmento do caminho é interpretado como uma raiz de contexto. Portanto, não encontrar o seu aplicativo da Web não parece ser o problema.
mana
o primeiro segmento de caminho é uma raiz de contexto e realmente funciona, encontra-o, mas os caminhos a seguir, em vez de fazer parte do primeiro caminho, o tomcat pesquisam o webapp com todo o caminho. Não tenho nada que esteja configurado que não é padrão ..
Eu realmente não entendo o que você está dizendo. Desculpe. Se você tiver um MyAppaplicativo da web configurado com o nome , o tomcat usará esse contexto de aplicativo da web usando o caminho restante page/. Caso contrário, ele procurará o ROOTcontexto, usando o caminho completo para uma pesquisa.
Mana #
Eu tenho um webapp que chama MyApp e example.com/MyApp está funcionando, mas, ao visitar example.com/MyApp/foo, em vez de procurar conteúdo foo no MyApp, ele procura por um webapp que chama "MyApp / foo /" e não procura o conteúdo sob MyApp chama foo ..

Respostas:

1

Pergunta antiga, mas desde que recentemente lutei com a barra final no Tomcat 8, sei que os problemas com a barra continuam a atormentar o mundo dos usuários do Tomcat. :-)

O que você pode estar enfrentando são mudanças na maneira como o Tomcat lida com redirecionamentos ao carregar o contexto raiz. Confira o bug 58660 e leia algumas das discussões do desenvolvedor lá. Pode ser necessário desligar o mapeador de padrão, modificando o mapperContextRootRedirectEnabledatributo do Contextelemento conf/context.xml.

Pedro
fonte
0

Verifique sua lista de arquivos de boas-vindas. O que se segue é especulação ...

Eu acredito que a essência da questão é quando o Tomcat é apresentado com um / - ele tem algumas opções - repete a lista de arquivos de boas-vindas - não existe nada lá - mostra a listagem de diretórios (se ativado)

Aqui é onde a diversão começa ... Muitas pessoas querem usar * .do para coisas como struts. Então eles querem que index.do seja a página inicial. Ou também comum é index.jsp, em que * .jsp é mapeado para o JspServlet.

Aqui é onde as coisas se divertem. Então, digamos que seus arquivos de boas-vindas sejam index.jsp, index.do.

O que o Tomcat (IIRC) está fazendo é iterando primeiro na lista de arquivos de boas-vindas, procurando recursos com esse nome.

Em seguida, ele fará uma segunda passagem procurando mapeamentos correspondentes. Portanto, se index.jsp for especificado na lista de boas-vindas e * .jsp for mapeado. Então o tomcat tentará encaminhar para index.jsp e você obterá um 404.

Então, acho que você tem um mapeamento de servlet e sobreposição de arquivos de boas-vindas. E o comportamento desse servlet não suporta GET. (Daí o 405)

Tim Funk
fonte
0

Se o seu projeto estiver usando o módulo dinâmico da Web da v2.2, você precisará criar explicitamente pelo menos um arquivo (pode ser um arquivo html vazio) presente no web.xml (por exemplo: index.html) no seu WebContent.

Snehal
fonte
1
isso é comentário; não é uma resposta; considere comentar no futuro quando conseguir mais pontos. Obrigado
Hrvoje Špoljar