轻量级servlet引擎,用于通过IIS提供java应用程序

时间:2009-08-27 23:34:17

标签: java iis iis-7 servlets

我有一个旧的遗留Java Web应用程序,我想在与我的asp.net-applications(在IIS 7上运行)相同的服务器上部署。我需要在端口80上运行所有应用程序,因此我不能在不同的端口上安装两个Web服务器。

java-application非常简单,只有几个服务器小程序(没有JSP),其功能非常接近“Hello World”。所以我希望servlet引擎尽可能轻量级。我认为Tomcat对此有点矫枉过正。

这样的产品是否存在或我是否遇到Tomcat?

5 个答案:

答案 0 :(得分:9)

看看Jetty。它可以从标准的Main调用中调用,并且可以很好地处理servlet容器(例如,GWT调试托管在Jetty环境中)。

我已将它用于调试Lift应用程序,并给人留下了深刻的印象。

要通过IIS将请求转发到Jetty,您可以尝试mod_jk。问题是IIS和Java / JSP不能正常工作,因为IIS需要附加组件来支持VM的加载和JSP / Java内容的反映。有一篇关于如何做到这一点的优秀文章here

答案 1 :(得分:1)

我确定你不想过于异国情调,但如果你找不到自己喜欢的东西,你总是可以在不同的端口上运行Tomcat,然后做一些反向代理并将所有内容发送到特定的在端口XYZ上运行的Tomcat安装的上下文,虽然我确实在Apache世界中只熟悉它,而不是IIS世界。

答案 2 :(得分:1)

查看JK,它有一个Apache模块,我认为它还有一个与Tomcat连接的IIS模块(可能是Jetty,我不知道)。这将允许您在其他端口(甚至在其他主机上)上运行Tomcat上的应用程序,并通过IIS访问它。

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

答案 3 :(得分:1)

如果使用Java 6,则内置HTTP服务器

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

当然,如果你关心可移植性,这不是一个好的解决方案。

答案 4 :(得分:0)

使用Java 6或更高版本随附的HTTP服务器。直截了当的代码。  如上所述,REST可以使用Servlet技术实现,我们无法将两者进行比较。

Servelet是一种Java适配器(Java),可以将Java请求中的HTTP请求转换为Java对象,并在请求到达并按照Java编程指示发送http响应时触发一个方法(doGet / doPost)。

        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();
            }
        }
    }
}