Programmēšana

Kā sākt darbu ar servera puses Java

Servera puses Java (SSJ), ko dažkārt sauc par servletiem vai servera sīklietotnēm, ir spēcīgs Common Gateway Interface (CGI) un zemāka līmeņa servera API programmēšanas hibrīds, piemēram, NSAPI no Netscape un ISAPI no Microsoft.

Šajā rakstā ir sniegts ievads un detalizēti norādījumi par servera Java Java ieviešanu Netscape, kuru Netscape izsauc servera sīklietotnes (SSA).

SSA var darboties kā CGI skripts. Tas saņem gūt un pastu pieprasa un atgriež Web lapu (parasti HTML formā), bet SSJ tiek dinamiski ielādēta serverī, piemēram, NSAPI / ISAPI. Tas novērš starta aizkavēšanos, ko esam sagaidījuši no CGI. Tas arī ļauj SSJ saglabāt daļu no stāvokļa starp izpildēm, piemēram, saglabāt atvērtu savienojumu ar datu bāzi.

SSA izpilda paši smilšu kaste, kas nodrošina drošību, ko var sagaidīt no Java. Piemēram, avārijas sīklietotne nesagrauj visu serveri, kā tas var notikt ar NSAPI / ISAPI programmēšanu. Šī pievienotā drošība ļauj arī sīklietotnes augšupielādēt izpildei serverī - tāpat kā klienta puses Java sīklietotnes tiek lejupielādētas izpildei klientā.

Varbūt vissvarīgākais SSA aspekts ir tas, ka, rakstīti Java valodā, tie pēc savas būtības ir neatkarīgi no platformas un orientēti uz objektu.

Vēsture

Arvien vairāk serveru Java atbalsta serveri, tostarp Netscape FastTrack 2.0 un Enterprise 2.0 serveri, JavaSoft Java Web Server (agrāk saukti par Jeeves), World Wide Web Consortium finierzāģis, WebLogic T3Server, Oracle Webserver un Peak Technologies ExpressO. Katrs no šiem serveriem izmanto atšķirīgu servera puses Java API, kas prasa izstrādātājiem rakstīt dažādas programmas katram serverim, kuru viņi izmantos.

Sīkāka informācija par Netscape: sagatavojiet serveri

Pirms autorējat savu pirmo servera sīklietotni Netscape serveriem, jums ir jāsagatavo serveris. Enterprise un FastTrack serveri savā SSA atbalstā ir identiski.

Sāciet ar servera Java tulka ieslēgšanu. To var izdarīt no servera pārvaldnieka sadaļā "Programmas -> Java". Noklikšķiniet uz pogas Jā, lai iespējotu Java tulku. Serveru pārvaldnieks lūgs jums "Java sīklietotņu direktoriju", kurā var ievietot SSA atbalsta failus, kā arī visu SSA klases failu atrašanās vietu. Tas nodrošina noklusējuma atrašanās vietu. Unix mašīnās tas tā ir / usr / ns-home / plugins / java / applets. Windows mašīnās tā ir C: \ Program Files \ Netscape \ Server \ plugins \ Java \ sīklietotnes (Piezīme: Šajā ieraksta laukā Netscape mēdz sajaukt un pieskaņot tās slīpsvītras un slīpsvītras uz priekšu. Neuztraucieties, Netscape pret abiem slīpsvītras veidiem izturas vienādi.) Ja iespējams, paņemiet noklusējuma sīklietotņu direktoriju. Ja nolemjat pielāgot, nevis izmantot noklusējumu, pārliecinieties, vai esat izvēlējies direktoriju kaut kur zem sava servera saknes un visus failus nokopējāt no noklusējuma vietas uz savu pielāgoto vietu. Saglabājiet un lietojiet izmaiņas, noteikti apturot serveri un palaižot to no jauna, lai izmaiņas stātos spēkā.

Laiks eksperimentēt!

