servletにおけるservice doGet doPostの関係
servletのデフォルトでは、getでもpostでもサービス()メソッドで処理され、doGetに移行します.
あるいはdoPostメソッド、HttpServeretクラスのサービスメソッドを見ることができます:
ここのサービスは転向に使用されていることがわかりますが、自分のservletクラスでサービスメソッドをカバーしている場合は、例えばサービスは次のようになります.
では、サービスは転向するためではなく、ビジネスを処理するために使用されます.今、クライアントがposでもgetでもこのservletを要求しても構いません.
いずれもサービスメソッドを実行し、servletメソッドのみを実行し、doPostメソッドやdoGetメソッドは実行しません.
たとえば、クライアントコードは次のようになります.
あるいはdoPostメソッド、HttpServeretクラスのサービスメソッドを見ることができます:
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);
}
}
ここのサービスは転向に使用されていることがわかりますが、自分のservletクラスでサービスメソッドをカバーしている場合は、例えばサービスは次のようになります.
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
res.getOutputStream().print(
"image is <img src='images/downcoin.gif'></img><br>");
}
では、サービスは転向するためではなく、ビジネスを処理するために使用されます.今、クライアントがposでもgetでもこのservletを要求しても構いません.
いずれもサービスメソッドを実行し、servletメソッドのみを実行し、doPostメソッドやdoGetメソッドは実行しません.
たとえば、クライアントコードは次のようになります.
<%@page contentType="text/html; charset=utf-8"%>
<html>
<head><title> </title></head>
<body>
:<br>
<form action = "Test" method = "post">
<input type="checkbox" name="fruit" value ="apple" > <br>
<input type="checkbox" name="fruit" value ="orange"> <br>
<input type="checkbox" name="fruit" value ="mango"> <br>
<input type="submit" value=" ">
</form>
</body>
</html>
servlet :Test
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* service
*/
public class Test extends HttpServlet {
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
res.getOutputStream().print("This is the service");
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
ServletOutputStream out=response.getOutputStream();
String[] args=(String[])request.getParameterValues("fruit");
for(int i=0;i<args.length;i++){
out.print(args[i]+"<br>");
}
}
}