J'ai créé un projet d'application Web. Il contient une classe de servlet et un formulaire HTML. Comment appeler la classe servlet à partir du formulaire HTML?
Créez simplement une classe qui étend HttpServlet
et annotez-la avec @WebServlet
sur un certain modèle d'URL.
@WebServlet("/login")
public class LoginServlet extends HttpServlet {}
Ou bien, si vous êtes toujours sur Servlet 2.5 ou une version antérieure (l'annotation était nouvelle depuis Servlet 3.0), enregistrez le servlet en tant que <servlet>
dans web.xml
et mappez-le sur un certain modèle d'URL via <servlet-mapping>
.
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.example.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
Ensuite, laissez simplement le lien HTML ou l'action de formulaire pointer vers une URL qui correspond au url-pattern
du servlet.
<a href="${pageContext.request.contextPath}/login">Login</a>
<form action="${pageContext.request.contextPath}/login" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit">
</form>
Lorsque vous utilisez les boutons d’envoi, assurez-vous d’utiliser type="submit"
et non type="button"
. Vous trouverez des explications sur la partie ${pageContext.request.contextPath}
dans la question et la réponse correspondantes: Comment utiliser le modèle d’URL de servlet dans une action de formulaire HTML sans obtenir l’erreur HTTP 404 .
Les liens et les formulaires avec method="get"
invoqueront la méthode doGet()
du servlet. Vous utilisez généralement cette méthode pour prétraiter une demande "au chargement de la page".
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ...
}
Les formulaires avec method="post"
invoqueront la méthode doPost()
du servlet. Vous utilisez généralement cette méthode pour post-traiter une demande avec les données de formulaire soumises par l'utilisateur (collecter les paramètres de la demande, les convertir et les valider, mettre à jour le modèle, invoquer une action commerciale et enfin rendre la réponse).
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ...
}
Pour en savoir plus sur les servlets et trouver des exemples plus concrets, rendez-vous sur notre page wiki Servlets . Il convient de noter que vous pouvez également utiliser un fichier JSP au lieu d'un fichier HTML simple. JSP vous permet d'interagir avec le backend via des expressions EL tout en générant une sortie HTML, et d'utiliser des balises taglibs comme JSTL pour contrôler le flux. Voir aussi notre page wiki JSP .
Par exemple je crée un login.html comme ça
<div class="container">
<form method = "post" class="form-signin" role="form" action="LoginServlet">
<h2 class="form-signin-heading">Please sign in</h2>
<input type="text" class="form-control" name = "username" placeholder="User Name" required autofocus>
<input type="password" class="form-control" name = "password" placeholder="Password" required>
<div class="checkbox">
<label>
<input type="checkbox" value="remember-me"> Remember me
</label>
</div>
<input type="submit" class="btn btn-lg btn-primary btn-block" value="Sign in">
</form>
</div>
Entre les tags, j'appelle LoginServlet en définissant la méthode comme "post".