Запуск JavaScript из Ant

Оказывается, к Ant прикручена такая задача как script. Она позволяет кроме прочих BSF языков выполнять еще и JavaScript. В коде build.xml это выглядит следующим образом:

Выполнение JavaScript описанного прямо в коде задачи:

<script language="javascript">
  print("test");
</script>

Выполнение скрипта из файла:

<script language="javascript" src="test.js">
</script>

JavaScript выполняется при помощи движка Rhino.

Ссылки:
Документация про JavaScript движок Rhino
Документация про задачу script

Опубликовано в: JavaScript, Все записи | Помечено , , , | Оставить комментарий

Условная установка свойств в Ant

В Apache Ant есть такая возможность — устанавливать свойства только если какой-либо ресурс доступен. Например, если класс представлен в classpath, или файл существует в файловой системе. Для этих целей можно использовать комбинацию других задач, а можно обойтись одной: available.

Задача на проверку существования папки будет выглядеть так:

<available file="bin/"
  type="dir" property="folder.bin"/>

Если папка bin/ представлена в файловой системе — то свойство folder.bin будет выставлено в true, а если нет, то оно вообще не будет выставлено.

Задача на проверку существования файла будет выглядеть так:

<available file="settings.properties"
  type="file" property="file.properties"/>

Если файл settings.properties представлен в файловой системе — то свойство file.properties будет выставлено в true, а если нет, то оно также как и предыдущее не будет выставлено.

Аналогично можно поступить и с классами:

<available classname="com.mysql.jdbc.Driver"
  property="mysqlDriver"/>

В данном случае, если класс com.mysql.jdbc.Driver доступен к использованию, то свойство mysqlDriver будет инициализировано.

На эту тему есть еще одна заметка под названием Условное выполнение задач в Ant.

Ссылки:
Документация по задаче Available

Опубликовано в: Все записи | Помечено , | Оставить комментарий

Настройка источников данных в WAR

Оказывается, при разработке сервлета подключающегося к источнику данных совсем не обязательно писать код вытаскивающий данные для подключения к этому источнику. Всё подключение можно оформить через дескриптор развертывания (web.xml) и контекст (context.xml). В качестве источника данных может выступать, например, реляционная база данных.

Прежде всего, потребуется немного отредактировать build.xml упаковывающий наше Java-приложение в WAR-файл. Задача для упаковки будет такой:

<war destfile="myapp.war"
  webxml="config/web.xml"
  basedir="static/">
  <lib dir="libs/" />
  <classes dir="bin/"/>
  <fileset dir="static/"/>
  <metainf file="config/context.xml" />
</war>

Жирным выделена строчка с которой раньше мне сталкиваться не приходилось.

Файл контекста context.xml будет выглядеть так:

<Context>
  <Resource name="jdbc/mytable"
    auth="Container"
    type="javax.sql.DataSource"
    maxActive="100"
    maxIdle="30"
    maxWait="10000"
    username="superUser"
    password="superPassword"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/mytable"/>
</Context>

Корневой элемент Сontext должен содержать в себе один или несколько элементов Resource. Данные для заполнения параметров подключения я подобрал из головы — думаю у любого PHP-программиста это тоже получится сделать.

В файл web.xml следует добавить указатель на ресурс:

<resource-ref>
  <description>MySQL Datasource example</description>
  <res-ref-name>jdbc/mytable</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

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

import javax.annotation.*;
import javax.sql.*;
import java.sql.*;

После этого классу можно добавить приватное поле:

@Resource(name="jdbc/mytable")
private DataSource ds;

из которого потом можно получить соединение с базой данных:

Connection c = ds.getConnection();

На самом деле подключаться к базам данных в Java очень просто, для этого можно использовать стандартный интерфейс под названием DriverManager. Поэтому заметка Как подключиться к базе данных в Java в данном случае будет интересна для сравнения.

Опубликовано в: Все записи | Помечено , , , , , | Оставить комментарий

DevConf 2012

Уже началась подготовка к DevConf 2012 и даже открыта регистрация участников. Конференция пройдет 9 июня в Москве.

Среди докладов про JavaScript:
Дмитрий Вислов собирается рассказать про оптимизацию процесса создания сайта на этапе верстки. Если верить описанию доклада — будет все, от выбора офиса для веб-студии до технических особенностей верстки на потоке.

Сергей Пугачёв из Microsoft будет рассказывать про JavaScript и HTML5 на платформе Windows 8. Его доклад называется «Создание приложений для Windows 8 с помощью HTML5 и JavaScript».

Пока докладов не много, но время до лета еще есть — будем ждать и надеяться.

Опубликовано в: Все записи, Мероприятия | Оставить комментарий

Настраиваем индексные файлы в web.xml

Практически все бывалые разработчики веб-сайтов знают как указать веб-серверу Apache индексный файл для каталога. Для этого нужно в файле .htaccess указать:

DirectoryIndex somepage.html

А если не указывать, то настройка останется по умолчанию — index.html и т.д. с основанием на index.

При разработке веб-приложений на основе спецификации Java-сервлетов аналогом .htaccess является файл web.xml. Для настройки индексных файлов туда следует добавить следующий код:

<welcome-file-list>
  <welcome-file>/somepage.html</welcome-file>
</welcome-file-list>
Опубликовано в: Все записи | Помечено , , | Оставить комментарий

РИТ++ 2012 уже близится!

Как и в прошлогоднем феврале уже начинается подготовка к конференции Российские Интернет Технологии. В тот раз конференция была в общем довольно насыщенной, хотя и не очень оригинальной. Даты сделали со второго по третье апреля. На данный момент мероприятие стоит 15 тыщ, но как в прошлом году жесткой динамики с ценами я не наблюдаю.

