HTTP状态405 - HTTP方法此URL不支持POST:使用netbeans的glassfish服务器

时间:2016-06-25 17:31:38

标签: java servlets netbeans glassfish

I am getting this error on using post method in my form-- HTTP Status 405 - HTTP method POST is not supported by this URL.  

我的register.html文件如下:

    <html>        
    <head>        
    <title>Register form</title>        
    </head>        
    <body>        
    <form method="post" action="Register">        
    Name:<input type="text" name="name" /><br/>        
    Email ID:<input type="text" name="email" /><br/>        
    Password:<input type="text" name="pass" /><br/>        
    <input type="submit" value="register" />        
    </form>        
    </body>        
    </html>        

My Register.java servlet代码如下

package Glassfish;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
/**
 *
 * @author Intel I 5
 */
public class Register extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doPost(request, response);
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    String name = request.getParameter("name");
    String email = request.getParameter("email");
    String pass = request.getParameter("pass");
    try{

    //loading drivers for mysql
    Class.forName("com.mysql.jdbc.Driver");

//creating connection with the database 
      Connection  con=DriverManager.getConnection
                 ("jdbc:mysql://localhost:3306/test","user","pass");

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

    ps.setString(1, name);
    ps.setString(2, email);
    ps.setString(3, pass);
    int i=ps.executeUpdate();

      if(i>0)
      {
        out.println("You are sucessfully registered");
      }

    }
    catch(Exception se)
    {
        se.printStackTrace();
    }

  }

}

我的Web.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 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">
        <servlet>
        <servlet-name>Register</servlet-name>
        <servlet-class>Glassfish.Register</servlet-class>
        </servlet>
         <servlet-mapping>
        <servlet-name>Register</servlet-name>
        <url-pattern>/Register</url-pattern>

     </servlet-mapping>

     <session-config>
    <session-timeout>
        30
        </session-timeout>
    </session-config>
 </web-app>

我已尝试在http错误405中提供的所有实例,用于堆栈溢出中的post方法,但没有用。

2 个答案:

答案 0 :(得分:0)

您需要在类中覆盖doPost方法,并在其中处理POST请求 您还需要覆盖doGet方法,并提供处理GET请求的代码。

您不应该覆盖service方法(或者至少以您在代码中完成的方式)。您在doPost(request, response);方法中调用了service,该方法是从HttpServlet抽象类中借用的,您可以在此处看到此方法的默认实现:
http://grepcode.com/file/repo1.maven.org/maven2/javax.servlet/servlet-api/2.5/javax/servlet/http/HttpServlet.java#HttpServlet.doPost%28javax.servlet.http.HttpServletRequest%2Cjavax.servlet.http.HttpServletResponse%29

351     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
352     throws ServletException, IOException
353     {
354     String protocol = req.getProtocol();
355     String msg = lStrings.getString("http.method_post_not_supported");
356     if (protocol.endsWith("1.1")) {
357         resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
358     } else {
359         resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
360     }
361     }

即 - 它向浏览器发送BAD_REQUEST或METHOD_NOT_ALLOWED错误。

答案 1 :(得分:0)

更改你的public void service()方法,改为将其更改为public void doGet()并删除方法中的调用doPost(req,resp)。让我知道这是否有帮助。这将100℅工作!!