Легкий движок сервлетов для обслуживания Java-приложений через IIS - PullRequest
5 голосов
/ 28 августа 2009

У меня есть старое устаревшее Java-приложение, которое я хочу развернуть на том же сервере, что и мои asp.net-приложения (работающие на IIS 7). И мне нужно, чтобы все приложения работали на порту 80, поэтому я не могу просто установить два веб-сервера на разные порты.

Java-приложение действительно простое, всего лишь пара серверных (без JSP) с функциональностью, довольно близкой к «Hello World». Поэтому я хочу, чтобы двигатель сервлета был максимально легким. Я считаю, что Tomcat будет излишним для этого.

Существует ли такой продукт или я застрял с Tomcat?

Ответы [ 5 ]

9 голосов
/ 28 августа 2009

Посмотрите на Причал . Он может быть вызван из стандартного вызова Main и довольно хорошо обрабатывает контейнеры сервлетов (например, отладка GWT размещается в среде Jetty).

Я использовал это для отладки приложений Lift, и был очень впечатлен.

Для пересылки запросов через IIS в Jetty вы можете попробовать mod_jk . Проблема в том, что IIS и Java / JSP не просто работают, потому что IIS нужны надстройки для поддержки загрузки виртуальной машины и отражения содержимого JSP / Java. Здесь есть отличная статья о том, как это можно сделать здесь .

1 голос
/ 28 августа 2009

Если вы используете Java 6, есть встроенный HTTP-сервер,

http://java.sun.com/javase/6/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/package-summary.html

Конечно, это не будет хорошим решением, если вы заботитесь о мобильности.

1 голос
/ 28 августа 2009

Проверьте JK, у него есть модуль Apache, и я думаю, что у него также есть модуль IIS для соединения с Tomcat (возможно, Jetty, я не знаю). Это позволит вам запускать ваше приложение на Tomcat на другом порту (даже на другом хосте) и получать к нему доступ через IIS.

http://tomcat.apache.org/connectors-doc/

1 голос
/ 28 августа 2009

Я уверен, что вы не хотите быть слишком экзотичным, но если вы не найдете что-то по своему вкусу, вы всегда можете запустить Tomcat на другом порту, а затем выполнить обратный прокси-сервер и отправить все данные на определенный адрес. в контексте вашей установки Tomcat, работающей через порт XYZ, хотя, по общему признанию, я знаком с этим только в мире Apache, а не в мире IIS.

0 голосов
/ 14 мая 2019

Используйте HTTP-сервер, который поставляется с Java версии 6 или более. Прямой код. Как предложено выше, REST может быть реализован с использованием технологии Servlet. Мы не можем сравнивать оба.

Servelet - это адаптер (Java), который преобразует http-запрос в объект (ы) Java и запускает метод (doGet / doPost) при каждом поступлении запроса и отправляет http-ответ в соответствии с указаниями в Java программно.

        public class server {
    public static void main(String[] args) throws Exception {
        //Start server
        HttpServer server = HttpServer.create(new InetSocketAddress(8000, 0);
        server.createContext("/monitor", new MyHandler());
        server.createContext("/usage", new MyHandler());
        server.setExecutor(java.util.concurrent.Executors.newCachedThreadPool()); //Uses New Thread every time
        server.start();
        System.out.println("Server Started at 8000...");
    }

    static class MyHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange t) throws IOException {
            URI uri = t.getRequestURI();
            String path = uri.getPath();
            InputStreamReader isr = new InputStreamReader(t.getRequestBody(), StandardCharsets.UTF_8);
            BufferedReader br = new BufferedReader(isr);
            int b;
            StringBuilder buf = new StringBuilder(512);
            while ((b = br.read()) != -1) {
                buf.append((char) b);
            }
            br.close();
            isr.close();
            JSONObject body = null;
            try {
                body = new JSONObject(buf.toString());
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }           
            if (path.equals("/monitor")) {
                //your Logic
                //Use any other Library - I use GSON
                Gson gson = new Gson();
                String json = gson.toJson(POJO_OBJECT);
                t.getResponseHeaders().set("Content-Type", "application/json");
                t.getResponseHeaders().set("Access-Control-Allow-Origin", "*");
                t.getResponseHeaders().set("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
                t.sendResponseHeaders(200, json.length());
                OutputStream os = t.getResponseBody();
                os.write(json.getBytes());
                os.close();
            }
            if (path.equals("/monitor")) {
                //Your Logic
                //Use any other Library - I use GSON
                Gson gson = new Gson();
                String json = gson.toJson(POJO_OBJECT);
                //System.out.println(json);
                t.getResponseHeaders().set("Content-Type", "application/json");
                t.getResponseHeaders().set("Access-Control-Allow-Origin", "*");
                t.getResponseHeaders().set("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
                t.sendResponseHeaders(200, json.length());
                OutputStream os = t.getResponseBody();
                os.write(json.getBytes());
                os.close();
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...