Набор гуру в общем такой же как в прошлом году, ну может нескольких мелких, не очень гуристых гуру убрали. Секции тоже остались прежними — любимый клиент-сайд остался на месте.

В анонсе обещали драку между разработчиками браузеров. Будем надеяться, что позовут не только Вадима Макеева (Opera) и Алекса Могилевского (Internet Explorer), но еще и кого-нибудь из разработчиков Firefox или Chrome.

Опубликовано в: Все записи, Мероприятия | Помечено | Оставить комментарий

Курсы для веб-мастеров и подмастерьев

Сегодня совершенно случайно наткнулся на новость о том, что на Факульте переподготовки специалистов СПбГПУ открываются вечерние курсы для веб-мастеров. Это действительно полезные курсы, т.к. их ведет не тетенька предпенсионного возраста, а Михаил Баранов, который регулярно выступает на конференциях типа Российских Интернет Технологий ну и вообще следит за ситуацией в веб-технологиях. Плюс, он уже не первый год занимается педагогической деятельностью.

В связи с тем, что я немного поздно узнал про это известие — часть курсов уже началась. Куда еще можно успеть:
Курс по JavaScript начнется 20 марта и будет полезен верстальщикам которым хочется уже перешагнуть через порог веб-мастера и стать Front-end разработчиками, ведь без знания JavaScript сейчас найти приличную работу становится все труднее и труднее.
Курс по PHP и MySQL начнется 9 апреля и в общем откроет дверь в мир Back-end разработки, которая по-прежнему остается одним из востребованных направлений работы.

Опубликовано в: Все записи, Мероприятия | Помечено | 1 Комментарий

Проверка пользователей через web.xml

Во многих веб-приложениях существует потребность в ограничении доступа к тем или иным ресурсам. Процесс проверки пользователей часто называют «авторизация» или «аутентификация». В ряде случаев эти понятия путают или используют как взаимозаменяемые, что строго говоря является ошибкой.

Если говорить упрощенно, то аутентификация это процесс проверки соответствия логина и пароля для пользователя в системе. Иными словами, система определяет присутствует ли в её справочнике такой пользователь.

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

Как это можно организовать в сервлете для Tomcat6?
Самый простой способ — использовать набор пользователей из файла tomcat-users.xml в убунте он обычно лежит по адресу:

/etc/tomcat6/tomcat-users.xml

Это простой XML-файл в который нужно добавить запись с новым пользователем:

<user username="lazy" password="123" roles="manager" />

В данном случае мы добавили в систему пользователя lazy с паролем 123 и назначили его manager.
Для того, чтобы изменения вступили в силу нужно перезагрузить Tomcat6.

Далее, в файл web.xml нашего веб-приложения нужно добавить следующие записи:

<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>default</realm-name>
</login-config>

В этом случае будет использоваться базовая авторизация.

Еще в web.xml должны оказаться следующие строки:

<security-role>
  <role-name>
    manager
  </role-name>
</security-role>

ими мы указываем, что доступ к ресурсу будет только у пользователей с ролью manager.

Ну и дополнительно нужно указать накладываемые ограничения:

<security-constraint>
  <web-resource-collection>
    <web-resource-name>Application</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>manager</role-name>
  </auth-constraint>
</security-constraint>

В результате к приложению смогут получить доступ только пользователи с ролью manager.

Говорят, на «боевых» серверах такие способы использовать не очень надежно. Впрочем, этот паттерн можно использовать при подключении других источников данных с пользовательской информацией.

Ссылки
Как сделать Realm в Tomcat6

Опубликовано в: Все записи | Помечено , , | Оставить комментарий

Настройка параметров контекста с помощью web.xml

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

Для установки нового параметра добавим в web.xml следующий код:

<context-param>
  <param-name>title</param-name>
  <param-value>My hello title!</param-value>
</context-param>

В результате, теперь в любом методе класса можно сделать так:

ServletContext context = getServletContext();
String title = context.getInitParameter("title");

На самом деле, ServletContext имеет еще целую коллекцию методов, но сейчас не о них.

Опубликовано в: Все записи | Помечено , | Оставить комментарий

Настройка страниц ошибок с помощью web.xml

Для публично доступного Java-веб-приложения важно настроить специальные страницы, которые отдаются в неординарных ситуациях. Например, пользователям будет не очень интересно смотреть стек-трейс. Как настроить страницы ошибок для кодов ответа 404, 500 и т.д.?

Для обычного Apache HTTPD сервера это будет выглядеть так — создать .htaccess и поместить туда инструкцию:

ErrorDocument 500 /500.html

А вот для веб-приложений на основе Java нужно редактировать XML. Итак, чтобы получить специально приготовленную страницу в случае возникновения ошибки 500 (Internal Server Error), в файл web.xml нашего приложения нужно добавить:

<error-page>
  <error-code>500</error-code>
  <location>/500.html</location>
</error-page>

В результате, на Internal Server Error будет выдаваться страница 500.html из корня приложения.

Для ошибки 404 (Not Found) нужно добавить к предыдущему коду:

<error-page>
  <error-code>404</error-code>
  <location>/404.html</location>
</error-page>

В результате, если страница не найдена — пользователи получат заранее приготовленную страницу 404.html из корня приложения.

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

<error-page>
  <exception-type>java.lang.Throwable</exception-type>
  <location>/500.html</location>
</error-page>
Опубликовано в: Все записи | Помечено , , | Оставить комментарий