Puis-je appeler Servlet sans le mapper dans web.xml? [dupliquer]

Dec 12 2020

Si j'ai une action sur un servlet , nous devrions utiliser le mappage en XML, ce qui est recommandé. Cela ressemblerait donc à ceci:

Index HTML:

<!DOCTYPE html>

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

Mappage 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 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);

    }
}

Et cela fonctionne très bien. Mais ma question est de savoir si je ne veux pas faire de mappage - je veux appeler directement la classe Servlet. J'ai supprimé mon fichier XML et j'ai fait toutes ces lignes:

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

Et .. aucun d'entre eux ne fonctionne. Puis-je réellement appeler Servlet directement sans mappage du tout? Si oui, comment? Parfois, à des fins de test, je n'ai pas besoin de perdre de temps à cartographier chaque servlet.

Réponses

1 LiveandLetLive Dec 12 2020 at 05:07

Vous pouvez utiliser l'annotation par exemple

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

En fait, à partir de Servlet 3.0, la plupart des développeurs préfèrent cela à la configuration XML.

Notez que la spécification de servlet requiert que le mappage commence par un /. Vérifiez ceci pour en savoir plus.