вопросы по сегменту серверной программы Java

#java

#java

Вопрос:

Я пытаюсь понять следующий сегмент кода Java, который был реализован как простой сервер

 public class testserver extends AbstractHandler
{
   public void handle(String target,
                   Request baseRequest,
                   HttpServletRequest request,
                   HttpServletResponse response) 
    throws IOException, ServletException
 {
    response.setContentType("movie/html");
    response.setStatus(HttpServletResponse.SC_OK);
    baseRequest.setHandled(true);
    response.getWriter().println("<h1>this is a test</h1>");
 }

public static void main(String[] args) throws Exception
{
    Server server = new Server(1234);
    server.setHandler(new testserver());

    server.start();
    server.join();
}
  

}

Я немного запутался в логике этого кода. В частности, в функции «main» он имеет

 server.setHandler(new testserver());
  

Я знаю, что это для создания нового сервера. Но эта основная функция включена в сам класс testserver. Таким образом, он функционирует как рекурсивный вызов самого себя, и это создаст много тестовых серверов. Правильно ли я понимаю?

Ответ №1:

main Метод не вызывается при создании нового экземпляра класса. Она вызывается системой для запуска всего процесса.

Ответ №2:

Нет. main Метод служит точкой входа для Java-программы. Он вызывается один раз, и в этом случае создается экземпляр testserver. На самом деле создание экземпляра не вызывает метод main повторно.

Ответ №3:

Вам нужно включить import инструкции, чтобы правильно определить начало или конец этого, чтобы мы точно знали, к какому классу Server относится. Я ожидаю, что это тестовый жгут для какой-либо платформы веб-сервера (возможно, Jetty embedded).

РЕДАКТИРОВАТЬ: да, это причал. main запускается только один раз, когда JVM запускается с этим классом в качестве целевого. Он создаст один Server экземпляр, а затем создаст один testserver экземпляр (не несколько экземпляров). После этого testserver экземпляр обработает запросы.

Ответ №4:

main Метод является точкой входа в ваш класс, вызываемый JVM. Вызов к

 new testserver()
  

создает новый экземпляр класса с помощью конструктора без аргументов по умолчанию. Основной метод является статическим (или на уровне класса), поэтому у вас фактически нет экземпляра testserver, пока вы не вызовете конструктор.