为什么不使用service()而不是dopost()和doget()

  • 本文关键字:doget dopost service java jsp
  • 更新时间 :
  • 英文 :


我对Java非常新。我有一个脚本可以正常工作,但我想了解其背后的逻辑。

如果用户在他的用户名中键入键入,我想输出相同的内容。

我正在使用

protected void service(HttpServletRequest req, HttpServletResponse resp)

,但是从许多教程中,我看到

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

我认为我了解doGet()doPost()之间的差异。它们两个将通过方法service()调用。那么,如果我可以简单地使用service()

,为什么我要使用doGet()doPost()

我的整个代码看起来像这样:

package ch.yourclick.zt;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/login")
public class Login extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = resp.getWriter();
        out.print(req.getParameter("username"));
    }
}

如果覆盖service,您的servlet将处理所有请求方法(GETPOST,...(。这些请求方法具有不同的含义,并有望以不同的方式行事,请参阅HTTP请求方法。

因此,您的servlet将无法为其中一些返回正确的响应,而您的servlet的用户可能会感到困惑,例如为什么DELETE的行为与GET相同而实际上没有修改源。

此外,根据您的servlet的作用,它可能会引入安全漏洞,例如,当您的servlet(也处理GET(修改数据库时。

最新更新