web-dev-qa-db-fra.com

obtention de l'erreur HTTP Statut 405 - La méthode HTTP GET n'est pas prise en charge par cette URL, mais n'est pas utilisée `get` jamais?

Je suis un débutant et je fais un petit programme d’enregistrement avec une base de données. Mais j’essaie d’exécuter ceci mais cela me donne quelques erreurs. Aidez-moi:

HTTP Status 405 - HTTP method GET is not supported by this URL

type Status report

message HTTP method GET is not supported by this URL

description The specified HTTP method is not allowed for the requested resource.
Apache Tomcat/8.0.5

Et voici mes codes register.html:

<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<form action="Register" method="post">
    Name: <input type="text" name="name">
    Email: <input type="text" name="email">
    Password: <input type="password" name="password">
    Country:

    <select name="userCountry">
        <option>India</option>
        <option>Pakistan</option>
        <option>Other</option>
    </select><br><br>

    <input type="submit" value="register">
</form>
</body>
</html>

Voici mes codes Register.Java:

import Java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import Java.io.*;

public class Register extends HttpServlet{
    public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
        response.setContentType("text/html");
        PrintWriter out=response.getWriter();

        String n=request.getParameter("name");
        String p=request.getParameter("password");
        String e=request.getParameter("email");
        String c=request.getParameter("userCountry");

        try{
            Connection con=DriverManager.getConnection(
                    "jdbc:mysql://localhost:8888", "root", "1234"
            );

            PreparedStatement ps=con.prepareStatement("insert into REGISTERUSER values(?, ?, ?, ?)");

            ps.setString(1,n);
            ps.setString(2,p);
            ps.setString(3,e);
            ps.setString(4,c);

            int i=ps.executeUpdate();
            if(i>0){
                out.print("Registered successfully..");
            }

        }catch(Exception d){d.printStackTrace();}
        out.close();
    }
}

Et voici mon Web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>Register</servlet-name>
        <servlet-class>Register</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Register</servlet-name>
        <url-pattern>/register.html</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>register.html</welcome-file>
    </welcome-file-list>
</web-app>

L'aide serait appréciée !!

7
user3631223

Le problème est que vous avez mappé votre servlet sur /register.html et qu'il attend la méthode POST, car vous avez implémenté uniquement la méthode doPost(). Ainsi, lorsque vous ouvrez la page register.html, la page HTML ne sera pas ouverte avec le formulaire, mais le servlet qui gère les données du formulaire.

Lorsque vous soumettez le formulaire POST à une URL non existante, le conteneur Web affiche 405 erreur (méthode non autorisée) au lieu de 404 (introuvable).

Pour réparer:

<servlet-mapping>
    <servlet-name>Register</servlet-name>
    <url-pattern>/Register</url-pattern>
</servlet-mapping>
10
Leos Literak

Je pense que votre problème peut être dans le modèle d'URL. En changeant

<servlet-mapping>
    <servlet-name>Register</servlet-name>
    <url-pattern>/Register</url-pattern>
</servlet-mapping>

et

<form action="/Register" method="post">

peut résoudre votre problème

2
Totò

Remplacez la méthode de service comme ceci: 

protected void service(HttpServletRequest request, HttpServletResponse   response) throws ServletException, IOException {
        doPost(request, response);
}

Et voila!

1
Mihir Deshpande