我有一个旧的遗留Java Web应用程序,我想在与我的asp.net-applications(在IIS 7上运行)相同的服务器上部署。我需要在端口80上运行所有应用程序,因此我不能在不同的端口上安装两个Web服务器。
java-application非常简单,只有几个服务器小程序(没有JSP),其功能非常接近“Hello World”。所以我希望servlet引擎尽可能轻量级。我认为Tomcat对此有点矫枉过正。
这样的产品是否存在或我是否遇到Tomcat?
答案 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访问它。
答案 3 :(得分:1)
如果使用Java 6,则内置HTTP服务器
当然,如果你关心可移植性,这不是一个好的解决方案。
答案 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();
}
}
}
}