0

I am encountering HTTP Status 405 – Method Not Allowed error in my Java Backend. I am using Apache Tomcat Server Type Status Report

Message HTTP method GET is not supported by this URL

Description The method received in the request-line is known by the origin server but not supported by the target resource.

Here is the screenshot:

enter image description here

My Web.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee    
 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Backend</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
  <param-name>cors.allowed.origins</param-name>
  <param-value>http://localhost:3000</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>BatchDisplay</servlet-name>
<servlet-class>com.hello.BatchDisplay</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BatchDisplay</servlet-name>
<url-pattern>/BatchDisplay.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AddServlet</servlet-name>
<servlet-class>com.hello.AddServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AddServlet</servlet-name>
<url-pattern>/AddServlet.do</url-pattern>
</servlet-mapping>
</web-app>

When I am executing Post request from Postman, I am getting this error.

My Java backend code:

    package com.hello;
    import java.io.*;  
    import java.sql.*;  
    import javax.servlet.ServletException;
    import javax.servlet.http.*;

public class AddServelet extends HttpServlet { 

private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request,HttpServletRequest response) throws ServletException
{
    
    try {
        
        String custNumber=request.getParameter("cust_number");
        String nameCustomer=request.getParameter("name_customer");
        String invoiceID=request.getParameter("invoice_id");
        Double TotalOpenAmount=Double.parseDouble(request.getParameter("total_open_amount"));
        String dueinDATE=request.getParameter("due_in_date");
        String Notes=request.getParameter("notes");
        System.out.print("Acquiring Connection");
        Connection connection = DriverManager.getConnection("com.mysql.jdbc.Driver", "root", "abcd");
        System.out.print("Connected Successfully");
        String sql="INSERT INTO invoice 
        invoice_details(cust_number,name_customer,invoice_id,total_open_amount,due_in_date,notes) 
        VALUES (?,?,?,?,?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1, nameCustomer);  
        statement.setString(2, custNumber);  
        statement.setString(3, invoiceID);  
        statement.setDouble(4, TotalOpenAmount);  
        statement.setString(5, dueinDATE);
        statement.setString(6, Notes);                 
        statement.executeUpdate();  
        
        
    }
    catch(SQLException e){
        e.printStackTrace();
    }
    finally
    {
        
    }
}
}

I really don't know why is it giving such an error. Please suggest me a way to debug it.

BalusC
  • 992,635
  • 352
  • 3,478
  • 3,452
  • Did you intend to override `doGet` instead of `doPost`? – Jeff Scott Brown Mar 23 '21 at 15:14
  • The error message "Message HTTP method GET is not supported by this URL" indicates that a GET was used but elsewhere in the question is "When I am executing Post request from Postman,I am getting this error." which suggests you are sending a POST request. – Jeff Scott Brown Mar 23 '21 at 15:15

1 Answers1

0

You need to override doGet method if u wanna call by GET method;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
        
        String custNumber=request.getParameter("cust_number");
        String nameCustomer=request.getParameter("name_customer");
        String invoiceID=request.getParameter("invoice_id");
        Double TotalOpenAmount=Double.parseDouble(request.getParameter("total_open_amount"));
        String dueinDATE=request.getParameter("due_in_date");
        String Notes=request.getParameter("notes");
        System.out.print("Acquiring Connection");
        Connection connection = DriverManager.getConnection("com.mysql.jdbc.Driver", "root", "abcd");
        System.out.print("Connected Successfully");
        String sql="INSERT INTO invoice 
        invoice_details(cust_number,name_customer,invoice_id,total_open_amount,due_in_date,notes) 
        VALUES (?,?,?,?,?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1, nameCustomer);  
        statement.setString(2, custNumber);  
        statement.setString(3, invoiceID);  
        statement.setDouble(4, TotalOpenAmount);  
        statement.setString(5, dueinDATE);
        statement.setString(6, Notes);                 
        statement.executeUpdate();  
        
        
    }
    catch(SQLException e){
        e.printStackTrace();
    }
    finally
    {
        
    }

    }

When you need to use GET method: override doGet(HttpServletRequest request, HttpServletResponse response), POST- doPost(HttpServletRequest request, HttpServletResponse response), both - doGet and doPost