Как стать автором
Обновить

Повесть о том, как я «воевал» с xhtml+jspx+tomcat6

Время на прочтение5 мин
Количество просмотров3.3K
Доброго времени суток.

В данной статье я бы хотел рассказать о разработке своего первого стартапа, а так же о том, как я потратил 3 часа в пустую из-за своей самоуверенности недостатка знаний.

Предисловие


Честно признаться у меня давно «чесались» руки написать что-нибудь, и как вы понимаете, я не имею в виду никому не нужные университетские лабы, а то, что будет полезно как профессионалам ИТ сферы так и рядовым пользователям. И вот, некоторое время назад, мы: я (кодер) и два моих боевых товарища (верстальщик и сисадмин), решились начать работу над своим первым стартапом.

Начало разработки


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

Дальше — верстка. Наш верстальщик — человек очень строгих понятий о стандартах: если что-то не соответствует — отправляется на помойку. «Только XHTML» — сказал он мне, и я был не против, скорее даже за, хотя на тот момент я совершенно не представлял, что меня ждет впереди. Пока шла работа над версткой — я занялся ядром.

Первые «камни»


Думаю, следует отметить, что до этого я писал под html и файлы шаблонов создавал как *.jsp, но прекрасно представлял, что такое xhtml и чем они отличаются. В итоге я подумал: «Если xhtml — то правильней создавать *.jspx страницы» — и, так и сделал. Как раз в это время верстка была готова: я получил html-файл с ресурсами.

Я надеялся задать высокий темп со старта, поэтому быстро скопировал разметку в jpsx файл, кое-где его поправил, скопировал ресурсы и запустил tomcat в надежде увидеть всю красоту, однако tomcat выругался на меня ошибкой со стектрейсом, какого я в жизни не видел. Я спросил у Google’а — «Google не ответил мне, качая головой». Хотя нет — он конечно же ответил — только это мне не помогло. Я еще потыкался вслепую, поменял то, удалил это — не помогало, «котик» упорно засыпал меня стектрейсами. Тут я сдался, нет, не совсем, просто понял, что наверное все-таки стоит почитать литературу о jspx.

В итоге я нашел следующие ошибки:

1. DOCTYPE
Вместо привычной для меня строчки в начале документа
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Нужно пользоваться специальным тэгом
<jsp:output doctype-root-element="html" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" omit-xml-declaration="true"/>


2. Escaped Chars
На странице присутствуют textarea тэги, внутри которых html код, и я как то совсем забыл, что символы < и > нужно преобразовать к < и > соответственно, ну и все остальные естественно.

3. CDATA
Используется, когда необходимо выделить символьные данные внутри xml документа, например, стили, которые не вынесены в отдельный файл:

<style type=”text/css”>
<![CDATA[
input {...} /* стили тут */
]]>
</style>


4. Разметка
В некоторых местах у одиночных тэгов забыл поставить / вконце
например
<img src="1.gif" width="10" height="10">

вместо
<img src="1.gif" width="10" height="10"/>


5. Директивы
Вместо
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

необходимо использовать
<jsp:directive.page contentType="text/html; charset=UTF-8"/>


Все эти ошибки ломали структуру документа, парсер не мог его обработать и с чистой совестью выбрасывал исключение.

Исправив все эти ошибки, и запустив tomcat, я наконец-то увидел как браузер (FF 3.6.*) отобразил страницу.

Однако, я рано обрадовался.

Неожиданность


После последнего затыка разработка пошла живее, мы уже практически вышли на финишную прямую. Для теста я установил все основные браузеры: FF, Opera, Safari, Chrome, IE. Хотя стоп, IE конечно уже был предустановлен. И кстати он как раз и испортил всю малину в последний момент.

Для справки (лирическое отступление): у меня стоит любимая старушка xp sp3 — в ней IE6, да я знаю, что это вообще древность, но не было такой уж прямо необходимости апгрейдить его до 7й или 8й версии.

