¿Puedo invocar Servlet sin mapearlo en web.xml? [duplicar]

Dec 12 2020

Si tengo acción para un servlet , deberíamos usar mapeo en XML, lo cual es recomendado. Entonces se vería así:

Í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>

Mapeo 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>

Clase de 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);

    }
}

Y funciona bien. Pero mi pregunta es qué pasa si no quiero hacer un mapeo, quiero llamar a la clase Servlet directamente. Eliminé mi archivo XML e hice todas estas líneas:

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

Y ... ninguno de ellos funciona. ¿Puedo llamar a Servlet directamente sin ningún mapeo? Si es así, ¿cómo? A veces, con fines de prueba, no necesito perder tiempo mapeando cada servlet.

Respuestas

1 LiveandLetLive Dec 12 2020 at 05:07

Puede utilizar la anotación, por ejemplo

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

De hecho, Servlet 3.0 en adelante, la mayoría de los desarrolladores prefieren esto a la configuración XML.

Tenga en cuenta que la Especificación de servlet requiere que la asignación comience con un /. Compruebe esto para obtener más información al respecto.