2015-04-06 7 views
1

Это основной вопрос интерфейса Java, но в контексте сервлетов.Как можно использовать методы интерфейса без необходимости их реализации?

Я понимаю, что интерфейсы полностью абстрактны тем, что ни один из их методов не может иметь реализаций, в отличие от абстрактных классов. HttpServletRequest - это интерфейс. При создании сервлеты, doPost() и doGet() методы делают использование этого интерфейса с кодом:

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

Мои вопросы:

  • Что запрос и ответ? Являются ли они объектами?
  • Учитывая, что методы интерфейса не реализованы и что мы обычно не требуем реализации методов интерфейса при создании сервлета, как методы «запроса» реализуются, как показано в коде.

    request.getParameter() 
    
+0

Это объекты, реализующие интерфейс. Объекты создаются сервером (например, Tomcat). – RealSkeptic

ответ

2

Что запрос и ответ? Являются ли они объектами?

Это просто ссылки, указывающие на некоторые объекты, как и на любую другую ссылку. Здесь ничего особенного.

как методы «запроса» реализуются, как показано в коде.

HttpServletRequest - это просто API, реализация которого обеспечивается контейнером сервлетов, который вы используете (возможно, tomcat). Внутренне для каждого запроса контейнер создавал бы объект HttpServletRequest и HttpServletResponse и передавал его в ваш метод doPost или doGet.

+0

Итак, вы хотите сказать, что ответ является ссылкой на объект, созданный Tomcat, который реализует методы, указанные в интерфейсе HttpServletResponse, и что всякий раз, когда вы вызываете response.getParameter(), вы фактически используете метод getParameter() объекта на которые ссылается ответ? –

+0

Также, если контейнер сервлетов создает объект для вас, разве мы не зависим от этого контейнера? Я имею в виду в более общем случае, мы бы просто не могли использовать интерфейс, объявив ссылку аналогичным образом, если мы сами не реализуем ее правильно? –

+0

@ user3111418 'HttpServletRequest' является частью спецификации сервлета. Контейнер Tomcat и другие контейнеры в этом отношении являются реализацией для этих спецификаций. Реализация, которую они обеспечивают, должна соответствовать спецификациям. И да, вы зависите от этих контейнеров. Можно построить собственный контейнер, который соответствует спецификациям сервлета, и вы можете развернуть приложение там. Ничего страшного. Но дело в том, что кто-то должен обеспечить реализацию. –

1

Вы получаете ссылку на объект класса, который фактически реализует HttpServletRequest.

Теперь, как вы получите этот объект, ну, веб-сервер инициализирует этот объект и вызовет ваш метод doGet или doPost, передав их в качестве параметра.