Как завершить работу com.sun.net.httpserver. HttpServer?

Существует решение, аналогичное @Lucas Niewohner's, взятое из Скотта по написанию .NET .

Создайте шаблон DisplayTemplate с именем YesNo.cshtml:

@model bool
@if (Model)
{
    @Html.Raw("Yes")
}
else
{
    @Html.Raw("No")
}

Затем украсьте ViewModel с помощью UIHint, чтобы подключить его:

public class foo
{
...
[UIHint="YesNo"]
public bool SomeBooleanValue { get; set; }
...
}

Теперь вы можете использовать своих помощников MVC как обычно:

...
@Html.DisplayFor (x=> x.SomeBooleanValue)
...

Вы можете сделать еще один шаг, чтобы создать EditorTemplate YesNo.cshtml:

@model bool
@Html.DropDownList("", new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "true", Selected = Model }, new SelectListItem() { Text = "No", Value = "false", Selected = !Model }})

Этот подход особенно полезен, если вы хотите использовать ViewModel в несколько мест с последовательной реализацией, так как вам нужно только связать шаблон в одном месте.

5
задан skaffman 15 May 2012 в 11:43
поделиться

4 ответа

Я никогда раньше не использовал этот сервер и не могу найти никакой хорошей документации. Возможно, эти менее элегантные решения уже приходили вам в голову, но я подумал, что упомяну их.

Похоже, com.sun.net.httpserver.HttpServer имеет класс реализации под названием HttpServerImpl. У него есть метод под названием stop ().

Или, возможно, вы можете найти поток, который прослушивает серверный сокет и вызвать прерывание ().

Шон

0
ответ дан 14 December 2019 в 04:46
поделиться
netstat -a

, чтобы найти pid процесса, у которого открыт порт (при условии, что вы знаете порт), и

kill -9 $pid

, чтобы убить процесс.

-1
ответ дан 14 December 2019 в 04:46
поделиться

Как насчет того, чтобы не потерять ссылку? Когда вы говорите, что ваш код дает сбой, я предполагаю, что вы где-то получили исключение. Где именно? Таким образом, кто-то, способный перехватить это исключение, очевидно, должен также иметь ссылку на HttpServer, которую вам, возможно, придется передать самостоятельно.

Изменить : Ох. В этом случае, если вы не хотите уничтожать всю JVM с помощью HttpServer в нем, вам нужно будет предложить некоторую форму IPC для среды, например, канал команд через RMI, который может быть вызван из программы Java (и следовательно, Ant).

Другим решением было бы заставить сервер прослушивать некоторый "секретный" запрос cookie, когда вы, например, распечатываете / сохраняете cookie при запуске, чтобы сценарий Ant мог получить cookie,

0
ответ дан 14 December 2019 в 04:46
поделиться

Я использую приведенный ниже код для его запуска

    this.httpServer = HttpServer.create(addr, 0);
    HttpContext context = this.httpServer.createContext("/", new DocumentProcessHandler());
    this.httpThreadPool = Executors.newFixedThreadPool(this.noOfThreads);
    this.httpServer.setExecutor(this.httpThreadPool);
    this.httpServer.start();

и код ниже, чтобы остановить его

        this.httpServer.stop(1);
        this.httpThreadPool.shutdownNow();
9
ответ дан 14 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: