Alterar a home page padrão no caminho da raiz para o servlet com doGet

Eu tenho um pequeno maven (indiretamente através da configuração do NetBeans 8.1 e tomcat)

E sempre que eu corri o projeto, ele abre o navegador com um HelloWord na raiz:

ou seja, a página em http://localhost:8084/ é:

   Start Page    

Hello World!

Eu tentei criar um servlet para substituí-lo usando:

@WebServlet(name = "HomeServlet", urlPatterns = {"/"}) no entanto, não funcionou como esperado.

Ou seja, ainda mostrava o mesmo olá mundo em: http://localhost:8084

Mas ele mexeu com todos os arquivos na raiz, isto é, http://localhost:8084/foo.css estava sendo tratado por este servlet e recebendo sua resposta.

Então, minha pergunta é (na verdade dois):

Como posso alterar o conteúdo desta página para outra coisa?

Ou, no mínimo (se a primeira for impossível): Posso usar um redirecionamento permanente no caminho da raiz para evitar que o usuário veja esta página?

(isto é, código http 301) para mover o usuário para http://localhost:8084/home

Como posso alterar o conteúdo desta página para outra coisa?

Abra o arquivo JSP / HTML / XHTML subjacente em um editor de texto. Esta página é identificada pela input no web.xml . Se for, por exemplo, index.jsp , será necessário abrir o arquivo /index.jsp no conteúdo da Web do seu projeto no editor de texto interno do IDE.


Ou, no mínimo (se a primeira for impossível): Posso usar um redirecionamento permanente no caminho da raiz para evitar que o usuário veja esta página?

Esta questão é mal pensada. Você não quer redirect o visitante para trás e para trás o tempo todo. Você deseja mapear seu servlet na raiz do webapp. Para mapear um servlet no caminho raiz, use o padrão de URL de cadeia vazia "" vez do padrão de URL de servlet padrão "/" como em sua tentativa.

 @WebServlet("") 

Ou se você ainda não estiver no Servlet 3.0 , aqui está a maneira antiga do web.xml .

  yourHomeServlet    

Se você continuar usando o padrão de URL de servlet padrão de "/" , terá de assumir todas as responsabilidades do servlet padrão interno do contêiner, como servir resources estáticos, como arquivos CSS, adicionar headers de armazenamento em cache do navegador, suportar currículos de download de arquivos, etc. Veja também o primeiro link relacionado abaixo para detalhes.

Pelo menos não há necessidade de abusar do para isso. Isso não representa o “arquivo da página inicial”, como muitos iniciantes parecem esperar. Isso representa “o arquivo padrão da pasta para ser exibido quando qualquer subpasta é solicitada”. Assim, não só em / , mas também em /foo/ , /bar/ , etc.

Veja também:

  • Diferença entre / e / * no padrão de URL de mapeamento de servlet
  • Como configurar a lista de arquivos de boas-vindas no web.xml

Sempre que você definir um index.jsp em web.xml na página de aterrissagem, quando você iniciar o aplicativo será a página index.jsp, ou seja, por padrão, o caminho do servlet será “/index.jsp “( http: // localhost: 8084 / index.jsp ). No entanto, no navegador que não será exibido. Em sua class de servlet, você pode corresponder esse padrão e redirect para outra página, se necessário.