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

9

我是一名初学者,正在制作一个带有数据库的小型注册程序。但是当我尝试运行它时,却遇到了一些错误,请帮忙解决:

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>

需要帮助!


在你的IDE中将mysql连接器jar添加到应用程序的lib路径。 - Ravinder Reddy
2
哦,有时候我感觉想要踢自己……因为我会忘记一些愚蠢的错误 :p - user3631223
3个回答

12

问题在于你将servlet映射到了/register.html并且只实现了doPost()方法,因此当你打开register.html页面时,它不会显示带有表单的html页面,而是处理表单数据的servlet。

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

解决方法:

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

3
或者,您可以创建一个doGet()重写方法,只需调用doPost()即可。 - FoggyDay
现在我可以显示表单,但是当我点击提交按钮时,它会重定向到一个空白页面,没有显示“注册成功”的消息...也没有将我的材料保存到数据库中... - user3631223
它显示了java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:8888 - user3631223
你使用哪个应用服务器?你需要将mysql jdbc驱动程序复制到应用服务器的libs目录或将其捆绑在Web应用程序的WEB-INF/lib目录中。 - Leos Literak
1
谢谢啊,我忘记在我的集成开发环境中添加驱动程序连接器了.. 这是一个愚蠢的错误 :p - user3631223
显示剩余2条评论

3

像这样覆盖服务方法:

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

完成了!


2
我认为您的问题可能出在url模式上。更改如下:
<servlet-mapping>
    <servlet-name>Register</servlet-name>
    <url-pattern>/Register</url-pattern>
</servlet-mapping>

并且

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

可能可以解决您的问题。

1
它应该是<form action="/Register" method="post"> - Braj
2
URL /Register 只适用于部署为 ROOT(无上下文)的 Web 应用程序。 - Leos Literak
但是有一个问题,当我点击提交时...它不会显示消息“注册成功”,也无法在数据库中看到这一点... - user3631223
如果这个答案解决了你的问题,请随意点赞并将其标记为解决方案 :) - Totò
日志中有任何异常吗?也许Servlet由于某些原因正在中断。 - Totò
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接