Технология Common Gateway Interface (CGI)

Автор работы: Пользователь скрыл имя, 26 Апреля 2011 в 17:33, контрольная работа

Описание

Взаимодействие между пользовательской интерактивной HTML-страницей (среда браузера, клиент) и сервером обслуживается протоколом CGI. При передаче данных от клиентской формы серверу, последний кодирует входные данные, а сценарий CGI декодирует их, а затем функционально обрабатывает и возвращает выходные данные браузеру.

Работа состоит из  1 файл

теория - копия.doc

— 96.50 Кб (Скачать документ)

     В новостной HTML-странице располагается  некоторая подпрограмма-функция test_copyright( ) языка JavaScript, несущая информацию об авторских правах. Выполнение этой подпрограммы возлагается на сценарий CGI. CGI программа считывает файл новостей с диска, сравнивает информацию об авторских правах с образом copyright и генерирует на лету свой JavaScript скрипт test2( ), который непосредственно и выполняет вывод в окно браузера.

     Загрузка CGI ресурса выполняется с помощью атрибута SRC элемента SCRIPT: <SCRIPT language="JavaScript" src="../cgi-bin/jscgi_prog.cgi"></SCRIPT>.

     Расссмотрим сначала код HTML-страницы:

<html>

<head>

<style type="text/css">P.just{text-align: justify;}</style>

<script>

var name_copyright='Copyright 2002 The Web Production';

function test_copyright(){return name_copyright;}

</script>

<SCRIPT language="JavaScript" src="../cgi-bin/cgi_programming/jscgi_prog.cgi"></SCRIPT>

</head>

<body  bgcolor='#00007b'  text="white"  leftmargin='0'>

<center><h2>News Bulletin</h2></center><hr>

<table  border="0" cellspacing="0" cellpadding="20" width="800">

<tr>

<td align="left" valign="top"  width="400">Examples examples

examples  examples  examples  examples ......</td>

<td  bgcolor='#0000aa' align="left" valign="top" width="400">

<p class="just"><font color='#ffffff' size='4'>

<script>test2();</script>

</font></p></td>

</tr>

</table>

</body>

</html>

     Как видим в теле HTML-страницы располагается  подпрограмма-функция test_copyright( ). Возвращаемый параметр этой функции содержит copyright. Образ этого copyright находится в одной из переменных сценария CGI:

#!/usr/bin/perl

print "Content-Type: text/html\n\n";

$path = "c:/apache/htdocs";

$FILE_NEWS=$path.'/txt/bulletin.txt';

open(LIST,"<$FILE_NEWS");

@lines=<LIST>;

close(LIST);

$txt=join("",@lines);

$txt=~s/\n//g;

$param='Copyright 2002 The Web Production';    #patteren

print "function test2(){".

"var m1= test_copyright();".

"if(m1==\"$param\"){document.write(\"$txt\");".

"document.write(\"<br><br>$param<br>\")}else{err();}}";   

