我对doGet doPost优先级(如果有)有疑问。这是我的HelloServlet类:
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().println("Hello, World Post!");
}
@Override
public void init() throws ServletException {
System.out.println("Servlet " + this.getServletName() + " has started.");
}
@Override
public void destroy() {
System.out.println("Servlet " + this.getServletName() + " has stopped.");
}
此类已映射到/ greeting URL。当我现在尝试访问此页面时,一切都很好。但是,当我更改doPost和doGet方法时,出现一个错误:HTTP状态405-此URL不支持HTTP方法GET。每次阅读doGet和doPost时,我都假定这些方法是可以互换的。那么这些方法的这个版本有什么问题?
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("Hello, World Post!");
}
这当然不会引起异常,因为存在doGet,但是它不会做任何工作。当我删除doGet方法时,它将引发异常。
您能告诉我在我使用代码URL的那一刻到底发生了什么吗? http://localhost:8080/greeting
当doGet完全丢失时,为什么客户端只是不能使用doPost方法从服务器获取数据?
谢谢!
更新WEB.xml文件
<display-name>Hello World Application</display-name>
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.wrox.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/greeting</url-pattern>
</servlet-mapping>
答案 0 :(得分:1)
如果默认情况下未指定请求方法,则它将为GET,这意味着将调用doGet()。 例如:http://www.anywebsite.com是默认的GET请求。
但是您必须指定您的请求是执行doPost()的POST请求 例如:
<form action="/servlet" method="POST">
<input type="text" name="something"
</form>
答案 1 :(得分:1)
如果你没有提到那么默认它调用 doGet 方法 但是如果你必须在下面的代码中指定你的请求是一个 POST 就像然后 tomcat 调用服务方法,其中服务方法决定请求的位置应该去
<form action="/servlet" method="POST">
<input type="text" name="something"
</form>
受保护的服务方法检查请求的类型,如果请求类型为get,则调用doGet方法,如果请求类型为post,则调用doPost方法,以此类推。让我们看看内部代码:
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String method = req.getMethod();
if(method.equals("GET"))
{
long lastModified = getLastModified(req);
if(lastModified == -1L)
{
doGet(req, resp);
}
//rest of the code
}
}