收到错误 HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET 但从未使用过“get”?

Posted

技术标签:

【中文标题】收到错误 HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET 但从未使用过“get”?【英文标题】:getting error HTTP Status 405 - HTTP method GET is not supported by this URL but not used `get` ever? 【发布时间】:2014-06-30 17:24:22 【问题描述】:

我是一个初学者,正在使用数据库制作一个小型注册程序但我正在尝试运行它但它给了我一些错误请帮助:

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

这是我的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>

这是我的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();
    

这是我的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>

我们将不胜感激!

【问题讨论】:

将 mysql 连接器 jar 添加到 IDE 中应用程序的 lib 路径。 哦,伙计..有时我觉得自己要踢自己......因为我忘记了每一个愚蠢的错误:p 【参考方案1】:

问题是您将 servlet 映射到 /register.html 并且它需要 POST 方法,因为您只实现了 doPost() 方法。所以当你打开register.html页面时,它不会打开带有表单的html页面,而是处理表单数据的servlet。

或者,当您将 POST 表单提交到不存在的 URL 时,Web 容器将显示 405 错误(方法不允许)而不是 404(未找到)。

修复:

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

【讨论】:

或者,或者,创建一个简单调用 doPost() 的 doGet() 覆盖。 我按照你说的做了尝试,但它只给了我BLANK WHITE PAGE请帮助:( 现在我可以显示表单但是...当我单击提交按钮时,它会重定向到白色空白页面并且不显示“注册成功”消息...我的材料都没有保存到数据库中。 .. 显示java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:8888 谢谢伙计..我忘记将驱动程序连接器添加到我的 IDE.. 愚蠢的错误:p【参考方案2】:

像这样覆盖服务方法:

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

瞧!

【讨论】:

【参考方案3】:

我认为您的问题可能出在 url 模式中。改变

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

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

可能会解决您的问题

【讨论】:

应该是&lt;form action="/Register" method="post"&gt; 是的,我知道。感谢您选择这个,我已经更新了答案 URL /Register 仅适用于作为 ROOT 部署的 webapp(无上下文) 但是当我点击提交时有一个问题..它没有显示消息Registered succesfully我也看不到重要的数据库...... 如果是解决方案,请随时投票并将答案标记为解决方案:)

以上是关于收到错误 HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET 但从未使用过“get”?的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET - RequestDispatcher 出现错误

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]

Servlet 错误:HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]

Apache Tomcat HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]

此 URL Java servlet 不支持 HTTP 方法 POST

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]