|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Простое приложениеПриведенный в главе «Java Server Pages» пример распределенного приложения входа в систему с проверкой логина и пароля можно легко переписать с использованием технологии Struts. Следует обратить внимание на то, что использование технологии Struts упрощает организацию приложения, поэтому диаграмма классов будет выглядеть проще. Рис. 1. Диаграмма взаимодествия классов и JSP в Struts-приложении. /* пример # 1: Action класс: LoginAction.java */ package by.bsu.famcs.jspservlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages;
public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ActionMessages errors = new ActionMessages();
LoginForm actionForm = (LoginForm)form; String login = actionForm.getLogin(); String password = actionForm.getPassword(); if (login!= null && password!= null) { if (LoginLogic.checkLogin(login, password)) { return mapping.findForward(" success "); } else { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.login.incorrectLoginOrPassword")); saveErrors(request, errors); } } //загрузка формы для логина return mapping.findForward(" loginAgain "); } } Класс LoginForm, объект которого представляет форму, соответствующую странице ввода логина и пароля, выглядит следующим образом: /* пример # 2: класс хранения информации, передаваемой из login.jsp: LoginForm.java */package by.bsu.famcs.jspservlet; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping;
public class LoginForm extends ActionForm { private String login; private String password; //очищение полей формы public void reset(ActionMapping mapping, HttpServletRequest request) { super. reset(mapping, request); this. password = null; } public String getLogin() { return login; } public String getPassword() { return password; } public void setLogin(String login) { this. login = login; } public void setPassword(String password) { this. password = password; } }Класс LoginLogic, представляющий бизнес-логику, не был изменен. Его необходимо перенести в соответствующую папку данного проекта Struts. Класс ConfigurationManager изменился в сторону уменьшения атрибутов, так как часть информации хранится теперь в struts-config.xml./*пример # 3: служебный класс, извлекающий из файла config.properties package by.bsu.famcs.jspservlet.manager; import java.util.ResourceBundle;
public class ConfigurationManager { private static ConfigurationManager instance; private ResourceBundle resourceBundle; private static final String BUNDLE_NAME = "config"; public static final String DATABASE_DRIVER_NAME = "DATABASE_DRIVER_NAME"; public static final String DATABASE_URL = "DATABASE_URL";
public static ConfigurationManager getInstance() { if (instance == null) { instance = new ConfigurationManager(); instance.resourceBundle = ResourceBundle.getBundle(BUNDLE_NAME); } return instance; } public String getProperty(String key) { return (String)resourceBundle.getObject(key); } } Далее приведено содержимое файла config.properties: ############################### ## Application configuration ## ############################### DATABASE_DRIVER_NAME=com.mysql.jdbc.Driver DATABASE_URL=jdbc:mysql://localhost:3306/db1?user= root&password=pass JSP-страницы были изменены следующим образом: <%--пример # 4: стартовая страница в оформлении Struts:index.jsp --%><%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Index JSP</title> </head> <body> <a href="login.do">Controller</a> </body></html> <%--пример # 5: страница запроса логина и пароля:login.jsp --%><%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%-- Подключение библиотек тегов Struts--%> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html:html locale="true"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <%-- вывод сообщения из.properties проекта --%> <title><bean:message key="jsp.login.title"/></title> <%-- генерируется тег <base> с атрибутом href, в котором будет URL --%> <html:base /> </head> <body> <h3><bean:message key="jsp.login.header"/></h3> <hr/ ><%-- форма для логина --%> <html:form action=" /login " method="POST"> <bean:message key="jsp.login.field.login"/>:<br> <%-- текстовое поле для имени пользователя --%> <html:text property=" login "/><br> <bean:message key="jsp.login.field.password"/>:<br> <%-- текстовое поле для пароля пользователя --%> <html:password property=" password " redisplay="false"/><br> <html:submit><bean:message key="jsp.Login.button.submit"/> </html:submit> </html:form> <%-- пользовательский тег для отображения ошибок списком, открывающие/закрывающие значения которого берутся из файла ресурсов --%> <html:errors/> <hr/> </body> </html:html>Следует обратить внимание на пользовательские теги вида <bean:message key="jsp.login.header"/>, которые выводят текст, предварительно размещенный в специальном файле errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.login.incorrectLoginOrPassword")); Для данного приложения файл ресурсов может быть создан в виде: # пример # 6: файл ресурсов: ApplicationResources.properties # header и footer, которые будут использоваться для # обрамления ошибок, выдаваемых тегом <errors/>.errors.header=<ul> errors.footer=</ul> errors.prefix=<li> errors.suffix=</li> # разметка для элемента списка ошибок из <errors/>, # который указывает, что логин или пароль неверны. error.login.incorrectLoginOrPassword=<li>incorrect login or password</li>
# текстовая информация на login.jsp jsp.login.title=Login jsp.login.header=Login jsp.login.field.login=Login jsp.login.field.password=Password jsp.login.button.submit=Enter
# текстовая информация на main.jsp jsp.main.title=Welcome jsp.main.header=Welcome jsp.main.hello=Hello
# текстовая информация на error.jsp jsp.error.title=Error jsp.error.header=Error jsp.error.returnToLogin=Return to login pageИмя и месторасположение этого файла настраиваются в struts-config.xml, который является основным конфигурационным файлом для приложения, построенного на основе Struts. пример # 7: конфигурация action, forward, resource и т.д.: struts-config.xml<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <data-sources> <!--источники данных к БД. Как правило, это организация пула соединений. Пример приведен в конце раздела--> </data-sources> <!-- ========== Form Bean Definitions --> <form-beans> <form-bean name="loginForm" type="by.bsu.famcs.jspservlet.LoginForm" /> </form-beans> <!-- ============== Global Exception Definitions (если есть)--> <global-exceptions> </global-exceptions> <!-- ============== Global Forward Definitions(если есть) --> <global-forwards> </global-forwards>
<!-- =============== Action Mapping Definitions --> <action-mappings> <!-- Action для процесса логина --> <action name="loginForm" path="/login" scope="request" <!—- Задается область видимости формы. Часто необходимо, чтобы форма лежала в сессии, а не в запросе. --> type="by.bsu.famcs.jspservlet.LoginAction" validate="false"> <!-- форварды на JSP, доступные из данного action --> <forward name="againlogin" path="/WEB-INF/jsp/login.jsp" /> <forward name="success" path="/WEB-INF/jsp/main.jsp" /> </action> </action-mappings> <!-- =================== Message Resources Definitions --> <!-- имя файла ресурсов.properties, в котором будет храниться вся статическая текстовая информация для приложения. Путь берется относительно папки classes. --> <message-resources parameter= "resources.ApplicationResources"/> </struts-config> В теге <action> при помощи параметра path со значением /login связываются страница JSP и класс ActionForm, ей соответствующий. Это значение указывается в login.jsp в теге FORM ACTION. Далее прописывается путьк сервлету, в который и будет передана вся информация, извлеченная из запроса. В теге <forward> размещаются имена, в частности success и login, ассоциированные с путями вызова страниц /jsp/login.jsp и /jsp /main.jsp соответственно.Указанные имена передаются в метод findForward() класса ActionMapping в качестве параметра при различных вариантах завершения работы сервлета.Файл web.xml в проекте также обязательно присутствует и должен указывать на месторасположение главного сервлета ActionServlet и файла struts-config.xml, а также указывать servlet-mapping для контроллера. пример # 8: конфигурационный файл приложения: web.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app id="WebApp"> <display-name>Study</display-name> <!-- настройка стандартного контроллера Struts – сервлета ActionServlet --> <servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet</servlet-class> <!-- месторасположение основного настроечного файла Struts – struts-config.xml --> <init-param> <param-name>config</param-name> <param-value>WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>validate</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- соответствие (mapping) для стратсовского контроллера, указывающее, что контроллер будет вызываться, если адрес заканчивается на.do --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- подключение стандартных struts-ских библиотек пользовательских тегов (библиотек может быть больше для поздних версий) --> <taglib> <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri> <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> </taglib> </web-app> Чтобы получить пул соединений, в приложении следует заполнить datasource в struts-config.xml, следующим образом: пример # 9: организация пула соединений: data-sources <data-sources><data-source type="org.apache.commons.dbcp.BasicDataSource"> <set-property property="driverClassName" value="com.mysql.jdbc.Driver" /> <set-property property="url" value="jdbc:mysql://localhost/имя_бд" /> <set-property property="username" value="root" /> <set-property property="password" value="pass" /> <set-property property="maxActive" value="10" /> <set-property property="maxWait" value="5000" /> <set-property property="defaultAutoCommit" value="false" /> <set-property property="defaultReadOnly" value="false" /> </data-source> </data-sources> Получить данный пул из класса, реализующего org.apache.struts.action.Action, можно с помощью метода <%@ page errorPage="error.jsp" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <html:html locale="true"> <head> <title><bean:message key="jsp.main.title"/></title> <html:base/> </head> <body> <h3><bean:message key="jsp.main.header"/></h3> <hr/> <bean:message key="jsp.main.hello"/>, <bean:write name="loginForm" property="login"/> <hr/> <a href="login.do"><bean:message key="jsp.error.returnToLogin"/></a> <html:errors/> </body> </html:html> Страница ошибок, к которой осуществляется переход в случае возникновения исключений, модернизирована следующим образом: <%--пример # 11: страница, вызываемая при ошибке: error.jsp --%><%@ page isErrorPage="true" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <html:html locale="true"> <head> <title><bean:message key="jsp.error.title"/></title> <html:base/> </head> <body> <h3><bean:message key="jsp.error.header"/></h3> <hr> <%=(exception!= null)? exception.toString(): "unknown error"%> <hr> <a href="login.do"><bean:message key="jsp.error.returnToLogin"/></a> </body> </html:html> Кроме того, чтобы использовать технологию Struts, необходимо подключить struts.jar с Java-кодом движка и библиотеки пользовательских тегов: struts-bean.tldstruts-html.tld struts-logic.tld Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.037 сек.) |