eclipse ee сервлет tomcat doPost http405

Я пытаюсь перейти от HTML к сервлету Java, используя eclipse ee и tomcat, запуская сервер через eclipse. Но я получаю: Статус HTTP 405 - HTTP-метод POST не поддерживается этим URL-адресом

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">

</script>
</head>
<body>
<form method="POST" action="AddHost">
Host name : <input name="hostname" type="text"><br>
Genre : <input name="genre" type="text" ><br>
<input type="submit" value="add host">
</form>
</body>

</html>

Это сервлет:

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
@WebServlet("/AddHost")
public class Addhost extends HttpServlet {

    public void doPost(HttpServletResponse res,HttpServletRequest req) throws IOException{
        String hostname = req.getParameter("hostname");
        String genre = req.getParameter("genre");


    }
    public void doGet(HttpServletResponse res,HttpServletRequest req) throws IOException{
        doPost(res,req);
    }

person Paul    schedule 30.09.2011    source источник


Ответы (1)


Вы использовали неверную подпись метода doPost и вместо переопределения вы перегрузка

Из javadoc HttpServlet содержит:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

Итак, вы должны изменить это:

public void doPost(HttpServletResponse res,HttpServletRequest req)

к этому:

@Override
public void doPost(HttpServletRequest req, HttpServletResponse res)

Аннотация @Override необязательна, но настоятельно рекомендуется, чтобы избежать таких ошибок.

отредактировано: я добавил аннотацию переопределения, как предложил mth

person lukastymo    schedule 30.09.2011
comment
Спасибо, не знал, что параметры должны быть в таком порядке. Есть причина для этого? Я соглашусь, когда это позволит мне. - person Paul; 30.09.2011
comment
Да, порядок имеет значение. В Java у нас может быть несколько методов с одинаковыми именами, но с разным порядком, количеством, типом параметров. Проверьте мое обновление и ссылку на перегрузку - person lukastymo; 30.09.2011
comment
Вот почему добавление @Override полезно — компилятор поймает его, когда вы на самом деле не переопределяете, а перегружаете по ошибке. И, конечно же, использование функции переопределения метода выбранной вами IDE также очень помогает (поскольку IDE создаст для вас правильный метод скелета). - person mth; 30.09.2011