Смекни!
smekni.com

Заголовок сообщения (стр. 3 из 3)

else: ret=ret+o.icon

ret=ret+'" border=0 width=18 height=16>

<a ref="'+o.absolute_url()

ret=ret+'">'+o.title_or_id()+'</a><br>'

# возвращаем результат - список файлов и количество найденных документов.

return ret,count

На языке DTML был написан документ, содержащий форму поиска, и отображающий результат действия скрипта.

Вызывается скрипт из DTML-документа при помощи следующего тэга:

<dtml-var "scr.site_search(PARENTS[0],'text to search',0)">

DTML-документ содержит JavaScript, переводящий фокус курсора в строку поиска:

<script>

document.searchform.search_expr.focus();

</script>

2.3. Реализация системы конференции

Система конференции была реализована с помощью технологии DOM, языка XML и скриптового языка Python.

Текст сообщений хранится в xml-файле, имеющего следующую структуру:

<?xml version="1.0" encoding="windows-1251"?>

<news>

<n>

<title>Заголовок сообщения</title>

<description>Содержание сообщения. </description>

</n>

………..

</news>

Этот xml-файл обрабатывается с помощью технологии DOM:

Вся обработка ведется с помощью скрипта, написанного на языке JavaScript:

Подключаем xml-файл:

function onLoad()

{

news = new ActiveXObject("Microsoft.XMLDOM")

news.async = false

news.load("news.xml")

if (news.parseError != 0) {

alert(news.parseError.reason)

return

}

Далее следует его обработка: Выводим заголовок сообщения:

function main() {

N = root.childNodes.length

str = ""

for (i=0; i <= N - 1; i++) {

curNode = root.childNodes.item(i)

str = str + "<li><a href='news.htm?" +

i + "'>" +

curNode.getElementsByTagName("title").item(0).text +

"</a>&nbsp;&nbsp;<i>" +

}

xmlnews.innerHTML = str

}

Выводим содержание сообщения:

function descr() {

curNode = root.childNodes.item(parseInt(id))

str = "<p><b>" +

curNode.getElementsByTagName("title").item(0).text +

"</b>&nbsp;&nbsp;<i>" +

curNode.getElementsByTagName("description").item(0).text +

"<p>"

str = str + "<p>[<a href='news.htm'>Все сообщения</a>]"

xmlnews.innerHTML = str

}

Добавление сообщений ведется скриптом, реализованном на языке Python. При добавлении сообщения:

1. Cкрипт считывает xml-файл.

2. Разбивает его на две части. Первая часть – заголовок xml-файла с тегом <news>. Вторая – оставшаяся часть xml-файла.

3. Формирует строку для добавления.

4. Производит конкатенацию следующим образом: первая часть файла+сообщение+вторая часть файла.

5. Записывает контент в xml-файл.

2.4. Реализация системы голосования на сайте

Система голосования аналогична системе конференции, за исключением того, что здесь в дополнение используется технология XSL, которая обрабатывает xml-файл. А с помощью технологии DOM поизводится подключение 2 файлов: xml и xsl следующим образом:

<script language="JScript">

<!--

var doc, st

// создаем 2 объекта ActiveX, являющихся обьектами DOM

doc = new ActiveXObject("Microsoft.XMLDOM")

st = new ActiveXObject("Microsoft.XMLDOM")

// синхронно обрабатываем их, загружая xml и xsl файлы

doc.async = false

st.async = false

doc.load("results")

st.load("result.xsl")

// если возникает ошибка при обработке, сообщеем о ней

if (doc.parseError == 0 && st.parseError == 0) {

XmlTreeMenu.innerHTML = doc.transformNode(st)

}

else {

XmlTreeMenu.innerHTML = "Error !"

}

//-->

</script>

2.5. Разработка и реализация методов защиты

HTML-документов, публикуемых на сервере Zope

Одной из задач курсовой работы являлась разработка и реализация методов защиты HTML-документов.

На основе анализа методов защиты HTML-документов, был предложен собственный метод защиты HTML-документов.

Схема защиты HTML-документа следующая:

1.Читаем содержимое HTML-документа

2. Каждый символ контента переводим в HEX-отображение:

Например,

if i=='6':

gg=hex(ord(i)) #Получаем hex значение символа

u=u+"%"+gg[2:] #Берем два последних значащих символа

Для решения проблемы кодировки русских символов использовалось прямое указание значений символов:

Например,

if i==а':

u=u+"%u0430"

3. Добавляем к контенту строку, содержащую закодированный скрип Java, запрещающий выделение и нажатие правой клавиши мыши:

<script language="JavaScript1.2">

<!--

var message="";

function clickIE() {

if (document.all) {

alert(message);return false;

}

}

function clickNS(e) {

if (document.layers||(document.getElementById&&!document.all)) {

if (e.which==2||e.which==3) {

alert(message);return false;

}

}

}

if (document.layers) {

document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}

else {

document.onmouseup=clickNS;document.oncontextmenu=clickIE;

}

document.oncontextmenu=new Function("return false")

// -->

document.oncontextmenu=new Function("return false")

function disableselect(e){

return false

}

function reEnable(){

return true

}

//if IE4+

document.onselectstart=new Function ("return false")

//if NS6

if (window.sidebar){

document.onkeypress=disableselect

document.onmousedown=disableselect

document.onclick=reEnable

}

</script>

<script language="JavaScript">

function goaway(evnt){

if (evnt.which == 0){

location.href = "blank.htm"

return false;

}

}

document.onkeypress=goaway;

</script>

4. Формируем JavaScript, который декодирует контент с помощью функции unescape(контент) - перевод из кода символа в символ “..”

Пример:

<script language=JavaScript>

m='Строка закодированных символов';

d=unescape(m);

document.write(d);

</script>

5. Запись контента в HTML-документ.

Метод реализован для поддержки браузерами Internet Explorer, начиная с версии 3.0, а также Netscape Navigator, начиная с версии 6.0.

2.6. Адаптирование разработанного программного обеспечения для поддерживаемого сайта

В качестве применения метода защиты HTML-документов, реализованы скрип на языке Python и интерфейс, позволяющие защищать документы, публикуемые на сервере Zope.

На вход скрипту поступает 2 параметра:

1) file - cсылка на файл, находящийся на машине клиента или в локальной сети;

