问题是这样的:
我用myEclipse自动生成一个servlet,什么代码也没有写!我只是想测试一下tomcat是怎么调用doGet和doPost的,前提,我没有生成任何表单!!
情况一:代码没做任何修改,运行tomcat,浏览器显示正常!
情况二:注释整个doPost方法,浏览器显示正常!
情况三:注释整个doGet方法,浏览器显示错误!!!!!(为什么tomcat不能单独调用doPost方法)
情况四:doGet和doPost互相调用,浏览器显示正常!
哪位大侠能解释以上述出现的情况,主要是第三个!!!(没有表单提交)
求详解,不能复制网上的答案!!!
积分全给!!!
[quote]fmjsjx 写道
从浏览器键入URL时,浏览器会通过HTTP的GET请求连接服务器,到servlet时就会调用doGet方法,这个不是说默认调用doGet方法,而是浏览器的连接请求是GET请求。当通过某个页面的表单请求时,就要看表单的请求类型是POST还是GET了(其实还有其他的HTTP请求类型,不过现在基本都弃之不用了)。
高人,能否用源代码说明你的答案!! [/quote]
……
我无语了,看仔细了:
Servlet的实现没有默认方法这一说,HTTP请求是GET请求就调用doGet(),是POST就调用doPost()。
从浏览器键入URL来访问网站的请求都是GET请求,只有HTML一面的表单提交是POST时才会是POST请求,这和源码没有任何关系,而是HTTP协议以及HTML规范的要求!
你键入URL来访问网站当然是GET请求,自然要调用doGet()。
……
能把你那个自动生成的servlet贴上来么
没有表单,默认就是doGet吧
你写一个空的表单强制以post来发送请求呢
默认就是doGet()方法吧
[quote]我是这么想的,但是我看了一下午的tomcat的源代码,没看出这个根据(默认的调用是doGet方法)![/quote]
这个默认是指页面请求,页面请求不明确指明是post的话,默认就是发送get请求。
从浏览器键入URL时,浏览器会通过HTTP的GET请求连接服务器,到servlet时就会调用doGet方法,这个不是说默认调用doGet方法,而是浏览器的连接请求是GET请求。当通过某个页面的表单请求时,就要看表单的请求类型是POST还是GET了(其实还有其他的HTTP请求类型,不过现在基本都弃之不用了)。
[code="java"]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);
} else {
long ifModifiedSince = req.getDateHeader("If-Modified-Since");
if (ifModifiedSince < lastModified / 1000L * 1000L)
{
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
} else {
resp.setStatus(304);
}
}
}
else if (method.equals("HEAD")) {
long lastModified = getLastModified(req);
maybeSetLastModified(resp, lastModified);
doHead(req, resp);
}
else if (method.equals("POST")) {
doPost(req, resp);
}
else if (method.equals("PUT")) {
doPut(req, resp);
}
else if (method.equals("DELETE")) {
doDelete(req, resp);
}
else if (method.equals("OPTIONS")) {
doOptions(req, resp);
}
else if (method.equals("TRACE")) {
doTrace(req, resp);
}
else
{
String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[1];
errArgs[0] = method;
errMsg = MessageFormat.format(errMsg, errArgs);
resp.sendError(501, errMsg);
}
}[/code]
看这句
[code="java"]
String method = req.getMethod();
[/code]
这里的Method就是页面表单里的
[code="html"]
[quote]呵呵,这段代码我看过了!!!! [/quote]
我怕太长发不了啊,解释在下面呢