A WEB programozása - JavaScript 6 dr.Gál Tibor A Windows Scripting Host (WSH) Az egyik leghatékonyabb JavaScript végrehajtási környezet Használható Önállóan Böngészőben Kiszolgáló oldalon
Hatékonyságát a nagyszámú hozzáférhető objektumnak köszönheti:
WSH beépített objektumok Runtime könyvtár objektumai ActiveX objektumok ADO objektumok, stb.
Tárgyalás: csak a legszükségesebbekre kitérve Dokumentáció: js6\script56.chm
2010. őszi előadás
Hatékonyság demonstrálása Hozzáférés egy adatbázishoz, önálló alkalmazás (js6/dbase.js) js6\dbase.bat var ws = WScript.CreateObject("WScript.Shell"); var cd = ws.CurrentDirectory; var conn = new ActiveXObject("ADODB.Connection"); conn.Open("DRIVER={Microsoft Access Driver (*.mdb)};dbq=" + cd + "\\db1.mdb"); var rs = new ActiveXObject("ADODB.Recordset"); rs.Open("SELECT * FROM Customers", conn); var s ="__________________________\n"; s += "Név \t\t Életkor\n"; s +="__________________________\n"; while(!rs.EOF){ s +=rs("Name") +"\t"+rs("Age")+ "\n"; rs.MoveNext(); } s +="__________________________\n"; WScript.Echo(s); conn.Close();
File olvasása, önálló alkalmazás (js6/fileread.js) js6\fileread.bat var fso, f; var ForReading = 1; fso = new ActiveXObject("Scripting.FileSystemObject"); f = fso.OpenTextFile("fileread.js", ForReading); WScript.Echo(f.ReadAll());
Hozzáférés adatbázishoz a böngészőből js6\dbase1.bat js6\dbase2.bat <style type=text/css> th,td {font-size:32; font-weight:bold;} th {color:yellow; background-color:black} <script> var conn = new ActiveXObject("ADODB.Connection"); conn.Open( "DRIVER={Microsoft Access Driver (*.mdb)};dbq=db1.mdb"); var rs = new ActiveXObject("ADODB.Recordset"); rs.Open("SELECT * FROM Customers", conn); document.write( "
Név | Életkor |
"); while(!rs.EOF){ document.write("" + rs("Name") + " | " + "" + rs("Age") + " |
"); rs.MoveNext(); } document.write("
"); conn.Close();
1
A WEB programozása - JavaScript 6 dr.Gál Tibor Végrehajtás WSript.exe foo.js : GUI elemekkel dialógusablakokban támogatott végrehajtás és megjelenítés. De munkaasztalról kattintással is elindítható a szkript. CScript.exe foo.js : DOS ablakban, parancssoros végrehajtás.
2010. őszi előadás
Olvasás a DOS ablakban (csak CScript.exe esetén használható) A WScipt objektum StdIn tulajdonságának Read(n), ReadLine() és ReadAll() metódusaival
A legalapvetőbb feladatok
Olvasás a DOS ablakban (csak CScript.exe esetén használható) Írás DOS ablakban (csak CScript.exe esetén használható Olvasás input boxból Írás popup ablakban Környezeti változók olvasása Szövegfájlok megnyitása, írása és olvasása Adatbázis kapcsolat létrehozása, sql utasítások végrehajtása Hipetrext (hta) alkalmazások
Írás a DOS ablakban (csak CScript.exe esetén használható) A WScipt objektum StdOut tulajdonságának Write(str), WriteLine(str) és WriteBlankLines(n) metódusaival // az str string kiírása a DOS ablakba WScript.StdOut.Write(str); // az str string kiírása a DOS ablakba újsor karakterrel kiegészítve WScript.StdOut.WriteLine(str); // n üres sor kiírása a DOS ablakba WScript.StdOut.WriteBlankLines(n);
A WScript.Echo(str) is használható. Ha a szkript a CScript.exe paranccsal lett elindítva, akkor ez a metódus a DOS ablakba ír ki, WScript.exe indítás esetén viszont egy popup ablakba js6\5.bat
// n karakter olvasása var str1 = WScript.StdIn.Read(n); // egy sor olvasása var str2 = WScript.StdIn.ReadLine(); // olvasás a stream végéig var str3 = WScript.StdIn.ReadAll(); // sorvég érzékelése karakterenkénti olvasáskor WScript.StdIn.AtEndOfLine // stream végének érzékelése WScript.StdIn.AtEndOfStream
Példák az írásra és olvasásra // egy sor karakterenkénti olvasása és visszaírása js6\2.bat var input = WScript.StdIn; var out = WScript.StdOut; var s= ""; while (!input.AtEndOfLine) { s += input.Read(1); } out.Write(s); // olvasás a stream (CTRL C) végéig, s a beolvasott // string visszaírása js6\3.bat var input = WScript.StdIn; var out = WScript.StdOut; var s= ""; while (!input.AtEndOfStream) { s = input.ReadLine(); out.WriteLine(s); } // vagy egyszerűbben js6\4.bat var s = input.ReadAll(); out.Write(s);
2
A WEB programozása - JavaScript 6 dr.Gál Tibor Írás a popup ablakba (csak WScript.exe índítás esetén) Egymást követő Echo() metódusok újabb popup ablakokat nyitnak meg. Soremelés a \n szekvenciával váltható ki a stringen belül. // az srt string kiírása egy popup ablakba WScript.Echo(str);
2010. őszi előadás
Környezeti változók olvasása Az operációs rendszer környezeti változóinak olvasása js6\env1.js js6\env2.js var ws = WScript.CreateObject(”WScript.Shell”); var SysEnv = ws.Environment(”SYSTEM”); var s = ”A Windows könyvtár helye: ” + SysEnv(”WINDIR”); WScript.Echo(s);
Olvasás popup ablakból. js6\6wsf.bat A JScriptben nincs input box, ezért a VBSript-et kell erre használnunk. Ekkor viszont a fájl kiterjesztése már nem .js, hanem .wsf. <job id=”VBSandJS”> <script language=”VBScript”> DIM Input Input = InputBox(”Adja meg a nevét!”) <script language=”JScript”> WScript.Echo(”Üdvözlöm kedves ” + Input);
Szekvenciális hozzáférés szövegfájlokhoz a futásidejű könyvtár FileSystemObject objektumával létrehozott TextStream objektum metódusaival // a FileSystemObject létrehozása var fso = new ActiveXObject("Scripting.FileSystemObject"); // szövegfájl megnyitása, azaz a TextStream objektum // létrehozása // // // // // // // // //
filename iomode = 1 2 8 create = false true format = TristateFalse TristateTrue TristateDefault
a megnyitandó fájl neve megnyitás olvasásra megnyitás írásra megnyitás hozzáfűzésre nem létező fájlt nem hoz létre nem létező fájlt létrehozza megnyitás ASCII kódolással megnyitás Unicode kódolással megnyitás a rendszer kódolásával
var ts = fso.OpenTextFile(filename,iomode,create,format);
Egy process, például egy CGI processz környezeti változóinak olvasása var var var var var var ...
ws = WScript.CreateObject(”WScript.Shell”); ProcEnv = ws.Environment(”PROCESS”); contentLength = ProcEnv(”CONTENT_LENGTH”); contentType = ProcEnv(”CONTENT_TYPE”); queryString = ProcEnv(”QUERY_STRING”); serverName = ProcEnv(”SERVER_NAME”);
Az olvasás és írás végrehajtása // n karakter olvasása ts.Read(n) // egy sor olvasása (de a sorvég karaktert nem adja vissza) ts.ReadLine() // a teljes TextStream olvaása ts.ReadAll() // az str string írása ts.Write(str) // az str string írása újsor karakterrel kiegészítve ts.WriteLine(str) // n üres sor írása ts.WriteBlankLines(n)
// a megnyitott TextStream (szövegfájl) lezárása ts.close();
3
A WEB programozása - JavaScript 6 dr.Gál Tibor Példa fájl írására és olvasására js6\6.bat function GetEverything() { var fso, f; var ForReading = 1, ForWriting = 2; fso = new ActiveXObject("Scripting.FileSystemObject"); f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true); f.Write("Jó napotKollegák!"); f.Write("Üvözlöm Önöket!"); f.Close(); f = fso.OpenTextFile("c:\\testfile.txt", ForReading); return(f.ReadAll()); } WScript.Echo(GetEverything());
2010. őszi előadás
Gyermekrocessz indítása, szülő-gyermek kommunikáció I. js6\p12.bat var wshOut = WScript.StdOut; var wshIn = WScript.StdIn; wshOut.Write("Adja meg az elso szamot: "); var nr1 = wshIn.ReadLine(); wshOut.Write("Adja meg a masodik szamot: "); var nr2 = wshIn.ReadLine(); var WshShell = new ActiveXObject("WScript.Shell"); var oExec = WshShell.Exec("java.exe BigIntMult"); oExec.StdIn.Write(nr1 + "\n"); oExec.StdIn.Write(nr2 + "\n"); var result=oExec.StdOut.ReadLine(); WScript.Echo(nr1 + " * " + nr2 + " = " + result);
Gyermekrocessz indítása, szülő-gyermek kommunikáció II. js6\processes\p111.bat
Gyermekrocessz indítása, szülő-gyermek kommunikáció II. (folyt)
// main.js
//proc.bat
var sh = WScript.CreateObject("WScript.Shell"); var x1='Elso'; var x2='Masodik'; var x3='Harmadik'; var child1 = sh.Exec("proc.bat "+ x1 +" "+x2+" "+x3); var str = child1.StdOut.ReadAll(); WScript.StdOut.Write(str);
echo off set param1=%1 set param2=%2 set param3=%3 cscript //nologo child.js
var y1='First'; var y2='Second'; var y3='Third'; var child1 = sh.Exec("proc.bat "+ y1 +" "+y2+" "+y3); var str = child1.StdOut.ReadAll(); WScript.StdOut.Write(str);
//child.js var ws = WScript.CreateObject('WScript.Shell'); var env = ws.Environment('PROCESS'); WScript.StdOut.Write('Az olvasott kornyezeti valtozok\n'); WScript.StdOut.Write(env('param1')+'\n'); WScript.StdOut.Write(env('param2')+'\n'); WScript.StdOut.Write(env('param3')+'\n');
4
A WEB programozása - JavaScript 6 dr.Gál Tibor Az ActiveX Data Object (ADO) használata adatbázis műveletekre
Kapcsolatfelvétel az adatbázissal SQL utasítások elküldése az adatbázisba A visszakapott információ fogadása és feldolgozása A kapcsolat lezárása
2010. őszi előadás
Kapcsolatfelvétel az adatbázissal ODBC és DSN használata var conn = WScript.CreateObject(”ADODB.Connection”); // vagy // conn = new ActiveXObject(”ADODB.Connection”); conn.Open(”custom_DNS”); DNS használata nélkül var conn = WScript.CreateObject(”ADODB.Connection”); // vagy // conn = new ActiveXObject(”ADODB.Connection”); conn.Open(”DRIVER={Microsoft Access Driver (*.mdb)};” + ”DBQ=d:\\2005_web_eloadas\\wsh\\db1.mdb”); Nem Access adatbázisokra // Oracle ”DRIVER={Microsoft ODBC Driver for Oracle};” + ”Server=OracleServer.world;Uid=demo;Pwd=demo” // SQL ”DRIVER={SQL Server};” + ”Server=myserver;Database=pubs;Uid=sa;Pwd=pwd” // ...
SQL utasítások elküldése, feldolgozás és a kapcsolat lezárása // A Connection objektum létrehozása var conn = WScript.CreateObject(”ADODB.Connection”); // A kapcsolat megnyitása conn.Open(”custom_DNS”); // Az sql utasítás elküldése, a visszakapott eredmény egy // RecordSet objektum var rs = conn.Execute(”SELECT * FRM Customers”); // A RecordSet objektum feldolgozása var s = ””; while(!rs.EOF){ s += rs(”Name”) + ” , ” + rs(”Age”) + ”\n”; rs.MoveNext(); } // Az eredmény megjelenítése WScript.Echo(s); // A kapcsolat lezárása conn.Close();
Hipertext (HTA) alkalmazások (js6\dbase1.bat) html, htm helyett hta kiterjesztés biztonsági korlátozások feloldása <style type=text/css> th,td {font-size:32; font-weight:bold;} th {color:yellow; background-color:black} <script> var conn = new ActiveXObject("ADODB.Connection"); conn.Open( "DRIVER={Microsoft Access Driver (*.mdb)};dbq=g:db1.mdb"); var rs = new ActiveXObject("ADODB.Recordset"); rs.Open("SELECT * FROM Customers", conn); document.write( "
Név | Életkor |
"); while(!rs.EOF) {document.write("" + rs("Name") + " | " + "" + rs("Age") + " |
"); rs.MoveNext();} document.write("
"); conn.Close();
5