Node.js рдмрдирд╛рдо рдЬрд╛рд╡рд╛ + рд░рд╛рдЗрдиреЛ + рдЬреЗрдЯреНрдЯреА + рдлреНрд░реАрдорд░реНрдХрд░


рд╣рд╛рд▓рд╛рдВрдХрд┐ Node.js рдиреЗ рдЕрдкрдиреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдП рд╣реИрдВ, рдпрд╣ рдЕрднреА рднреА рдЬрд╛рд╡рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЗ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕реЗрдЯ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рдХрд╛рдлреА рд╣реАрди рд╣реИред рддреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд▓рд╛рдн рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЙрдард╛рдПрдВ? рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдорд╡реАрд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдореЛрдЬрд╝рд┐рд▓рд╛ рд░рд╛рдЗрдиреЛ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓реЛ рдЧреИрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд / рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореЛрдЬрд╝рд┐рд▓рд╛ рд░рд╛рдЗрдиреЛ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЬрд╛рд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ ECMAScript рдХреЛрдб рдХрд╛ рдЙрддреНрдХреГрд╖реНрдЯ рдПрдХреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред J2SE 6 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, Rhino рдЬрд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ JRE рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, JRE рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рди рд╕реЗ рдХреБрдЫ рдЕрдкреНрд░рд┐рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдПрдХ рддрд╛рдЬрд╝рд╛ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, helloworld.js :
 print('Hey you!'); 

рд░рд╛рдЗрдиреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдорд╛рди рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ ./lib рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдПрдВ:
 java -Djava.ext.dirs=./lib org.mozilla.javascript.tools.shell.Main helloworld.js 


рд╡реИрд╕реЗ, рдХрд┐рдЯ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ UI рд╡рд╛рд▓рд╛ рдбрд┐рдмрдЧрд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:
 java -Djava.ext.dirs=./lib org.mozilla.javascript.tools.debugger.Main helloworld.js 



рд░рд╛рдЗрдиреЛ, рдорд╛рдирдХ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрдИ рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рдВрдЪрд╛рд░ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдирд╣реАрдВ рд╕рдордЭреЗ рд╣реИрдВ, рддреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реЗ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ Packages ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк java.io.File рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 var file = new Packages.java.io.File('filename'); 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБрдПрдВ java , com , org , edu рдФрд░ net , рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдХреЛ рдирд┐рдореНрди рддрдХ рдШрдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 var file = new java.io.File('filename'); 

рдЖрдк рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 var File = java.io.File; //... var file = new File('filename'); 

рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ:
 importClass(java.io.File); //... var file = new File('filename'); 

рдпрд╛ рддреЛ:
 importPackage(java.io); //... var file = new File('filename'); 

рд░рд╛рдЗрдиреЛ рдЖрдкрдХреЛ рдЬреЗрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рд╡рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
 var runnable = new java.lang.Runnable({run: function() { print("I'm running!"); }}); new java.lang.Thread(runnable).start(); 

рд╡реИрд╕реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ java.lang рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд ECMAScript рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред

рдФрд░ рд░рд╛рдЗрдиреЛ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ -require рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрд╡рд┐рдЪ- -require рд╕рд╛рде рд░рд╛рдЗрдиреЛ рд╢реЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ ./modules/math.js :
 exports.sum = function(a, b) { return a + b; } 

рддреЛ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 var math = require('math'); print(math.sum(2, 4)); 

рдпрд╣ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рдЪрд▓рддрд╛ рд╣реИ:
 java -Djava.ext.dirs=./lib org.mozilla.javascript.tools.shell.Main -require -modules ./modules test.js 


рдШрд╛рдЯ


рд╣рдо рдЬреЗрдЯреНрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдЬреЗрдЯреНрдЯреА рд╕рд░реНрд╡рд▓реЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ SPDY, WebSocket, OSGi, JMX, JNDI рдФрд░ JAAS рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЪреАрд▓рд╛ рд╣реИред рдЖрдк рдпрд╣рд╛рдВ рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЬреЗрдЯреНрдЯреА рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреЛрдб рд╣реИ:
 importPackage(org.eclipse.jetty.server); var server = new Server(8888); //  8888 server.start(); server.join(); //   Jetty 

рдЬреЗрдЯреНрдЯреА рд╡рд┐рддрд░рдг рд╕реЗ ./lib рдХреЛ рднреА ./lib рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдм рдХреБрдЫ рдЪрд▓рд╛рдПрдВрдЧреЗ:
 java -Djava.ext.dirs=./lib org.mozilla.javascript.tools.shell.Main -require -modules ./modules server.js 

рд╣рд╛рдБ, рд╡рд╣ рд╕рдм рд╣реИред

