#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, пока вы не вызовете конструктор.