exit;

     Функция test2( ) языка JavaScript, размещается в  теле CGI-скрипта, а вызывается на выполнение при загрузке HTML-страницы. В процессе выполнения сценария CGI, последний анализирует информацию, возвращаемую подпрограммой-функцией test_copyright( ) и сравнивает ее, с помощью скрипта test2( ), с образом copyright в переменной $param. В зависимости от совпадения или несовпадения образа с copyright, новостная информация публикуется или возвращается ошибка JavaScript. Ошибка JavaScript, равносильная запрету на публикацию, возникает в двух случаях: 1) если вы измените или удалите copyright из тела HTML-страницы, 2) если вы попытаетесь удалить подпрограмму-функцию.

     Отметим, что как и прежде, реализуется  идеология разделения CGI-программы  и дизайна.

     Из  кода HTML видно, что атрибуты текста новостей могут быть изменены независимо от сценария CGI и независимо от скрипта языка JavaScript. Разумеется, мы здесь представили упрощенный вариант скриптов, преследуя цель наглядности излагаемого материала. Понятно, что техника CGI-JavaScript программирования, позволяет создать весьма изощеренные средства защиты и ограничения доступа. 

     4. CGI-Java программирование.

     Пожалуй CGI-Java технология является наиболее перспективной  и наиболее интересной в области Web-программирования. Несмотря на выросшую популярность языка Java, CGI остается фактическим стандартом взаимодействия в модели клиент/сервер. Непоколебимость CGI объясняется просто. Во-первых протокол HTTP является основным механизмом передачи информации. Этот механизм положен в основу WWW. Во-вторых, это мощность языка Perl, который чаще всего используется в CGI-программировании. Perl изначально задумывался как высокоуровневый кросс-платформенный язык системного программирования [4]. Perl 5 работает практически везде: Unix, Linux, BSD, Windows, .NET, Sun, Macintosh. В Perl поддерживается интерфейс к базам данных SQL и постреляционным СУБД типа Cache' [5]. При желании в Perl можно написать программу, в которой будет реализован практически весь арсенал приемов объекто-ориентированного программирования [6]. И наконец, в третьих, программе на Java можно передать всю необходимую информацию от CGI-сценария с помощью потоков ввода-вывода. И наоборот, программы на Java сами могут передавать информацию в сценарии CGI, например, можно "заставить" апплет записывать информацию, полученную из формы в файл на диск.

     Рассмотрим  примеры CGI-Java программирования в рамках обозначенной темы настоящей публикации.

Задача.

     Автоматизировать  процесс смены новостной информации (текстовой) в поле статической HTML-страницы и обеспечить вывод текта в графическом виде в целях противодействия несанкционированному копированию новостной информации.

Решение.

     В новостной HTML-странице располагается  контейнерный элемент APPLET, где атрибут CODE задает имя загружаемого ресурса Java-программы (апплета). Java-апплет, в процессе выполнения, с помощью метода DataInputStream( ) создает поток ввода для ресурса CGI-сценария. CGI-сценарий выполняет выборку текстовой информации из SQL БД, построчно форматирует полученный текст и в потоке вывода построчно передает апплету. Апплет с помощью методов paint( ) и dawString( ) также построчно отображает текст в окне браузера в графической форме.

     Включение апплета в документ HTML реализуется  следующим образом: <APPLET CODE="cgi_java.class" codebase="/java_applets/" WIDTH="400" HEIGHT="330"></APPLET>,

где codebase - имя  каталога, в котором содержится файл cgi_java.class.

     Рассмотрим  сначала Java-апплет:

import java.awt.*;

import java.net.*;

import java.io.*;

import java.awt.Graphics;

import java.awt.Color;

import java.awt.Font;

import java.awt.FontMetrics;

import java.lang.*;

import java.net.MalformedURLException;

public class cgi_java extends java.applet.Applet{

private TextArea  fileArea;

Font  titleFont;

FontMetrics titleFontMetrics;

String line;

int num;

String text[ ] = new String[100];

public void init() {

    fileArea = new TextArea();

try

    {

    URL file = new URL(getDocumentBase(), "/cgi-bin/java_cgi.cgi");

    BufferedInputStream my_buffer = new BufferedInputStream(file.openStream());

    DataInputStream in =  new DataInputStream(my_buffer);

    num=0;

    while ((line = in.readLine()) != null){

        fileArea.appendText(line);

        fileArea.appendText("\n");

         text[num]=line;

         num++;

         }

        in.close();

     } catch(MalformedURLException e) {  }

      catch(IOException e) {  }

    }

public void paint(Graphics g) {

                titleFont = new java.awt.Font("Courier", Font.BOLD, 80);

                titleFontMetrics = getFontMetrics(titleFont);

                g.setColor(Color.white);

                g.fillRect(0,0,600,500);

      g.setColor(Color.cyan);

               g.setFont(titleFont);

      g.drawString("Copyright",0, 80);

      g.drawString("©  2002",30, 180);

      g.drawString("TheWeb",30, 280);

      g.drawString("Production",0, 380);

                titleFont = new java.awt.Font("Courier", Font.BOLD, 12);

                titleFontMetrics = getFontMetrics(titleFont);

                g.setColor(Color.black);

                g.setFont(titleFont); 

                int j, x=10, y=40, dy=15;

                for (j=0; j < num; j++){ 

                  g.drawString(text[j], x, y);

                          y=y+dy; 

                          }

                }

}

      В этом апплете, для реализации построчного  чтения выходного потока CGI-сценария, мы использовали метод языка Java - readLine( ). Для того, чтобы этот метод работал, необходимо предварительно определить собственно поток DataInputStream(my_buffer), а перед этим для чтения информации из открытого потока ввода, следует сначала создать буфер: my_buffer. В процессе чтения строк, последние заполняют массив text[ ]. Графический вывод строк в браузер обеспечивает метод Paint( ) с помщью оператора g.drawString(text[j], x, y).

     CGI программа как всегда лаконична:

