struts2.Начало.
Вечная проблема как назвать тему.Может и не красиво,не судите строго.Ладности,поехали.
Скачать библиотеки фреймворка можно по ссылке http://struts.apache.org/download.cgi Версия доступная на данный момент — 2.2.1.1. Так как нам в принципе нужна только папка lib(в ней хранятся библиотеки), то качаем Source. Распаковываем архив с фреймворком.
Получили всё что нам нужно и переходим к яве. Запускаем эклипс EE-версии и создаём новый Dynamic Web Project
В поле «Project Name» впишем название проекта. Я назову свой «FirstProject». Кликаем «Next». Попадаем на диалог подключения библиотек в проект. Он нам пока что не нужен,по этому снова кликаем «Next». Здесь Можно изменить имя корневой папки проекта и корневую папку веб-контента,но самое главное — здесь надо поставить галку «Generate web.xml deployment descriptor» если она не стоит. файл потом можно и вручную написать,но уж пускай ява сама сделает хоть немногое). Всё,теперь можно нажимать «Finish». Получили вот такую структуру проекта:
Теперь чего к чему. Когда сервер получает и\или запускает приложение,он ищет в директории WebContent/WEB-INF файл web.xml. файл web.xml — основной дескриптор(описатель) приложения.в нём прописываются все подключяемые фреймворки и их параметры а так же страница загружаемая первой. Это обычный XML-файл.
В Папке lib должны лежать библиотеки,необходимые для работы приложения. Ну и папка src для классов обработки.
тэкс.Теперь импортируем в папку lib необходимые библиотеки struts2.
Нам понадобятся:
- commons-fileupload-1.2.1.jar
- commons-io-1.3.2.jar
- commons-logging-1.1.jar
- freemarker-2.3.13.jar
- ognl-2.6.11
- struts2-convention-plugin-2.1.6.jar
- struts2-core-2.1.6.jar
- xwork-2.1.2.jar
Версии библиотек могут отличаться.
для того чтобы импортировать библиотеки нажимаем правой кнопкой мыши п опапке lib, и выбираем в появившемся меню пункт «Import». Появится окно:выбираем пункт «File system». нажимаем «Next». Появится следующее:кликаем на кнопке «Browse…» и выбираем путь к папке lib struts2.(Ту которую качали и разархивировали). В ней выбираем нужные нам библиотеки и нажимаем Finish. Библиотеки импортированы и доступны внутри приложения.
Далее необходимо объяснить серверу,что мы будем использовать struts2. Делается это в файле web.xml.
внутри тега web-app нужно написать следующее:
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
Здесь мы объявляем фильтр struts2.ключевым значением является класс фильтра — FilterDispatcher. Это как раз тот класс-контроллер,о котором написано в прошлой статье. Далее мы описываем маппинг этого фильтра( то есть на какие адреса(запросы) этот фильтр будет распространятся) на все запросы к текущему приложению. Так же опишем какую страницу надо отображать первой. Находиться она должна в папке WebContent
создадим её там. Правой кнопкой по папке -> New -> JSP File . В поле «File Name» введем index.jsp и кликнем Finish. Откроется редактор кода JSP-страниц. JSP-страница представляет собой ту же HTML-страницу,с той лишь разницей,что в ней можно писать java-код и обрабатывать специфические объекты\переменные\теги о чём свидетельствует:
Напишем простенькое приложение суть которого, прочитать имя пользователя введённое в TextField и в зависимости от результата перейти на нужную страницу
для того,чтобы работать со struts, надо в jsp подключить тэги стратса. в заголовке напишем следующее:
<%@taglib uri=»/struts-tags» prefix=»s» %>
Этим мы подключаем библиотеку тэгов struts-tags и указываем,что все тэги которые будут иметь префикс s будут обрабатываться стратсем
далее в body нам надо завести форму,к которой будет привязан action и внутри формы описать textfield и кнопку отправки.Так и сделаем.Внутри body пишем:
<s:form action=»readFormAction»>
Enter Login: <s:textfield name=»userName»/>
<s:submit value=»Check» />
</s:form>
здесь мы завели action «readFormAction», поле textFileld и присвоили ему имя userName и завели кнопку отправки.
Так заведём класс,который будет обрабатывать эту форму.в папке src создаём новый package и назовём его my.project.action и объявим внутри него класс UserLinkAction. Классы обрабатывающие экшены должны лежать в пакете с окончанием action и заканчиваться на LinkAction. Далее внутри класса опишем приватное поле userName и сгенерируем для него геттер и сеттер(сочетание клавиш Alt+S+R). Так же создадим метод readForm в котором будем обрабатывать форму.
Листинг класса:
package my.project.action; import com.opensymphony.xwork2.ActionSupport; public class UserLinkAction extends ActionSupport { private static final long serialVersionUID = -7189960659827964206L; private String userName; //метод обработки введённой информации public String readForm() { if(getUserName().equals("admin")) return "success"; else return "error"; } public void setUserName(String userName) { this.userName = userName; } public String getUserName() { return userName; } }
теперь,для того,чтобы фреймворк мог обработать action, нам надо завести файл конфигурации. Называться он должен struts.xml и лежать в корне папки src.
для начала содержимое файла:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" extends="struts-default"> <action name="*Action" method="{1}" class="my.project.action.UserLinkAction"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>
это простой XML-файл с подключенным DOCTYPE. Корневой элемент <struts> описывает пакет работы приложения и внутри пакета описывает action-методы и варианты результата.
Рассмотрим элемент action подробнее. Рассмотрим атрибуты:
class=»my.project.action.UserLinkAction» — какой класс приложения содержит методы обработки данного экшена.
name=»*Action» — имя action который будет вызываться из JSP-страницы. *Action означает,что имя экшена может быть любым,но заканчиваться обязано на Action. в нашем случае имя экшена — readFormAction.
method = «{1}» — метод,который обрабатывает экшен. «{1}» означает,что класс UserLinkAction должен содержать метод,который имеет имя как строка вместо звёзочки. То есть мы имеем экшн readFormAction,следовательно метод в классе должен называться readForm.
внутри элемента <action> мы видим два элемента <result>. Они описывают результат отработки методов экшена. То есть в классе мы вернули строку success,следовательно отработает result с именем success и вызовет страницу succsess.jsp, в противном случае мы возвращаем строку error и теперь будет работать result с таким именем и отправит нас на страницу error.jsp.
Внутри элемента <result> прописан полный путь к вызываемой странице. он у нас равен «/» следовательно страницы success.jsp и error.jsp должны лежать в корне WEB-проекта коим является папка WebContent. Там и создадим их.
Для проверки на странице success.jsp впишем в body <h2>Holaaa!! Admin comes!</h2> , a на error.jsp — <h2>Ouch!! You are not admin!</h2>
теперь,чтобы запустить проект,надо на папке с названием проекта щёлкнуть Правой кнопкой, выбрать пункт Run As -> Run On Server
появится окно с выбором сервера:
для того,чтобы ява больше не спрашивала,на каком сервере нам запускать ставим галку «Always yse this server when running this project» и жмём финиш. Ява придеплоит приложение на сервер и запустит его.
далее покажется страница:
введём имя пользователя и перейдём на страницу в зависимости от введённой информации:
Ну вот вобщем-то и всё:)
Reblogged this on progerblog.