Šajā brīdī jums vajadzētu būt iespējai eksperimentēt ar Netscape piedāvātajām sīklietotnēm. Novietojiet pārlūkprogrammu uz // servername / server-java / FormApplet? Abc = xyz & 123 = 789. Jums vajadzētu redzēt datus “get”, kurus HTML sūtījums apstrādā un atdod Forma sīklietotne.

Ja tiek parādīta servera kļūda, pārbaudiet sava servera kļūdu žurnālu (/ usr / ns-home / httpd-hostname / logs / kļūdas vai C: \ Program Files \ Netscape \ Server \ httpd-hostname \ logs \ kļūdas). Ja tā saka, ka nevar palaist Java tulku, iespējams, iemesls ir tas, ka jūsu CLASSPATH mulsina Netscape. Mēģiniet palaist serveri vidē, kurā nav CLASSPATH.

Vēl viena sīklietotne, kas jāizmēģina, ir // servername / server-java / Connect; tam vajadzētu ielādēt un parādīt //www.meer.net/barn/index.html. Connect sīklietotne izveido kontaktligzdas savienojumu, lai ielādētu lapu, kas var radīt servera kļūdu, ja jūsu serveris atrodas aiz ugunsmūra. Nākamajam solim pieņemsim, ka ugunsmūris bloķēja kontaktligzdu. Mēs rediģēsim Connect sīklietotnes kodu, lai piekļūtu citai lapai citā tīmekļa serverī.

Fails Connect.java ir pieejams "Java sīklietotņu direktorijā". (Tas ir atrodams arī zemāk.) Tas vispirms importē netscape.server.applet. *.

importēt netscape.server.applet. *; 

Šajā paketē ir iekļautas pamatklases servera sīklietotņu izstrādei. Vissvarīgākā klase šajā paketē ir HttpApplet, superklase visām servera puses sīklietotnēm. Kā redzat Connect (zemāk), vienīgā metode, kas servera puses sīklietotnei jāievieš, ir palaist metodi. Šī metode tiek izmantota katru reizi, kad sīklietotne saņem "trāpījumu". The palaist metode Connect atver ligzdu "resursdatoram" un ienes "pieprasījumu" pirms izvades novirzīšanas klientam. Mēs vēlamies mainīt mainīgo “resursdators”, lai tas atsauktos uz mašīnu, kas redzama no mūsu tīmekļa servera. Mēs arī vēlēsimies mainīt mainīgo “pieprasījums”, lai tas atsauktos uz jauno “resursdatoru”.