#!/usr/bin/perl

print "Content-type: text/plain\n\n";

require 'globalvar.pm';

$table_name="news_arjive";

$dbh = DBI->connect("DBI:mysql:$database:$host:$port",$login,$pass);

$sth = $dbh->prepare("SELECT  text_news  FROM  $table_name  WHERE  id = 1");

$sth->execute;

$txt = $sth->fetchrow_array ();

$sth->finish;

$dbh->disconnect;

$txt=~s/\n/ /g;

$txt.=" ";

$start=0;

$my_leng=64;

$str="-";

while($str){

$str=substr($txt,$start,$my_leng);

$etc_leng=rindex($str," ");

$str=substr($txt,$start,$etc_leng);

$start=$start + $etc_leng;

print "$str\n";}

exit;

      Переменные $database, $host, $port, $login и $pass, для доступа  и открытия БД, загружаются в сценарий с помощью команды require из модуля globalvar.pm. Длинна строк $my_leng не превышает 64 символов. Образом для выделения  подстрок является пробельный символ " ". Циклическое формирование строк и создание стандартного потока вывода, осуществляется всего шестью строками кода. На Java такое трудно реализовать. Зато на Java легко реализуется графическая форма представления текста. Графический вывод текстовой информации, преследует цель противодействовать несанкционированному копированию новостных данных. Чтобы усилить защиту против копирования, текст выводиться на фоне "водяных знаков" - рис. ... . Теперь потенциальному взломщику потребуется выполнить копирование экрана, обработку полученного изображения в PhotoShop, преобразование графики в текст с помощью FineReader, редактирование текста (FineReader выполняет распознавание текста не на все 100% ).

     В заключение этого раздела приветем код HTML-страницы:

<HTML>

<HEAD>

<TITLE>TheWebProduction</TITLE>

</HEAD>

<BODY>

<table align="left" border="1">

<tr><td  align="center">

<h1>Result of CGI-Java programming:</h1><br>

<b>Copyright (c) 2002 TheWebProduction</b>

</td></tr>

<tr><td  valign="top">

<APPLET CODE="lastcgi_3.class" codebase="/java_applet/"  WIDTH="520" HEIGHT="420">

</APPLET>

</td></tr>

</table>

</BODY>

</HTML>

     Последний HTML-код показывает независимость CG-Java программы от дизайна. 

     5. CGI-Flash программирование.

     Появление технологии Flash компании Macromedia в значительной степени преобразило мир Web. Flash, без особой шумихи (что было свойственно распространению в Web языка Java), быстро занял свою нишу и эволюционировал от внешних plug-in к встроенным в браузеры IE и NN и является в настоящее время полноценной частью инструментов Web-дизайна и Web-программирования. Применение Macromedia Flash избавляет от проблемы совместимости между браузерами, Flash одинаково работает как в IE, так и в NN. В Macromedia Flash 5 применяется специальный событийно-управляемый язык, который поддерживает условные переходы, циклы, массивы, функции и классы, которые можно наследовать. Процедуры ввода-вывода данных, как мы увидим ниже, могут быть реализованы с помощью всего лишь одного оператора этого языка.

Информация о работе Технология Common Gateway Interface (CGI)