Получение ошибки HTTP Status 405 - HTTP метод POST не поддерживается этим URL, но я использовал метод get? - PullRequest
0 голосов
/ 19 октября 2019

У меня проблема с моим servlet. У меня есть HTML-страница, где я вызываю метод get для суммы двух чисел, когда я отправляю свою форму, она выдает мне ошибку. Но я уже объявляю метод get в моем servlet классе.

Тип: Отчет о состоянии

Сообщение: Метод HTTP POST не поддерживаетсяэтот URL

Описание Метод, полученный в строке запроса, известен серверу происхождения, но не поддерживается целевым ресурсом.

Код сервлета:

public class AddServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        int a=Integer.parseInt(req.getParameter("num1"));
        int b=Integer.parseInt(req.getParameter("num2"));
        int sum=a+b;
        resp.getWriter().println(sum+ " doGet method");
    }
}

html-код:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Servlet</title>
  </head>
  <body>
    <form action="add" method="get" >
      Enter 1st number<input type="text" name="num1">
      Enter 2st number<input type="text" name="num2">
      <input type="submit">
    </form>
  </body>
</html>

код дескриптора развертывания: web.xml

<?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_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>ServletPractice1</display-name>
  <servlet>
    <servlet-name>AddServlet</servlet-name>
    <servlet-class>com.meet.servlet.AddServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AddServlet</servlet-name>
    <url-pattern>/add</url-pattern>
  </servlet-mapping>
</web-app>

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Сервлеты - это технология, которая позволяет вызывать код на сервере. HttpServlet - это абстракция, которая позволяет вызывать код на сервере, если вы решите использовать HTTP в качестве протокола связи, который все равно делают все браузеры.

Поэтому, чтобы понять, что происходит, вы должны помнить, что все общение выполненос HTTP (я понимаю, что этот вопрос был задан в образовательных целях, поэтому ответ является образовательным)

Теперь HTTP вводит различные типы запросов, а именно GET, PUT, POST и другие.

HttpServlets решают эту проблему путем введения различных методов переопределения (doGet, doPost и т. Д.). Это просто, если клиент, браузер, который отображает форму в этом случае, хочет использовать метод POST (и внутренняя отправка формы), doPost вызывается в сервлете.

Откуда вы знаете, какойметод используется? Что ж, проще всего нажать F12 в браузере, перейти на вкладку «Сеть» и проверить запросы, и вам сообщат, что это за запрос. Когда вы узнаете , почему на самом деле существуют различные типы запросов, вы узнаете лучше. В этом случае, поскольку вы хотите «отправить» информацию на сервер, которая потенциально может привести к изменениям на сервере, используется метод POST.

Теперь ясно, что вы переопределили неправильный метод, теперь ваш сервлетможет отвечать на запросы, но не имеет ничего общего с почтовыми запросами, следовательно, ошибка. Переопределите doPost и вы готовы идти

1 голос
/ 19 октября 2019

У вас нет действительного метода doGet (), когда вы вводите путь сервлета непосредственно в адресную строку, веб-контейнер, такой как Tomcat, попытается вызвать метод doGet ().

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException{
    ....        
}

Илиelse Переопределите метод службы следующим образом:

защищенный сервис void (запрос HttpServletRequest, ответ HttpServletResponse) выдает ServletException, IOException {doPost (request, response);}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...