【问题标题】:How are interface methods able to be utilised without having to implement them?接口方法如何在不必实现的情况下使用?
【发布时间】:2015-04-06 10:49:38
【问题描述】:

这是一个基本的 Java 接口问题,但在 servlet 的上下文中。

我知道接口是完全抽象的,因为它们的方法都不能有与抽象类不同的实现。 HttpServletRequest 是一个接口。在创建 servlet 时,doPost() 和 doGet() 方法通过代码使用此接口:

doPost(HttpServletRequest request, HttpServletResponse response){ // implementation }

我的问题是:

  • 什么是请求和响应?它们是对象吗?
  • 鉴于没有实现接口方法,并且我们在创建 servlet 时通常不需要实现接口的方法,那么代码中的“请求”方法是如何实现的。

    request.getParameter()
    

【问题讨论】:

  • 这些是实现接口的对象。对象由服务器(例如 Tomcat)创建。

标签: java http servlets interface


【解决方案1】:

什么是请求和响应?它们是对象吗?

它们只是引用,指向一些对象,就像任何其他引用一样。这里没什么特别的。

如代码所示,“请求”的方法是如何实现的。

HttpServletRequest 只是一个 API,其实现由您使用的 servlet 容器(可能是 tomcat)提供。在内部,对于每个请求,容器都会创建 HttpServletRequestHttpServletResponse 实现的对象,并将其传递给您的 doPostdoGet 方法。

【讨论】:

  • 那么你的意思是说响应是对Tomcat创建的对象的引用,它实现了HttpServletResponse接口中所述的方法,并且每当你调用response.getParameter()时,你实际上是在使用响应引用的对象的getParameter()方法?
  • 另外,如果 servlet 容器为您创建对象,我们不是依赖于那个容器吗?我的意思是在更一般的情况下,我们不能简单地通过以类似方式声明引用来使用接口,除非我们自己实现它对吗?
  • @user3111418 HttpServletRequest 是 Servlet 规范的一部分。 Tomcat 容器以及与此相关的其他容器是这些规范的实现。他们提供的实现应该符合规范。是的,您依赖于这些容器。一个人也可以构建他/她自己的容器,它也符合 servlet 规范,并且您可以在那里部署应用程序。没什么大不了的。但事实是,必须有人提供实现。
  • 因此,即使您依赖于 tomcat 容器,您也不会与它紧密耦合。您可以使用任何其他容器。
【解决方案2】:

你得到一个实际实现HttpServletRequest 的类的对象的引用。

现在您如何获取该对象,网络服务器初始化这些对象并通过将这些引用作为参数传递来调用您的 doGetdoPost 方法。

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多