获取错误HTTP状态405-此URL不支持HTTP方法POST,但是我使用了get方法?

问题描述 投票:0回答:2

我的servlet有问题。我有一个HTML页面,在我提交表单时,我调用get方法获得两个数字的和,这使我出错。但是我已经在servlet类中声明了get方法。

类型:状态报告

消息:此URL不支持HTTP方法POST

描述请求行中接收的方法对于原始服务器是已知的,但目标资源不支持。

Servlet代码:

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>
java servlets get deployment-descriptor
2个回答
1
投票

您没有有效的doGet()方法,当您直接在地址栏中键入servlet的路径时,像Tomcat这样的Web容器将尝试调用doGet()方法。

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

或其他类似的替代服务方法:

受保护的无效服务(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException {doPost(request,response);}


1
投票

Servlets是一项允许在服务器上调用代码的技术。HttpServlet是一种抽象,如果您决定将HTTP作为所有浏览器都可以使用的通信协议,则它允许在服务器上调用代码。

因此,为了了解发生了什么,您应该记住所有通信都是通过HTTP完成的(我知道此问题是出于教育目的而提出的,因此答案是具有教育意义的。]

现在,HTTP引入了不同类型的请求,即GET,PUT,POST等。

HttpServlets通过引入不同的重写方法(doGetdoPost等)解决了这个问题。很简单,如果客户端(在这种情况下,呈现表单的浏览器)想要使用POST方法(表单在内部进行提交),则在Servlet中调用doPost

您怎么知道使用哪种方法?好吧,最简单的方法是在浏览器中点击F12,转到“网络”标签并检查请求,它会告诉您这是哪种请求。当您了解why实际上存在着不同类型的请求时,您会更加了解。在这种情况下,由于您要向服务器“提交”信息,这可能会导致服务器上的更改,因此使用POST方法。

现在很明显,您已经重写了错误的方法,现在您的Servlet可以响应获取请求,但是与发布请求无关,因此会出现错误。覆盖doPost,就可以了

© www.soinside.com 2019 - 2024. All rights reserved.