1. Различные значения по умолчанию в конфигурации действий.
<package name="csdn" namespace="/test" расширяет="struts-default">
<action name="helloworld" метод="выполнить" >
<result name="success">/WEB-INF/page/hello.jsp</result>
</действие>
</пакет>
1>Если для действия не указан класс, по умолчанию используется ActionSupport.
2>Если для действия не указан метод, метод выполнения() в действии будет выполнен по умолчанию.
3>Если атрибут имени результата не указан, значение по умолчанию — успех.
2. Различные типы пересылки результатов в действии.
<имя действия="приветмир">
<result name="success">/WEB-INF/page/hello.jsp</result>
</действие>
Конфигурация результатов аналогична пересылке в struts1, но struts2 предоставляет несколько типов результатов: диспетчер (значение по умолчанию), перенаправление, redirectAction, PlainText.
Ниже приведен пример типа результата redirectAction, если перенаправленное действие находится в том же пакете:
<result type="redirectAction">привет, мир</result>
Если перенаправленное действие находится в другом пространстве имен:
<result type="redirectAction">
<param name="actionName">привет, мир</param>
<param name="namespace">/test</param>
</результат>
обычный текст: отображает исходное содержимое файла. Например, когда нам нужно отобразить исходный код файла jsp как есть, мы можем использовать этот тип.
<result name="source" type="plainText ">
<param name="location">/xxx.jsp</param>
<param name="charSet">UTF-8</param><!-- Укажите кодировку для чтения файлов -->
</результат>
В результате вы также можете использовать выражение ${attribute name} для доступа к атрибутам в действии. Имена атрибутов в выражении соответствуют атрибутам в действии. следующее:
<result type="redirect">view.jsp?id=${id}</result>
3. Несколько действий имеют одно представление — глобальную конфигурацию результатов.
Когда одно и то же представление используется в нескольких действиях, мы должны определить результат как глобальное представление. Глобальная пересылка предусмотрена в struts1, аналогичные функции также предусмотрены в struts2:
<пакет....>
<глобальные результаты>
<result name="message">/message.jsp</result>
</глобальные-результаты>
</пакет>
4. Внедрить значения в свойства Action
Struts2 предоставляет функцию внедрения зависимостей для свойств в Action. В файле конфигурации struts2 мы можем легко вводить значения в свойства в Action. Примечание. Свойства должны предоставлять методы установки.
публичный класс HelloWorldAction{
частная строка savePath;
публичная строка getSavePath() {
вернуть путь сохранения;
}
public void setSavePath (String savePath) {
this.savePath = savePath;
}
...
}
<package name="csdn" namespace="/test" расширяет="struts-default">
<action name="helloworld" >
<param name="savePath">/images</param>
<result name="success">/WEB-INF/page/hello.jsp</result>
</действие>
</пакет>
Вышеупомянутое вставляет «/images» в атрибут savePath действия через узел <param>.
5. Укажите суффикс запроса, который должен быть обработан Struts 2.
Раньше мы использовали суффикс .action по умолчанию для доступа к Action. Фактически, суффикс по умолчанию можно изменить с помощью константы «struts.action.extension». Например, мы можем настроить Struts 2 на обработку только путей запросов с суффиксом .do:
<?xml version="1.0"coding="UTF-8"?>
<!DOCTYPE Struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<стойки>
<constant name="struts.action.extension" value="do"/>
</struts>
Если пользователю необходимо указать несколько суффиксов запроса, разделите их запятыми (,). нравиться:
<constant name="struts.action.extension" value="do,go"/>
6. Подробно опишите определение констант.
Константы можно настроить в struts.xml или struts.properties. Рекомендуется настроить их в struts.xml. Ниже приведены два метода настройки.
Настройте константы в файле struts.xml.
<стойки>
<constant name="struts.action.extension" value="do"/>
</struts>
Настройте константы в struts.properties.
struts.action.extension=сделать
Поскольку константы могут быть определены в нескольких файлах конфигурации ниже, нам необходимо понять порядок поиска, в котором struts2 загружает константы:
struts-default.xml
struts-plugin.xml
struts.xml
Struts.properties
веб.xml
Если одна и та же константа настроена в нескольких файлах, значение константы, настроенное в последнем файле, перезапишет значение константы, настроенное в предыдущем файле.
7. Знакомство с часто используемыми константами
<!-- Укажите набор кодировок по умолчанию, который действует на метод setCharacterEncoding HttpServletRequest и выходные данные freemarker и Velocity -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- Этот атрибут указывает суффикс запроса, который должен быть обработан Struts 2. Значением по умолчанию для этого атрибута является action, то есть все запросы, соответствующие *.action, обрабатываются Struts2.
Если пользователю необходимо указать несколько суффиксов запроса, разделите их запятыми (,). -->
<constant name="struts.action.extension" value="do"/>
<!-- Установите, кэширует ли браузер статический контент. Значение по умолчанию — true (используется в производственной среде). Лучше всего отключить его на этапе разработки.
<constant name="struts.serve.static.browserCache" value="false"/>
<!-- При изменении файла конфигурации struts, будет ли система автоматически перезагружать файл, значение по умолчанию — false (используется в производственной среде), лучше всего включить его на этапе разработки -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- Используется в режиме разработки, чтобы можно было распечатать более подробные сообщения об ошибках -->
<constant name="struts.devMode" value="true" />
<!--Тема просмотра по умолчанию-->
<constant name="struts.ui.theme" value="simple" />
<! При интеграции с Spring укажите, что Spring отвечает за создание объекта действия -->
<constant name="struts.objectFactory" value="spring" />
<!Это свойство определяет, поддерживает ли Struts 2 вызов динамических методов. Значение этого свойства по умолчанию — true. Если вам нужно отключить вызов динамических методов, вы можете установить для этого свойства значение false. -->
<constant name="struts.enable.DynamicMethodInvocate" value="false"/>
<!--Ограничение размера загружаемых файлов-->
<constant name="struts.multipart.maxSize" value="10701096"/>
8. Укажите несколько файлов конфигурации Struts для приложения.
В большинстве приложений по мере увеличения масштаба приложения количество действий в системе также значительно увеличивается, в результате чего файл конфигурации struts.xml становится очень раздутым. Чтобы избежать слишком большого и раздутого файла struts.xml, а также улучшить читаемость файла struts.xml, мы можем разложить файл конфигурации struts.xml на несколько файлов конфигурации, а затем включить другие файлы конфигурации в файл struts.xml. файл. Следующий файл struts.xml определяет несколько файлов конфигурации через элемент <include>:
<?xml version="1.0"coding="UTF-8"?>
<!DOCTYPE Struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<стойки>
<include file="struts-user.xml"/>
<include file="struts-order.xml"/>
</struts>
Таким образом, мы можем добавить действие Struts 2 в несколько файлов конфигурации по модулю.
9. Динамический вызов метода
Если в действии несколько методов, мы можем использовать !+имя метода для вызова указанного метода. следующее:
публичный класс HelloWorldAction{
личное строковое сообщение;
....
public String Execute() выдает исключение {
this.message = "Мое первое приложение struts2";
вернуть «успех»;
}
public Stringother() выдает исключение {
this.message = "Второй метод";
вернуть «успех»;
}
}
Предположим, что URL-путь для доступа к указанному выше действию: /struts/test/helloworld.action.
Чтобы получить доступ к методу другого() действия, мы можем вызвать его следующим образом:
/struts/test/helloworld!other.action
Если мы не хотим использовать динамический вызов метода, мы можем отключить динамический вызов метода с помощью константы struts.enable.DynamicMethodInvoction.
<constant name="struts.enable.DynamicMethodInvocate" value="false"/>
10. Используйте подстановочные знаки для определения действий
<package name="csdn" namespace="/test" расширяет="struts-default">
<action name="helloworld_*" метод="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
</действие>
</пакет>
публичный класс HelloWorldAction{
личное строковое сообщение;
....
public String Execute() выдает исключение {
this.message = "Мое первое приложение struts2";
вернуть «успех»;
}
public Stringother() выдает исключение {
this.message = "Второй метод";
вернуть «успех»;
}
}
Чтобы получить доступ к методуother(), вы можете получить к нему доступ через URL-адрес, например: /test/helloworld_other.action
11. Получение параметров запроса
Используйте базовые типы для получения параметров запроса (get/post).
Определите атрибут с тем же именем, что и параметр запроса в классе Action, и struts2 сможет автоматически получить параметр запроса и назначить его атрибуту с тем же именем.
Путь запроса: http://localhost:8080/test/view.action?id=78.
общественный класс ProductAction {
частный целочисленный идентификатор;
public void setId(Integer id) {//struts2 использует технологию отражения для вызова метода установки свойства с тем же именем, что и параметр запроса, для получения значения параметра запроса.
this.id = идентификатор;
}
public Integer getId() {возвращаемый идентификатор;}
}
Используйте составной тип для получения пути запроса параметров запроса: http://localhost:8080/test/view.action?product.id=78.
общественный класс ProductAction {
частный Продуктовый продукт;
общественный недействительный setProduct (продукт продукта) {this.product = продукт };
общедоступный продукт getProduct() {возвращает продукт;}
}
Struts2 сначала создает объект продукта, вызывая конструктор продукта по умолчанию с помощью технологии отражения, а затем вызывает метод установки свойства с тем же именем, что и параметр запроса в продукте, с помощью технологии отражения, чтобы получить значение параметра запроса.
12. Значение преобразования типов
Для интеллектуальной инфраструктуры MVC неизбежно реализовать преобразование типов. Поскольку параметры запроса приложений структуры B/S (браузер/сервер) отправляются на сервер через браузер, эти параметры не могут иметь расширенные типы данных, поэтому тип данных. преобразование должно быть завершено на стороне сервера
Платформа MVC представляет собой решение уровня представления и должна обеспечивать поддержку преобразования типов. Struts2 обеспечивает очень мощную поддержку преобразования типов.
13. Обработка данных уровня представления
В веб-приложениях уровень представления в основном используется для взаимодействия с пользователями, включая сбор вводимых пользователем данных и представление пользователям статуса сервера. Таким образом, поток данных на уровне представления в основном имеет два направления: входные данные и выходные данные.
Для входных данных: вам необходимо выполнить преобразование строковых данных в несколько типов данных. Программа обычно не может быть завершена автоматически и ее необходимо вручную преобразовать в код.
Для выходных данных: и Java, и JSP поддерживают прямой вывод нескольких типов данных.
Другая обработка данных на уровне представления: проверка данных, которая разделена на проверку клиента и проверку на стороне сервера. Это будет подробно объяснено позже.
14. Преобразование типов
Все параметры HTTP являются строковыми типами. Сохраненные данные могут быть строкой, числом, логическим значением, датой и временем и т. д. или типом JavaBean. Преобразование типа вручную, например преобразование строки в дату, путем: получения строки с помощью метода request.getParameter; проверки того, является ли она пустой; преобразования строки в объект Date с помощью метода DateFormat.parse;
15. Преобразование типов Struts2
Встроенное преобразование типов Struts2
Строковые и логические значения завершают преобразование между строковыми и логическими значениями.
Преобразование строк и символов между обычными строками и символами
String, int и Integer завершают преобразование строк и целых чисел.
String и Long завершают преобразование между строковыми и длинными целочисленными значениями.
String, double и Double завершают преобразование строк и значений с плавающей запятой двойной точности.
String и Float завершают преобразование между строками и числами с плавающей запятой одинарной точности.
Строка и дата завершают преобразование между строковыми типами и типами даты. Формат даты использует формат SHORT языкового стандарта, который запрашивает пользователь.
Строка и массив. По умолчанию элементом массива является строка. Если пользователь определяет преобразователь типов, это также могут быть другие составные типы данных.
Строка, карта и список
16. API преобразования типов Struts
Преобразователь типов Struts2 фактически реализован на основе OGNL. В проекте OGNL есть интерфейс ognl.TypeConverter. Этот интерфейс необходимо реализовать для реализации преобразователя типов. Интерфейс определен следующим образом:
общедоступный интерфейс TypeConverter {
общедоступный объект ConvertValue (Map arg0, Object arg1, Member arg2, String arg3,
Объект arg4, класс arg5) {
вернуть ноль;
}
Чтобы реализовать преобразователь типов, необходимо реализовать описанный выше TypeConverter. Однако методы в приведенном выше интерфейсе слишком сложны, поэтому проект OGNL также предоставляет класс реализации этого интерфейса: ognl.DefaultTypeConverter. Вы можете реализовать свой собственный преобразователь типов. наследующий этот класс. Класс определяется следующим образом:
публичный класс DefaultTypeConverter расширяет объект, реализует TypeConverter{
public Object ConvertValue (контекст Map<String,Object>, значение объекта, класс toType) {
}
……//Другие методы
}
Роль метода ConvertValue заключается в завершении преобразования типа, но это преобразование типа является двунаправленным. Когда строку необходимо преобразовать в экземпляр объекта, этот метод также используется. использовал. Это преобразование выполняется с помощью типа параметра toType, который является целевым типом, который необходимо преобразовать. Таким образом, направление преобразования можно определить на основе параметра toType.
Параметры метода ConvertValue и возвращаемое значение. Первый параметр: context — это контекст среды преобразования типов. Второй параметр: value — это параметр, который необходимо преобразовать. Значение параметра value также различается в зависимости от направления преобразования.
Третий параметр: toType — это преобразованный целевой тип. Возвращаемое значение этого метода — это значение после преобразования типа. Тип значения также меняется в зависимости от направления преобразования. Видно, что преобразованный метод ConvertValue принимает значение, которое необходимо преобразовать, целевой тип, который необходимо преобразовать, является параметром, а затем возвращает преобразованное целевое значение.
Почему Value представляет собой строковый массив?
Конвертер DefaultTypeConverter должен учитывать наиболее распространенную ситуацию, поэтому он обрабатывает все параметры запроса как строковые массивы, а не строки. Эквивалентно значениям параметров, полученным методом getParameterValues().