Класс Java для встроенного сервера HTTP в приложении Swing

Я достиг этого путем выполнения следующего...

  1. Настроенный таймер, который стреляет каждые 20 минут (хотя фактическая синхронизация ваше дело - я должен был работать несколько раз в течение дня).
  2. на каждом событии Tick, проверьте системное время. Сравните время с запланированным временем выполнения для Вашего метода.
  3. , Если текущее время является меньше, чем запланированное время, проверьте в некоторое персистентное устройство хранения данных для получения значения даты и времени прошлого раза, когда метод работал.
  4. , Если метод в последний раз работал больше чем 24 часа назад, выполнял метод и прячут дату и время этого, отбегают к Вашему хранилищу данных
  5. , Если метод в последний раз работал в течение прошлых 24 часов, проигнорируйте его.

HTH

*edit - пример кода в C#:: Отметьте: непротестированный...

using System;
using System.Collections.Generic;
using System.Text;
using System.Timers;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Timer t1 = new Timer();
            t1.Interval = (1000 * 60 * 20); // 20 minutes...
            t1.Elapsed += new ElapsedEventHandler(t1_Elapsed);
            t1.AutoReset = true;
            t1.Start();

            Console.ReadLine();
        }

        static void t1_Elapsed(object sender, ElapsedEventArgs e)
        {
            DateTime scheduledRun = DateTime.Today.AddHours(3);  // runs today at 3am.
            System.IO.FileInfo lastTime = new System.IO.FileInfo(@"C:\lastRunTime.txt");
            DateTime lastRan = lastTime.LastWriteTime;
            if (DateTime.Now > scheduledRun)
            {
                TimeSpan sinceLastRun = DateTime.Now - lastRan;
                if (sinceLastRun.Hours > 23)
                {
                    doStuff();
                    // Don't forget to update the file modification date here!!!
                }
            }
        }

        static void doStuff()
        {
            Console.WriteLine("Running the method!");
        }
    }
}
32
задан Matthias Braun 2 May 2019 в 12:08
поделиться

3 ответа

Начиная с Java 6, JDK содержит простую реализацию HTTP-сервера .

Пример использования:

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executors;

import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class HttpServerDemo {
  public static void main(String[] args) throws IOException {
    InetSocketAddress addr = new InetSocketAddress(8080);
    HttpServer server = HttpServer.create(addr, 0);

    server.createContext("/", new MyHandler());
    server.setExecutor(Executors.newCachedThreadPool());
    server.start();
    System.out.println("Server is listening on port 8080" );
  }
}

class MyHandler implements HttpHandler {
  public void handle(HttpExchange exchange) throws IOException {
    String requestMethod = exchange.getRequestMethod();
    if (requestMethod.equalsIgnoreCase("GET")) {
      Headers responseHeaders = exchange.getResponseHeaders();
      responseHeaders.set("Content-Type", "text/plain");
      exchange.sendResponseHeaders(200, 0);

      OutputStream responseBody = exchange.getResponseBody();
      Headers requestHeaders = exchange.getRequestHeaders();
      Set<String> keySet = requestHeaders.keySet();
      Iterator<String> iter = keySet.iterator();
      while (iter.hasNext()) {
        String key = iter.next();
        List values = requestHeaders.get(key);
        String s = key + " = " + values.toString() + "\n";
        responseBody.write(s.getBytes());
      }
      responseBody.close();
    }
  }
}

Или вы можете использовать Jetty для эта цель. Он довольно легкий и идеально подходит для этой цели.

69
ответ дан 27 November 2019 в 20:09
поделиться

Вы можете использовать причал в качестве встроенного сервера, он довольно легкий. Другой вариант - проверить этот простой Java-класс для обработки HTTP-запросов http://java.sun.com/developer/technicalArticles/Networking/Webserver/ .

Другой способ - в Java 6, вы можете использовать com.sun.net.httpserver.HttpServer

8
ответ дан 27 November 2019 в 20:09
поделиться

Если вы не используете Java 6, я бы определенно порекомендовал Jetty . Это работает очень хорошо и имеет приличный программный интерфейс.

1
ответ дан 27 November 2019 в 20:09
поделиться
Другие вопросы по тегам:

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