рдпрд╣ рд╕рд░реНрд╡рд░ рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдкрд░ HTTP 404 рдЬрд╛рд░реА HTTP 404 ред рдЗрд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рд╛рдЗрд▓ рд╕рд░реНрд╡рд░ рдореЗрдВ рдмрджрд▓ рджреЗрдВред
 importPackage(org.eclipse.jetty.server); importPackage(org.eclipse.jetty.server.handler); var resourceHandler = new ResourceHandler(); resourceHandler.setDirectoriesListed(true); //       resourceHandler.setResourceBase('web'); //    ./web resourceHandler.setWelcomeFiles(['index.html']); //       index.html var server = new Server(8888); server.setHandler(resourceHandler); server.start(); server.join(); 

рдЕрдм рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
 importPackage(org.eclipse.jetty.server); importPackage(org.eclipse.jetty.server.handler); importPackage(org.eclipse.jetty.servlet); importPackage(javax.servlet.http); var contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); contextHandler.setContextPath('/'); contextHandler.addServlet( new ServletHolder(new HttpServlet({ //      ,     doGet: function(request, response) { response.setContentType('text/plain'); response.getWriter().println('Yes, it works!'); } })), '/test' ); var server = new Server(8888); server.setHandler(contextHandler); server.start(); server.join(); 

рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд▓реЗрдЯ рдЙрдкрд▓рдмреНрдз рд╣реИ localhost:8888/test localhost:8888/test ред рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕реЗ рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ рдЬреЛ рдордХреНрдЦреА рдкрд░ рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕реНрд╡реАрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
 importPackage(java.awt.image); importClass(java.awt.Color); importClass(javax.imageio.ImageIO); //    J2SE 6 var width = 400, height = 400; exports.doGet = function(request, response) { var image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); var graphics = image.createGraphics(); var color = new Color(Math.random(), Math.random(), Math.random()); graphics.setColor(color); graphics.fillRect(0, 0, width, height); graphics.setColor(color.brighter()); graphics.drawString('On the fly!', 10, 20); response.setContentType('image/png'); var outputStream = response.getOutputStream(); ImageIO.write(image, 'png', outputStream); outputStream.close(); }; 

рдЗрд╕реЗ ./modules рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ imageServlet.js рд░реВрдк рдореЗрдВ imageServlet.js рдФрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ:
 contextHandler.addServlet( new ServletHolder(new HttpServlet(require('imageServlet'))), '/image.png' ); 

DBMS рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реИ? рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ MySQL рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕реВрдЪреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
 importPackage(java.sql); exports.doGet = function(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(); } }; 

рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ JDBC рдХреЗ рд▓рд┐рдП MySQL рдХрдиреЗрдХреНрдЯрд░ / J рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЕрдм рдЕрдВрддрд┐рдо рдШрдЯрдХ рд░рд╣рддрд╛ рд╣реИ, рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрдиред

FreeMarker


FreeMarker рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ HTML рдФрд░ HTTP рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреА рд╕рдореГрджреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдк рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рддреБрд░рдВрдд рдмрд╛рд░реА рдмрд╛рд░реА рд╕реЗ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рдЬрд╛рдПрдВред

рдРрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ/templates/template.ftl рдореЗрдВ ./templates/template.ftl :
 <html> <head> <title>${title}</title> </head> <body> <h1>${title}</h1> <#if message??> <pre>${message?html}</pre> <#else> <form method="post"> <textarea name="message"></textarea> <p><input type="submit" value="Post!"/></p> </form> </#if> </body> </html> 

рдкреНрд░рддреНрдпрдп ?html рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдЪрд░ рдореЗрдВ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рдмрджрд▓рддрд╛ рд╣реИ ред рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░реНрд╡рд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛:
 importPackage(Packages.freemarker.template); importPackage(Packages.freemarker.ext.rhino); var configuration = new Configuration(); configuration.setObjectWrapper(new RhinoWrapper()); //   . var template = configuration.getTemplate('templates/template.ftl'); exports.doGet = function(request, response) { response.setContentType('text/html;charset=UTF-8'); template.process( {'title': 'Compose a message'}, response.getWriter() ); }; exports.doPost = function(request, response) { response.setContentType('text/html;charset=UTF-8'); template.process( { 'title': 'Message', 'message': request.getParameter('message') }, response.getWriter() ); }; 

Node.js рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдореИрдВ рдкрд╛рдардХ рдХреЛ рджреЛрд╖ рджреЗрддрд╛ рд╣реВрдВред рдкреВрд░рд╛ рдирдореВрдирд╛ рдХреЛрдб GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

Source: https://habr.com/ru/post/In183334/


All Articles