Comment appeler la classe servlet à partir du formulaire HTML

j'ai créé un projet d'application web. Il contient une classe servlet et un formulaire HTML. Comment appeler la classe servlet à partir du formulaire HTML?

12
demandé sur BalusC 2010-03-07 08:05:59

2 réponses

il suffit de créer une classe prolongeant HttpServlet et de l'annoter avec @WebServlet sur un certain patron D'URL.

@WebServlet("/login")
public class LoginServlet extends HttpServlet {}

ou lorsque vous êtes encore sur le Servlet 2.5 ou plus ancien (l'annotation était Nouvelle depuis Servlet 3.0), puis Enregistrer le servlet comme <servlet> dans web.xml et le mapper sur un certain motif 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>

alors, il suffit de laisser le lien HTML ou formez un point d'action 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 soumettre, assurez-vous que vous utilisez type="submit" et non type="button" . Une explication sur la partie ${pageContext.request.contextPath} peut être trouvée dans cette question et réponse connexe: comment utiliser le patron d'URL servlet dans L'action de forme HTML sans obtenir L'erreur HTTP 404 .

des Liens et des formes avec method="get" sera invoquer doGet() méthode de la servlet. Vous utilisez habituellement cette méthode pour préprocéder à une requête "on page load".

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // ...
}
Les formes

avec method="post" invoqueront la méthode doPost() du servlet. Vous utilisez habituellement cette méthode pour postprocéder à une demande avec des données de formulaire soumises par l'utilisateur (recueillir les paramètres de la demande, les convertir et les valider, mettre à jour le modèle, invoquer l'action commerciale et finalement rendre réponse).

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // ...
}

pour en savoir plus à propos des servlets et pour trouver des exemples plus concrets, allez à notre page wiki de Servlets . Notez que vous pouvez également utiliser un fichier JSP au lieu d'un fichier HTML. JSP vous permet d'interagir avec backend via des expressions EL tout en produisant une sortie HTML, et d'utiliser des taglibs comme JSTL pour contrôler le flux. Voir aussi notre page wiki JSP .

25
répondu BalusC 2017-05-23 12:24:28

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 tags j'appelle LoginServlet en définissant la méthode comme "post".

0
répondu user3228915 2014-07-18 11:54:52