【问题标题】:Lightweight servlet engine for serving java application via IIS用于通过 IIS 为 java 应用程序提供服务的轻量级 servlet 引擎
【发布时间】:2010-11-23 13:51:22
【问题描述】:

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

java 应用程序非常简单,只有几个 serverlet(无 JSP),其功能非常接近“Hello World”。所以我希望 servlet 引擎尽可能轻量级。我认为 Tomcat 对此太过分了。

这样的产品是否存在或者我被 Tomcat 困住了?

【问题讨论】:

    标签: java iis iis-7 servlets


    【解决方案1】:

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

    我用它来调试 Lift 应用程序,印象非常深刻。

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

    【讨论】:

    • 感谢您的快速回答!是的,Jetty 是不错的产品。我在开发 Java 应用程序时也在本地使用它。但它与 IIS 的集成情况如何?它与Tomcat的程序相同吗?或者,正如我所怀疑的那样,情况更糟?您或其他人是否测试过它并取得了良好的效果? (甚至有可能在这样的设置中获得好的结果吗?)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        如果你使用 Java 6,有一个内置的 HTTP 服务器,

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

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-11
            • 1970-01-01
            • 2013-03-11
            • 2013-01-06
            相关资源
            最近更新 更多