2015-12-01 2 views
0

Je suis conscient qu'il y a beaucoup de messages avec le même nom, mais je n'arrive toujours pas à trouver le problème. J'essaie de soumettre un formulaire d'inscription en utilisant la poste pour enregistrer un utilisateur dans une base de données, mais je reçois l'erreur de titre lorsque je clique sur le bouton Soumettre. Cela semble être causé par ne pas avoirLa méthode HTTP POST n'est pas supportée par cette URL quand doPost est surchargé

doPost(HttpServletRequest, HttpServletResponse) 

dans la classe appelé, mais j'ai un qui est pourquoi je ne vois pas le problème.

Le formulaire soumis est à l'adresse:/Histoire/registre

<form method="post" action="RegisterHandler"> 
    <label>Username: <input type="text" name="desired_username" value="" size="10"></label><br><br> 
    <label>Password: <input type="password" name="desired_pass" value="" size="10"></label><br><br> 
    <input type="submit" name="commit" value="Register"> 
</form> 

Sur soumettre l'URL devient/histoire/registerHandler. J'ai un répartiteur qui mappe cette URL à la classe Registerhandler réelle.

URL url = new URL(request.getRequestURL().toString()); 
String path = url.getPath(); 
String parts[] = path.split("/"); 
if(parts.length>2){ 
         if("story".equals(parts[2])){ 
           this.log(requestIp + ": " + "- User: Sean - Email: [email protected] - Accessed a story."); 
           new Story().doGet(request, response); 
         } else if ("about".equals(parts[2])){ 
           log(requestIp + ": " + "- User: Sean - Email: [email protected] - Accessed a the about page"); 
           about(request, out, cfg); 
         } else if ("default.css".equals(parts[2])){ //needed because dispatcher sends href to external stylesheet to the default page 
           defaultCss(request, out, cfg); 
         } else if ("register".equals(parts[2])){ 
           log(requestIp + ": " + "- User: Sean - Email: [email protected] - Accessed a the register page."); 
           register(request, out, cfg); 
         } else if ("RegisterHandler".equals(parts[2])){ 
           log(requestIp + ": " + "- User: Sean - Email: [email protected] - Accessed RegisterHandler"); 
           new RegisterHandler().doPost(request, response); 
         } else { 
           log(requestIp + ": " + "- User: Sean - Email: [email protected] - Accessed the default page"); 
           new Default().doGet(request, response); 
         } 

Le répartiteur fonctionne dans tous les cas, outre le cas de registerHandler que je suppose est à cause de l'erreur.

La classe registerHandler est la suivante:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
      cfg = new Configuration(Configuration.VERSION_2_3_22); 
      cfg.setDirectoryForTemplateLoading(new File("/home/ubuntu/jetty-distribution-9.3.3.v20150827/cse383base/webapps/Story")); 
      cfg.setDefaultEncoding("UTF-8"); 

      PrintWriter out = response.getWriter(); 
      try { 
        this.generatePage(request, out, cfg); 
      } catch (Exception e) { 
        e.printStackTrace(out); 
      } 
    } 

Je sais que l'instruction if dans le Dispatcher devient le droit URL à partir du bouton soumettre, car toute autre URL serait tout simplement aller à la page par défaut.

Est-ce que quelqu'un voit pourquoi il est dit que l'URL ne supporte pas le POST?

Répondre

1

L'indice est le message ...

HTTP method POST is not supported 

Ce message est produit par l'implémentation par défaut javax.servlet.http.HttpServletdoPost(HttpServletRequest request, HttpServletResponse response).

Voir: https://github.com/jetty-project/codehaus-servlet-api/blob/servlet-3.0/src/main/java/javax/servlet/http/HttpServlet.java#L351-L361

Cela signifie que la demande URI qui a été émise est frapper un Servlet qui n'a pas void doPost(HttpServletRequest request, HttpServletResponse response) surchargée.

Que enquêter sur:

  • Quelle est votre demande URI comme on le voit sur le côté serveur? (La partie la plus importante sera l'URI.path)
  • Quelle est la servlet réelle qui est touchée par votre client?
  • Qu'est-ce que cette servlet a déclaré pour son appel doPost()?