importēt netscape.server.applet. *; importēt java.io.PrintStream; importēt java.io.InputStream; importēt java.io.OutputStream; importēt java.io.DataInputStream; importēt java.net.Socket; class Connect paplašina HttpApplet {public void run () throws Exception {String host = "www.meer.net"; // mainīt šo int portu = 80; Virknes pieprasījums = "GET /barn/index.html HTTP / 1.0 \ n"; // arī tas Socket s = jauns Socket (resursdators, ports); OutputStream os = s.getOutputStream (); PrintStream op = jauns PrintStream (os); op.println (pieprasījums); InputStream ir = sam (); DataInputStream di = jauns DataInputStream (ir); Stīgu līnija; if (returnNormalResponse ("text / html")) {PrintStream out = getOutputStream (); out.println ("& lth1 & gtData par" + resursdators + "ports" + ports + ""); out.println (" pieprasījums: "+ pieprasījums +"
"); kamēr ((line = di.readLine ())! = null) out.println (līnija);}}}

Pēc izmaiņu “resursdators” un “pieprasījums” veikšanas nākamais solis ir Connect atkārtota kompilēšana.

Operētājsistēmā Windows izmantojiet standarta javac kompilatoru ar iestatītu klases ceļu, lai iekļautu serv2_0.zip. javac -classpath .. \ class \ serv2_0.zip Connect.java.

Sadaļā Unix Netscape nodrošina Java kompilatoru (javac) direktorijā virs Java sīklietotņu direktorija. Šis javac faktiski ir skripts, kas izsauc java sun.tools.javac.Galvenais veikt apkopošanu. Dažās sistēmās sun.rīki.javac.Galvenais kompilators izmanto jaunas 1.1 JDK metodes, piemēram, java.lang.Character.isJavaLetterOrDigit (), kas var radīt diezgan lielas problēmas izstrādātājiem bez 1.1 JDK. Pilnīgi laba alternatīva ir izmantot standarta javac kompilatoru, kuru esat vienmēr izmantojis, javac -classpath ../classes/serv2_0.zip Connect.java. Ja vēlaties izmantot norādīto javac skriptu, vienkārši aizstājietjavac"ar"../javac."

Šīs kompilācijas laikā jūs varat redzēt kļūdu, kurā teikts:

Connect.java:1: pakete netscape.server.applet nav atrodama importēšanā. importēt netscape.server.applet. *; ^ 1 kļūda 

Par šo kļūdu nav jāuztraucas. Klases fails tiek izveidots normāli un darbosies labi. Šo kļūdu var novērst, ja importēšanas paziņojumos izslēdzat aizstājējzīmes.

Sadaļā Unix Netscape nodrošina Java sīklietotņu direktorijā makefilu, lai apstrādātu sīklietu kompilāciju. Diemžēl makefile izmanto '%' aizstājējzīmi, kas ir mk / nmake paplašinājums un ne vienmēr ir pieejama. Problēmas kods ir parādīts zemāk.

% .class:% .java ../javac -classpath ../classes/serv2_0.zip $ *. java 

Alternatīva ir izmantot .suffixes kārtulu. Rediģējiet makefile pirmo rindiņu:

.SUFFIXES: .java .class un aizstājiet% .class mērķa līnijas ar .java.class: javac -classpath ../classes/serv2_0.zip $ < 

Jūs varat pamanīt, ka es noņēmu ../ lai makefile izsauktu standarta javac kompilatoru. Lai pārbaudītu šo jauno failu, atkārtoti saglabājiet failu Connect.java un mēģiniet izveidot "make".

Ja jūs tūlīt pārlādētu lapu // servername / server-java / Connect, jūs joprojām redzētu lapu "Barn". Tas ir tāpēc, ka Java klases tiek ielādētas serverī sākuma laikā, izmantojot faila obj.conf init funkciju. Lai ielādētu jaunās izmaiņas, serveris ir jāpārtrauc un pēc tam jāsāk no jauna. Dažās sistēmās ir jāizmanto servera pārvaldnieks, lai veiktu apturēšanu un sākšanu. Komandu rindas restartēšana dažkārt rada "servera kļūdu" nākamajiem sīklietotņu pieprasījumiem. Kad esat pārtraucis un palaidis serveri, vēlreiz izmēģiniet Connect sīklietotni. Lai parādītu izvēlēto lapu, programmai Netscape vajadzēja ielādēt jauno Connect kodu.

Nopietni pievērsīsimies API

Apsveicam! Jūs tikko esat apkopojis un pārbaudījis savu pirmo servera puses Java kodu. Tagad sniedziet dažas no jums pieejamām metodēm.

Izmantojot šīs metodes, jūs varat veikt lielāko daļu sava darba:

PrintStream getOutputStream () izmet IOException; 

atgriež a PrintStream, kuru varat izmantot, lai izdrukātu atbildi klientam. Tas aizstāj System.out.

Hashtable getFormData () met IOException; 

atgriež hashtable, kurā glabājas HTTP pieprasījuma nosaukuma un vērtības pāri. Vērtību virknes tiek atšifrētas no to URI kodētās formas. Tas iemet IOException ja nav veidlapas datu.

String getFormField (String fieldName) iemet IOException; 

Tu vari izmantot getFormField tikai viena lauka izgūšanai. Arī tas met IOException ja nav veidlapas datu.

boolean returnNormalResponse (String contentType) izmet IOException; 

sāk HTTP atbildi ar iestatīto satura tipu, kā jūs norādāt ar tā parametru. Tas atgriež patiesību, ja tas bija pieprasījums "iegūt" vai "ievietot", un nepatiesa, ja tas bija pieprasījums "galva".

public boolean returnErrorResponse (virknes contentType, int statuss, virknes iemesls) izmet IOException publisko boolean returnErrorResponse (virknes contentType, int statuss) iemet IOException 

sāk HTTP atbildi, lai ziņotu par kļūdu. Tam nepieciešams satura tips, statuss (piemēram, HttpApplet.BAD_REQUEST, kas apzīmē standarta kļūdas kodu 400) un izvēles virkne, kurā norādīts kļūdas iemesls.

Lai izveidotu servera puses sīklietotnes, varat izmantot desmitiem citu metožu. Netscape kopā ar saviem serveriem instalē API ceļvedi. Ceļvedi varat atrast vietnē /usr/ns-home/bin/httpd/admin/html/manual/pg/javapi.htm zem Unix vai plkst C: \ Program Files \ Netscape \ Server \ bin \ httpd \ admin \ html \ manual \ pg \ javapi.htm zem Windows.

Sveika pasaule!

Tagad izmantosim visu, ko esam iemācījušies, lai rakstītu (jūs uzminējāt!) Hello World servera sīklietotni. Šis sīklietotne saka sveiki Pasaule ja vien a mērķis lauks tiek dots - tādā gadījumā tā vietā sveicina mērķi.

importēt netscape.server.applet.HttpApplet; importēt java.io.IOException; importēt java.io.PrintStream; klase Sveiki paplašina vietni HttpApplet {/ * Pēc noklusējuma mēs sveicinām "Pasaule" * / String helloTarget = "Pasaule"; / * run () tiek izsaukts, lai apstrādātu pieprasījumu * / public void run () throws Exception {/ * getOutputStream () ļauj mums runāt ar klientu * / PrintStream out = getOutputStream (); / * Izmantojiet getFormField (), lai uzzinātu, vai mēs vēlamies sveicināties * kādam citam, nevis “Pasaule”. * / String formTarget = null; mēģiniet {formTarget = getFormField ("target"); if (formTarget! = null) {helloTarget = formTarget; }} catch (IOException e) {/ * Mēs ignorēsim izņēmumus, ko izraisījis “trūkstoša vaicājuma virkne” * / if (! e.getMessage (). startsWith (“trūkstošās vaicājuma virknes”))) {handleException (e, out) ; }} / * Pasveiciniet * / if (returnNormalResponse ("text / html")) {mēģiniet {out.println ("Sveiki," + sveikiMērķis + "!"); } catch (izņēmums e) {handleException (e, out); }}} private void handleException (izņēmums e, PrintStream out) {mēģiniet {returnErrorResponse ("text / html", SERVER_ERROR, "izmests izņēmums"); } catch (IOException ioe) {} // mēģiniet izdrukāt oriģinālo izņēmumu out.print ("& lth1>"); out.print (e); out.print ("\ n "); out.print (" & ltpre> "); e.printStackTrace (out); // jānorāda alternatīva PrintStream out.print ("
"); return;}}

Šī servera puses sīklietotnes apakšklase no netscape.server.applet.HttpApplet un ignorē palaist () tāpat kā visas servera puses sīklietotnes zem Netscape. Tas ātri iegūst izejas straumi ar aicinājumu getOutputStream, ko tā izmantos, lai izdrukātu "Hello" (vai izmantotu, lai izdrukātu neveiksmes iemeslu). Tas aicina getFormField lai pārbaudītu, vai ir alternatīvs mērķis, ko izmantot, un pēc tam atgriež normālu atbildi "text / html" un visbeidzot veic faktisko darbu, izdrukājot "Hello". Ievērojiet, ka tas pārbauda atgriešanās vērtību no returnNormalResponse () zvanu un neko nedara, ja tas atgriežas kā nepatiess. Ja jūs to nedarīsit, jūs atgriezīsit datus pat par galva pieprasījumiem.

$config[zx-auto] not found$config[zx-overlay] not found