АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Простое приложение

Читайте также:
  1. А)простое лигатурное связывание.
  2. Акт периодического технического освидетельствования лифта (Приложение № 52)
  3. Анализ формы № 5 «Приложение к бухгалтерскому балансу».
  4. Воскресное приложение к газете “El Pais” за 23 июня 2002 г.
  5. Глава 55. Простое товарищество
  6. Для самоконтроля уровня знаний проанализируйте решения ситуационных задач: см. Приложение 2.
  7. Для «Программы производства конечной продукции» создается простое товарищество.
  8. Журнал учета выдачи путевых листов (Приложение № 42)
  9. ЗАДАНИЕ 9 ПРОСТОЕ ОСЛОЖНЕННОЕ ПРЕДЛОЖЕНИЕ
  10. Логика высказываний. Простое атрибутивное высказывание и его структура.
  11. Механика видимого по Дзиге Вертову (приложение)
  12. ОБЪЕКТЫ ПОЛЬЗОВАТЕЛЬСКОГО УРОВНЯ – ПРИЛОЖЕНИЕ И ДОКУМЕНТ

Приведенный в главе «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
информацию о драйвере и расположении БД: ConfigurationManager.java */

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
текущего application. При этом все относительные ссылки на странице
ответа отсчитываются от этого значения

--%>

<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"/>,

которые выводят текст, предварительно размещенный в специальном файле
ApplicationResources.properties
. В этом файле хранятся все статичес­кие текстовые данные, которые извлекаются по ключу, указанному в свойстве пользовательского тега key. Например, в LoginAction при создании объектов ошибок в их конструкторе был указан ключ, по которому в этом файле берется текст ошибки:

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, можно с помощью метода
getDataSource(HttpServletRequest request)).

Оставшиеся JSP-страницы были изменены несущественно: <%-- пример # 10: страница, вызываемая после прохождения идентификации: main.jsp --%>

<%@ 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.tld

struts-html.tld

struts-logic.tld


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.037 сек.)