java - soportado - Estado HTTP 405: el HTTP HTTP servlet no admite el método HTTP POST.
http method get is not supported by this url (5)
Dice "POST no admitido", por lo que la solicitud no está llamando a su servlet. Si fuera usted, emitiré un GET (p. Ej., Acceso mediante un navegador) a la URL exacta en la que está emitiendo su solicitud POST y veré qué obtiene. Apuesto a que verás algo inesperado.
Estoy teniendo problemas para conseguir que la página funcione. Tengo mi método de formulario para publicar y mi servlet implementa doPost()
. Sin embargo, sigue mostrándome que no estoy soportando el método POST .
Solo estoy tratando de hacer un sitio web simple e insertar valores en mi base de datos MySQL.
*type Status report
message HTTP method POST is not supported by this URL
description The specified HTTP method is not allowed for the requested resource (HTTP method POST is not supported by this URL).*
la página estática:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.wapforum.org/DTD/xhtml-mobile10.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>XHTML Mobile Profile Document</title>
<!--
Change href="style.css" below to the file name and
relative path or URL of your external style sheet.
-->
<link rel="stylesheet" href="index.css" type="text/css"/>
<!--
<style> document-wide styles would go here </style>
-->
</head>
<body>
<h1> Register Here </h1>
<form action="regSuccess.do" method = "POST">
UserName: <input type="text" name="txtregUsername" size="15" maxlength="15">
<br/>
Password: <input type="password" name="txtregPassword" size="15"
maxlength="15"><br/>
Name: <input type="text" name="txtregName" size="20" maxlength="30"><br/>
Email: <input type="text" name="txtregEmail" size="20" maxlength="30">
<br/><br/>
<input type="submit" name="btnRegister" value="Register Me"/>
</form>
</body>
</html>
el servlet
package core;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class handlingReg extends HttpServlet {
//database parameters
private static final String db_server = "localhost/";
private static final String db_name ="bus_guide";
private Connection con = null;
//init of connection to dabatase
public void init(ServletConfig config) throws ServletException {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
}
catch (Exception e) {
System.out.println("Exception in init(): unable to load JDBC DriverA");
}
try {
con = DriverManager.getConnection("jdbc:mysql://"+ db_server + db_name , "root" , "");
System.out.println("conn: "+con);
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
//end init()
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//response handling
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//handling request
String enteredUsername = request.getParameter("txtregUsername");
String enteredPw = request.getParameter("txtregPassword");
String enteredName = request.getParameter("txtregName");
String enteredEmail = request.getParameter("txtregEmail");
//inserting values into database
try {
Statement stmnt = con.createStatement();
stmnt.executeUpdate("INSERT INTO regUsers VALUES(''"+enteredUsername+"'',''"+enteredPw+"'',''"+enteredName+"'',''"+enteredEmail+"'')");
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
//output html out.println("");
out.println("<?xml version = /"1.0/" encoding =/"utf-8/"?>");
out.println("<!DOCTYPE html PUBLIC /"-//WAPFORUM/DTD XHTML Mobile 1.0//EN/"");
out.println(" /"http://www.wapforum.org/DTD/xhtml-mobile10.dtd/">");
out.println("<html xmlns=/"http://www.w3.org/1000/xhtml/">");
out.println("<head>");
out.println("<title></title>");
out.println("</head>");
out.println("<body>");
out.println("Register Success!");
out.println("<a href = /"index.xhtml/"> Click here to go back to main page.
</a>");
out.println("</body>");
out.println("</html>");
}
}
web.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<!--Self declared servlet mapping starts here-->
<servlet>
<servlet-name>handleRegister</servlet-name>
<servlet-class>core.handlingReg</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>handleRegister</servlet-name>
<url-pattern>/regSuccess.do</url-pattern>
</servlet-mapping>
<!--Self declared servlet mapping ends here-->
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
<mime-mapping>
<extension>xhtml</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jad</extension>
<mime-type>text/vnd.sun.j2me.app-descriptor</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jar</extension>
<mime-type>application/java-archive</mime-type>
</mime-mapping>
</web-app>
edición: eliminado doGet (solicitud, respuesta);
Es porque estás llamando a doGet()
sin implementar realmente doGet()
. Es la implementación predeterminada de doGet () la que produce el error que indica que el método no es compatible.
Esto me pasó cuando
- Incluso con mi servlet teniendo solo el método "doPost"
Y el método de formulario = "POST"
Intenté acceder a la acción usando la URL directamente, sin usar el formulario submitt. Dado que el método predeterminado para la URL es el método doGet, cuando no use el formulario enviado, verá en su consola el error http 405.
Solución: utilice solo el botón de formulario que asignó a la acción de su servlet.
Si aún estás enfrentando el problema incluso después de reemplazar doGet()
con doPost()
y cambiar el method="post"
formulario method="post"
. Intente borrar la memoria caché del navegador o presione la URL en otro navegador o en modo de incógnito / privado. ¡Puede funcionar!
Para las mejores prácticas, por favor siga este enlace. https://www.oracle.com/technetwork/articles/javase/servlets-jsp-140445.html
Si estás usando Tomcat puedes probar esto
<servlet-mapping>
<http-method>POST</http-method>
</servlet-mapping>
además de <servlet-name>
y <url-mapping>