Posso invocar o Servlet sem mapeá-lo em web.xml? [duplicado]

Dec 12 2020

Se eu tiver ação para um servlet , devemos usar o mapeamento em XML, que é recomendado. Então, ficaria assim:

Índice HTML:

<!DOCTYPE html>

</head><body>
    <form action="go" method="POST">
        Enter name: <input type="text" name="name">
        <button>Submit form :)</button>
    </form>
</body></html>

Mapeamento XML:

<web-app..........
  
  <servlet>
  <servlet-name>servlet</servlet-name>
  <servlet-class>ServletOne</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>servlet</servlet-name>
  <url-pattern>/go</url-pattern>
  </servlet-mapping>
  
</web-app>

Classe servlet

public class ServletOne extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String s = req.getParameter("name");
        PrintWriter pw = resp.getWriter();
        pw.println("Welcome " + s);

    }
}

E funciona bem. Mas minha pergunta é e se eu não quiser fazer um mapeamento - eu quero chamar a classe Servlet diretamente. Removi meu arquivo XML e fiz todas estas linhas:

<form action="ServletOne" method="POST">
<form action="ServletOne.class" method="POST">
<form action="ServletOne.java" method="POST">

E .. nenhum deles funciona. Posso realmente chamar o Servlet diretamente sem mapear? Se sim, como? Às vezes, para fins de teste, não preciso perder tempo mapeando cada servlet.

Respostas

1 LiveandLetLive Dec 12 2020 at 05:07

Você pode usar anotações, por exemplo

@WebServlet("/go")
public class ServletOne extends HttpServlet {
    //...
}

Na verdade, com o Servlet 3.0 em diante, a maioria dos desenvolvedores prefere isso à configuração XML.

Observe que a Especificação de Servlet requer que o mapeamento comece com a /. Verifique isto para aprender mais sobre isso.