Увядзенне
Вэб-старонак фактычна вы можаце ўбачыць кліенцкай баку злучэння кліент-сервер праз інтэрнэт. Калі Ваш браўзэр (кліент) хоча бачыць вэб-старонкі, напрыклад, ён пасылае запыт у прымаючага вы паказваеце ў URL (Uniform Resource Locator), выкарыстоўваючы ўказаны пратакол (HTTP ў гэтым выпадку, Hyper Text Transfer Protocol). Прыклад URL: http://www.ruppweb.org/default.htm (пратакол:// site.domain/дакумент). Назва сайта не што іншае, імя, прысвоенае IP-адрас з машыны (напрыклад 128.115.150.112) працуе (у Інтэрнэце) сервера. (ЗАЎВАГА: у гэтым кантэксце сервера праграма працуе вэб-сэрвіс на машыне, а не сам кампутар - кампутар хост).
Калі сервер атрымлівае такі запыт, ён адказвае і пасылае назад старонцы, або любы іншы запыт для. Мова, на якім сервер і кліент мець зносіны, HTML (Hyper Text Markup Language). Акрамя статычных запытаў на вэб-старонках, можна жадаеце сервера для выканання пэўных задач (такіх як пошук базы дадзеных або дэкадаваць прастору групы). Там павінен быць механізм для сервера для атрымання інфармацыі аб тым, што рабіць і ў рукі яго да прыкладанняў, які апрацоўвае запыт. Гэты інтэрфейс CGI (Common Gateway Interface). Сервер па сутнасці устанаўлівае пэўныя сістэмныя зменныя асяроддзя, якая называецца Праграма можа счытваць і апрацоўваць. Выхад перадаецца назад на сервер перасылкі праз Інтэрнэт запытваючага браўзэру, які адлюстроўвае вынік. Вы можаце праверыць Microsoft Internet развіцця кампакт-дыск або іншыя спасылкі для атрымання дадатковай інфармацыі па гэтым пытанні.
Прыклад
У гэтай вэб-старонцы я выкарыстаў наступны сцэнар, каб стварыць поле ўводу і вызначыць дзеянні, якія неабходна прыняць:
<form action="/cgi-bin/sexie32.exe" method="GET"> <p>Enter a spacegroup or spacegroup number <input type="text" size="11" name="spcgrp"> and hit enter</p> </form>
Гэта мінімальны код стварае вышэй полі ўводу, прысвойвае ўклад у зменнай з імем "spcgrp і выконвае праграму sexie32 які робіць сваю справу. Як я магу атрымаць пераменным прасторы групы ў праграме? Паказаўшы GET як метад, сервер дадае імя зменнай і яе змесціва пасля пытальніка у назве праграмы і захоўвае гэтую радок у зменную QUERY_STRING ў навакольнае асяроддзе. Усё робіць праграма для чытання гэтага радка зменную асяроддзя, расшыфраваць яго, і пасля разліку, запісаць вынік у выглядзе файла HTML ў стандартны вывад (кансолі), якая сервер перанакіроўвае запыт. Большасць моў сцэнарыяў забяспечыць бібліятэкі і не трэба мець справу з дэталямі чытанне сістэмнага асяроддзя.
FORTRAN
Як навукоўцы, мы, магчыма, карысная праграма ў FORTAN, што робіць добрую працу, і было б пажадана, каб зрабіць яго даступным у Інтэрнэце. Відавочным перавагай з'яўляецца тое, што вам не прыходзіцца мець справу з платформы і пытанні рэалізацыі - не неправераных версія распаўсюду, не зьвязвайцеся зыходны код і г.д. - дадатак працуе на вашым кампутары, і браўзэры клапаціцца аб платформе канкрэтнай рэалізацыі. Раптам стары код F66 мае графічны інтэрфейс Windows!
Падпраграма WEBSPC чытае зменныя асяроддзя і вяртае spacegroup радок у асноўнай праграме:
subroutine webspc (spcgrp,title,igr,ierr) WEBS0001
c ----------------------------------------------------------------------WEBS0002
c returns space group passed from web server through GET method WEBS0003
c ----------------------------------------------------------------------WEBS0004
USE MSFLIB WEBS0005
integer*4 lstr WEBS0006
integer igr(36) WEBS0007
character today*24,spcgrp*10,title*60,usradd*15,fname*60,qstr*80 WEBS0008
character usrnam*80,browsr*80 WEBS0009
WEBS0010
c --- Set spacegroup blank WEBS0011
spcgrp=' ' WEBS0012
ierr=0 WEBS0013
Вось як чытаць зменныя асяроддзі, былі ўсталяваныя сервер у адпаведнасці з інструкцыямі ў дзеянне фрагмент HTML-код, які ўказаны вышэй. Вы знойдзеце спіс іншых зменных, якія ўстаноўлены ў большасці кніг па вэб-праграмаванні (некаторыя з іх чытаюць webspc а). Ключ QUERY_STRING, якая ўтрымлівае зменную частка URL пабудаваны дзеянняў, пералічаных вышэй:
http://ruppweb.dyndns.org/cgi-bin/sexie32.exe?spcgrp=I+4% 2 ФМ + М + М
QUERY_STRING змяшчае: spcgrp = я +4% 2 ФМ + М + М (Заўвага: калі вы ўводзіце URL вышэй або пстрыкніце па ёй, сцэнар CGI на самай справе будзе выканана). Адзначым таксама, што інтэрфейс CGI заменнікаў нарыхтовак + знакі і спецыяльныя сімвалы з іх шаснаццатковы код папярэднічаць знак% (напрыклад, слэш% 2F). Фактычныя ўваходны радкі ў акне быў "Я 4/mmm ў гэтым выпадку.
WEBS0014
c --- get the client name and the query_string from environment WEBS0015
ladd = GETENVQQ('REMOTE_ADDR', usradd) WEBS0016
lnam = GETENVQQ('REMOTE_USR', usrnam) WEBS0017
lbrs = GETENVQQ('HTTP_USER_AGENT', browsr) WEBS0018
lstr = GETENVQQ('QUERY_STRING', qstr) WEBS0019
WEBS0020
c --- read space group - if an integer decode by number WEBS0021
read(qstr,'(7x,i3)',err=0001) ispa WEBS0022
c --- if we get here, it was read successfully as a number WEBS0023
Звярніце ўвагу, што я выкарыстоўваю памылка пры чытанні этыкеткі знак, як цэлае, вызначальным сімвал прасторавай групы або нумар групы прасторы было ўведзена.
call spsymc (spcgrp,ispa) WEBS0024
c --- ispa returns the symbol now proceed with checks WEBS0025
goto 2002 WEBS0026
WEBS0027
c --- parse the input string if not a number WEBS0028
0001 continue WEBS0029
ilen=lstr-7 WEBS0030
j=0 WEBS0031
c --- begin loop over query_string WEBS0032
Звярніце ўвагу, што інтэрфейс CGI заменнікаў нарыхтовак + знакі і спецыяльныя сімвалы з шаснаццатковы код папярэднічаць знак% (напрыклад,/з'яўляецца% 2F), так што мы павінны разабраць гэтую радок:
i=8 WEBS0033
1000 continue WEBS0034
c --- replace + with blank WEBS0035
if (qstr(i:i).eq.'+') then WEBS0036
j=j+1 WEBS0037
spcgrp(j:j)=' ' WEBS0038
i=i+1 WEBS0039
c --- replace special character hex code with character WEBS0040
else if (qstr(i:i).eq.'%') then WEBS0041
c --- %2F is slash WEBS0042
if (qstr(i+1:i+2).eq.'2F') then WEBS0043
j=j+1 WEBS0044
spcgrp(j:j)='/' WEBS0045
i=i+3 WEBS0046
end if WEBS0047
else WEBS0048
j=j+1 WEBS0049
spcgrp(j:j)=qstr(i:i) WEBS0050
i=i+1 WEBS0051
end if WEBS0052
c --- repeat until finished with string WEBS0053
if (i.lt.(ilen+8)) goto 1000 WEBS0054
WEBS0055
c --- now check if a valid space group symbol WEBS0056
2002 call upstrg(spcgrp,10) WEBS0057
read(spcgrp,'(10a1)') (igr(i), i=1,10) WEBS0058
ispa=0 WEBS0059
call spsymc (spcgrp,ispa) WEBS0060
WEBS0061
c --- get a date string, format is :Wed Nov 20 15:33:29 1996 WEBS0062
call fdate (today) WEBS0063
title='Webjob on '//today(1:10)//today(20:24)//' at'// WEBS0064
& today(11:19) //' from '//usradd WEBS0065
Праграма таксама вядзе часопіс карыстальнікаў.
c --- log the job WEBS0066
fname='C:\inetsrv\wwwroot\webjobs.html' WEBS0067
open (66,file=fname,access='append',position='append') WEBS0068
c --- overwrite old </body> tag WEBS0069
backspace (66) WEBS0070
write(66,'(a,a,a)')' <p>Date : '//today//'<br>' WEBS0071
write(66,'(a,a,a)')' Client : '//usradd(1:ladd)//'<br>' WEBS0072
write(66,'(a,a,a)')' Browser : '//browsr(1:lbrs)//'<br>' WEBS0073
write(66,'(a,a,a)')' Spacegr: '//spcgrp//'<br>' WEBS0074
if (ispa.lt.0) then WEBS0075
write(66,'(a)')' Status : failed!</p>' WEBS0076
else WEBS0077
write(66,'(a)')' Status : ok</p>' WEBS0078
end if WEBS0079
write(66,'(a)') ' <hr>' WEBS0080
write(66,'(a)') ' </BODY>' WEBS0081
close(66) WEBS0082
c --- if something went wrong, return message and termination signal WEBS0083
if (ispa.lt.0) then WEBS0084
call webtxt (1,spcgrp) WEBS0085
ierr=1 WEBS0086
close(5) WEBS0087
return WEBS0088
else WEBS0089
close(5) WEBS0090
return WEBS0091
end if WEBS0092
return WEBS0093
end WEBS0094
Пераменная spcgrp атрымлівае вярнуўся ў асноўнай праграме, які дэкадуе прасторы групы. Выхадныя дадзеныя запісваюцца ў файл, і ўсё што трэба, гэта малюсенькія руціны, каб напісаць гэты выснова ў выглядзе файла HTML ў стандартны вывад (кансоль).
subroutine htmake HTMA0001
HTMA0002
character*80 line HTMA0003
HTMA0004
open(6,file='sexie.out') HTMA0005
write(*,*)'Content-type: text/html' HTMA0006
write(*,*) HTMA0007
write(*,*)'<BODY bgcolor="#FFFDE6" TEXT="#0000FF">' HTMA0008
write(*,*)'<TITLE>Space group decoding</TITLE>' HTMA0009
write(*,*)'<pre>' HTMA0010
do i=1,100000 HTMA0011
read(6,'(1x,a)',end=9999) line HTMA0012
write(*,'(1x,a)') line HTMA0013
end do HTMA0014
9999 close(6) HTMA0015
open(6,file='xyz.txt') HTMA0016
write(*,'(//a//)') HTMA0017
& ' Alternate listing of symmetry operators follows' HTMA0018
do i=1,100000 HTMA0019
read(6,'(1x,a)',end=9990) line HTMA0020
write(*,'(1x,a)') line HTMA0021
end do HTMA0022
9990 close(6) HTMA0023
write(*,*) '</pre>' HTMA0024
write(*,*) '</BODY>' HTMA0025
return HTMA0026
end HTMA0027
Такім чынам, вось і ўсё, што да асноўных сцэнарыяў CGI. Проста ісці наперад, напісаць невялікі фрагмент кода сабе і пагуляць трохі. Я выкарыстаў Microsoft Frontpage [2], каб стварыць свой сайт і формы, і Microsoft FORTRAN прафесійнае выданне для F90 праграмавання. Ваш Fortran Compiler можа выкарыстаць іншы спосаб атрымаць зменныя асяроддзя, але вы павінны быць у стане знайсці гэта ў вашай дакументацыі. Вядома, гэта не заахвочванне, каб напісаць CGI-скрыпты ў Fortran. Выкананыя файлы з'яўляюцца вялікімі і поўны з галавой, і для вырашэння многіх задач, C, Пэрл, J + + і г.д. хутчэй. Але калі ў вас ёсць цвёрдае свету кода, эй, чаму б не зрабіць яго можна было выкарыстоўваць па сеткі!
Спіс літаратуры
[1] CGI Developer's Guide, EEKim, SamsNet Выдавецкі (1996)
[2] http://www.microsoft.com/frontpage/documents/technical11/default.htm
[3] Асваенне Развіцця Інтэрнэт, Micosoft CD-ROM