gpt4 book ai didi

java - 为什么 doGet(), doPost() 方法是 "protected"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:07 25 4
gpt4 key购买 nike

我对 doGet()doPost()HttpServlet 类的其他方法的访问修饰符感到困惑。

为什么它们受到保护

根据我的理解,doGet()protected 修饰符意味着客户端必须在同一个包中(或子包 - 通过继承)才能访问doGet()。那么调用 JSP 或容器将如何访问它呢?

最佳答案

它们受到保护主要有两个原因。

  1. 这样外部类就不能像您推理的那样只调用它们。从技术上讲,有一些方法可以使用 Java 反射来绕过方法可见性修饰符(如果安全管理器允许或没有),但通常情况下, protected 方法只能由同一包中的类或子类访问,这让我点 #2。
  2. 以便 HttpServlet 的子类或具体实现可以覆盖它们。好吧,如果它们是公开的,它们也可以被覆盖,但请参见第 1 点。

现在你的另一个问题,“那么调用 JSP 或容器将如何访问它?”

HttpServlet 实现了 Servlet接口(interface),它声明了一个 service(ServletRequest, ServletResponse)方法。当然,这在 HttpServlet 中默认成为 public。这是调用 HttpServlet 实现的主要入口点(对于容器)。

我的猜测(我没有深入研究源代码)是 HttpServlet 的默认实现检查传入的 ServletRequest 对象,它实际上是一个 HttpServletRequest并且它定义了一个 getMethod()返回使用的 HTTP 方法的方法。然后根据 HTTP 请求方法分派(dispatch)到 doGet()doPost()

关于java - 为什么 doGet(), doPost() 方法是 "protected"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14556304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com