Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
...Internally, node.js relies on libev to provide the event loop, which is supplemented by libeio which uses pooled threads to provide asynchronous I/O...
1 thread может обрабатывать сотни запросов
Хоть Node.js и обзавелся с момента своего появления множеством модулей, он все еще существенно уступает по возможностям мощному набору библиотек Java.
И да, ResultSet и конекшны нужно закрывать
Вот этот код } catch(e) {} finally { для Connection-а очень плох. Ошибки конфигурации базы мы будем глотать.dbServlet.js так:importPackage(java.sql);
function doGet(request, response) {
try {
var connection = DriverManager.getConnection('jdbc:mysql://localhost/?', 'root', '');
try {
var resultSet = connection
.createStatement()
.executeQuery('show databases;');
response.setContentType('text/html;charset=UTF-8');
var writer = response.getWriter();
writer.println('<h1>Databases</h1>');
while (resultSet.next()) {
writer.println(resultSet.getString('Database') + '<br />');
}
} catch(e) {} finally {
resultSet.close();
}
} catch(e) {} finally {
if(connection)
connection.close();
}
};
if(this['exports'])
exports.doGet = doGet;
java -Djava.ext.dirs=./lib org.mozilla.javascript.tools.jsc.Main -extends javax.servlet.http.HttpServlet modules/dbServlet.jscontextHandler.addServlet(
new ServletHolder(new Packages.dbServlet()),
'/db'
);
-cp .:./modulesvar flag = false,
runnable = new java.lang.Runnable({
run: function() {
print("I'm running!");
flag = true;
}
});
new java.lang.Thread(runnable).start();
while (!flag){}
print("Done");
Node.js vs Java + Rhino + Jetty + FreeMarker