2) idназвание документа после его публикации на сервере Zope.

Алгоритм работы скрипта может быть представлен следующим образом:

Публикация документа на сервере Zope в каталог, в котором находится скрипт:

container.manage_addFile(id,title="", content_type= "text/plain", file=file)

Получение доступа к содержимому документа.

Чтение содержимого HTML-документа

Посимвольный перевод контента в HEX-отображение(аналогично пункту 2.5.)

Добавление к контенту строки, содержащей закодированный скрип Java, запрещающий выделение и нажатие правой клавиши мыши (скрипт описан в пункте 2.5.)

Формирование JavaScript, который декодирует контент с помощью функции unescape(контент)-перевод из кода символа в символ “..”

Удаление загруженного документа:

container.manage_delObjects(id)

Публикация документа в закодированном виде на сервере Zope в текущий каталог:

container.manage_addFile(id, title="", content_type= "text/plain", file=t)

# t – текстовая переменная, где содержится зашифрованный текст

Возвращает в каталог, где находится скрипт:

if REQUEST is not None:

try: u=context.DestinationURL()

except: u=REQUEST['URL1']

REQUEST.RESPONSE.redirect('self.absolute_url()+'/manage_main')

Заключение

Таким образом, цель работы была достигнута. Все задачи для достижения поставленной цели были успешно решены:

· Модернизированы разделы сайта “Программирование” и ”Курсовые работы”.

· Реализована система поиска.

· Реализована система конференций.

· Реализована система голосования на сайте.

· Изучены возможности скриптового языка Python.

· Разработаны и реализованы методы защиты HTML-документов, публикуемых на сервере Zope.

· Адаптировано разработанное программное обеспечение для поддерживаемого сайта.

· Поддержка сайта осуществлялась в течении учебного года.

В результате разработки персонального сайта преподавателя были получены практические навыки по использованию следующих технологий:

- XML

- XSL

- DOM 1.0 и 2.0

И языков:

- HTML

- DTML

- Python

- Java Script

Результат работы можно посмотреть по адресу http://mf.grsu.by/home/livak.

Список использованной литературы

1. Дидье Мартин, Никола Озу, Брюс Пит и др. XML для профессионалов. - ЛОРИ - Москва, 2001. – 865 стр.

2. Официальный сайт организации World Wide Web Consortium // www.w3c.org

3. Сайт Нижегородского Государственного Университета // www.xml.nsu.ru

4. Didier Martin. XML for beginners. - Wrox Press. - Birmingham, 2002. – 597 стр.

5. Сайт издательского дома Wrox Press // www.wrox.com

6. Сайт компании Digital Creations // www.zope.org