http方法如何在servlet中工作?
how http method works in servlet?
我的 servlet
有问题。我有一个 HTML 页面,当我提交表单时调用 get 方法获取两个数字的总和,它给了我一个错误。但是我已经在 servlet
class.
中声明了 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>
您没有有效的 doGet() 方法,当您直接在地址栏中键入 servlet 的路径时,Tomcat 等 Web 容器将尝试调用 doGet() 方法。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException{
....
}
或者像这样覆盖服务方法:
受保护的无效服务(HttpServletRequest 请求,HttpServletResponse 响应)抛出 ServletException,IOException {
doPost(请求,响应);
}
Servlets 是一种允许在服务器上调用代码的技术。
HttpServlet 是一种抽象,如果您决定使用 HTTP 作为所有浏览器都使用的通信协议,它允许在服务器上调用代码。
因此,为了了解发生了什么,您应该记住所有通信都是通过 HTTP 完成的(我知道这个问题是出于教育目的而提出的,因此答案是教育性的)
现在,HTTP 引入了不同类型的请求,即 GET、PUT、POST 等。
HttpServlets 通过引入不同的覆盖方法(doGet
、doPost
等)来解决这个问题。
很简单,如果客户端(在这种情况下呈现表单的浏览器)想要使用 POST 方法(并且表单提交在内部执行),则在 servlet 中调用 doPost
。
你怎么知道用的是哪种方法?好吧,最简单的方法是在浏览器中按 F12,转到网络选项卡并检查请求,它会告诉您请求的类型。当您了解 为什么 实际上存在不同类型的请求时,您就会更加了解。在这种情况下,由于您想向服务器“提交”可能会导致服务器发生变化的信息,因此使用了 POST 方法。
现在很明显你覆盖了错误的方法,现在你的 servlet 可以响应 get 请求,但与 post 请求无关,因此出现错误。覆盖 doPost
就可以了
我的 servlet
有问题。我有一个 HTML 页面,当我提交表单时调用 get 方法获取两个数字的总和,它给了我一个错误。但是我已经在 servlet
class.
类型: 状态报告
消息: 此 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>
您没有有效的 doGet() 方法,当您直接在地址栏中键入 servlet 的路径时,Tomcat 等 Web 容器将尝试调用 doGet() 方法。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException{
....
}
或者像这样覆盖服务方法:
受保护的无效服务(HttpServletRequest 请求,HttpServletResponse 响应)抛出 ServletException,IOException { doPost(请求,响应); }
Servlets 是一种允许在服务器上调用代码的技术。 HttpServlet 是一种抽象,如果您决定使用 HTTP 作为所有浏览器都使用的通信协议,它允许在服务器上调用代码。
因此,为了了解发生了什么,您应该记住所有通信都是通过 HTTP 完成的(我知道这个问题是出于教育目的而提出的,因此答案是教育性的)
现在,HTTP 引入了不同类型的请求,即 GET、PUT、POST 等。
HttpServlets 通过引入不同的覆盖方法(doGet
、doPost
等)来解决这个问题。
很简单,如果客户端(在这种情况下呈现表单的浏览器)想要使用 POST 方法(并且表单提交在内部执行),则在 servlet 中调用 doPost
。
你怎么知道用的是哪种方法?好吧,最简单的方法是在浏览器中按 F12,转到网络选项卡并检查请求,它会告诉您请求的类型。当您了解 为什么 实际上存在不同类型的请求时,您就会更加了解。在这种情况下,由于您想向服务器“提交”可能会导致服务器发生变化的信息,因此使用了 POST 方法。
现在很明显你覆盖了错误的方法,现在你的 servlet 可以响应 get 请求,但与 post 请求无关,因此出现错误。覆盖 doPost
就可以了