IE я в принципе никогда не пользуюсь — только для тестирования кроссбраузерности. По непонятным для меня причинам, когда я в очередной раз решил проверить как работает приложение в IE — я увидел сообщение «IE не может отобразить страницу». Я немного удивился, как это он не может отобразить страницу «http:⁄⁄localhost⁄». Попрыгав с бубнами — я так ничего и не добился. Ослик бодро продолжал мне показывать сообщение «IE не может отобразить страницу». Ну, осёл он и в Африке осёл.

Я плюнул на IE, тем более когда получил верстку — мой товарищ клялся и божился что в IE6-9 все отображается идеально. И это была моя ошибка.

Прошло несколько дней, разработка все также шла ровно, без заминок. Мне просто стало интересно — почему не работает IE, у меня прямой выход в интернет, без проксей, настроек никаких нет. Я полез гуглить — оказалось, что я не единственный с такой проблемой. Пара советов не помогла, но я увидел следующий — «сбросить все настройки». Я так и сделал. И, о чудо, сей замечательный браузер стал грузить и отображать страницы.

Я тут же решил проверить и попробовал зайти на свое приложение, на localhost. Немного зависнув IE предложил мне сохранить файл. Я подумал, что это глюк, нажал отмена, попробовал зайти в FF, Opera и так далее — все остальные браузеры отображали страницу. Я снова попробовал зайти через IE, и опять увидел предложение сохранить файл. Сохранил, открыл через блокнот — и увидел разметку страницы. Попросил проверить товарищей — у них ситуация была такая же.

Изучив проблему, я получил следующее:
IE6, IE7, IE8 — предлагали сохранить файл
IE9 — нормально отображал страницу

Заподозрив неладное, я открыл в своем IE6 ту верстку, которую мне прислал наш верстальщик, html-файл. IE нормально отобразил страницу. Я начал искать отличия между этой версткой, и своей в jspx-шаблоне, и нашел, в самом начале, это был content-type:
— content-type моего товарища: text/html
— мой content-type: application/xhtml+xml

«Какого...?» — подумал было я, но решил попробовать и поставить content-type: text/html. На самом деле это принесло свои плоды — все браузеры стали работать одинаково — отображать пустую страницу. Даже IE. Дальше стандартная схема: Firefox+Firebug, перезагрузил страницу: в консоли пусто, никаких ошибок, внимание привлекла структура документа: внутри ничего не было, пустота. Я «попросил» у FF исходный код страницы: там внутри была вся необходимая структура документа. Я ее сохранил и начал снова искать отличия от той, что была в шаблоне на сервере.

Внимание привлекла следующая строка:
<script type="text/javascript" src="/js/jquery-1.5.1.min.js"/>

Хотя в шаблоне на сервере она выглядела так:
<script type="text/javascript" src="/js/jquery-1.5.1.min.js"></script>


И на самом деле такое “преобразование” было применено ко всем тэгам
И кроме того, с тэгами , внутри которых было пусто — была такая же беда.

Решение пришло само собой. Обернуть эти тэги с помощью <![CDATA[]]>. Таким образом мы заставим сервер отдавать то, что внутри именно в таком же виде без преобразований, получаем:

<![CDATA[<script type="text/javascript" src="/js/jquery-1.5.1.min.js"></script>]]>


Сохранил, перезапустил сервер, попробовал зайти. FF отобразил страницу. Скрестив пальцы, я запустил IE. И он тоже отобразил страницу так как она должна выглядеть. После этого я проверил во всех остальных основных браузерах — все работало как и должно.

В качестве заключения


Хотелось сделать как лучше, быстрее, чтобы не тратить время на изучение узких мест слабо знакомой технологии — в итоге получилось как всегда. Моя самонадеянность привела в данной ситуации к негативным последствиям. И хорошо, что ошибки были замечены на этапе разработки.
Теги:
Хабы:
Всего голосов 13: ↑8 и ↓5+3
Комментарии15

Публикации

Ближайшие события