1. Доступ или добавление атрибутов запроса/сеанса/приложения.
public Stringscope() выдает исключение {
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "Область приложения");//Помещаем приложение в ServletContext
ctx.getSession().put("ses", "диапазон сеанса");//Помещаем ses в сеанс
ctx.put("req", "диапазон запроса");//Помещаем запрос в запрос
вернуть «объем»;
}
ДСП:
<тело>
${applicationScope.app} <br>
${sessionScope.ses}<br>
${requestScope.req}<br>
</тело>
2. Получите объект HttpServletRequest/HttpSession/ServletContext/HttpServletResponse.
Первый способ: получить непосредственно через класс ServletActionContext:
public String rsa() выдает исключение {
Запрос HttpServletRequest = ServletActionContext.getRequest();
ServletContext servletContext = ServletActionContext.getServletContext();
запрос.getSession()
Ответ HttpServletResponse = ServletActionContext.getResponse();
вернуть «объем»;
}
Второй способ: реализовать указанный интерфейс и внедрить его при запуске платформы Struts:
публичный класс HelloWorldAction реализует ServletRequestAware, ServletResponseAware, ServletContextAware{
частный запрос HttpServletRequest;
частный ServletContext servletContext;
частный ответ HttpServletResponse;
public void setServletRequest (HttpServletRequest req) {
this.request=req;
}
public void setServletResponse (HttpServletResponse res) {
this.response=res;
}
public void setServletContext(ServletContext ser) {
this.servletContext=ser;
}
}
3. Загрузка файла
Шаг первый: добавьте commons-fileupload-1.2.1.jar и commons-io-1.3.2.jar в папку WEB-INF/lib. Оба файла можно загрузить с http://commons.apache.org/.
Шаг 2. Установите тип шифрования таблицы формы: «multipart/form-data», как показано ниже:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" метод="post">
<input type="file" name="uploadImage">
</форма>
Шаг 3. Добавьте следующие атрибуты в класс Action. Красная часть атрибута соответствует имени поля файла в форме:
публичный класс HelloWorldAction{
частный файл uploadImage;//Получить загруженный файл
частная строка uploadImageContentType;//Получить тип файла
частная строка uploadImageFileName;//Получить имя файла
//Методы получения/установки свойств здесь опущены.
public String upload() выдает исключение {
Строковый реальный путь = ServletActionContext.getServletContext().getRealPath("/images");
Файл файл = новый файл (реальный путь);
if(!file.exists()) file.mkdirs();
FileUtils.copyFile(uploadImage, новый файл(файл, uploadImageFileName));
вернуть «успех»;
}
}
4. Загрузка нескольких файлов
Шаг первый: добавьте commons-fileupload-1.2.1.jar и commons-io-1.3.2.jar в каталог WEB-INF/lib. Оба файла можно загрузить с http://commons.apache.org/.
Шаг 2. Установите тип шифрования таблицы формы: «multipart/form-data», как показано ниже:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" метод="post">
<input type="file" name="uploadImages">
<input type="file" name="uploadImages">
</форма>
Шаг 3. Добавьте следующие атрибуты в класс Action. Красная часть атрибута соответствует имени поля файла в форме:
публичный класс HelloWorldAction{
Private File[] uploadImages;//Получить загруженный файл
Private String[] uploadImagesContentType;//Получить тип файла
Private String[] uploadImagesFileName;//Получаем имя файла
//Методы получения/установки свойств здесь опущены.
public String upload() выдает исключение {
Строковый реальный путь = ServletActionContext.getServletContext().getRealPath("/images");
Файл файл = новый файл (реальный путь);
if(!file.exists()) file.mkdirs();
for(int i=0;i<uploadImages.length; i++){ Файл uploadImage = uploadImages[i];
FileUtils.copyFile(uploadImage, новый файл(файл, uploadImagesFileName[i]));
}
вернуть «успех»;
}}
5. Пользовательский перехватчик
Чтобы настроить перехватчик, вам необходимо реализовать интерфейс com.opensymphony.xwork2.interceptor.Interceptor:
общественный класс PermissionInterceptor реализует Interceptor {
частный статический окончательный длинный сериалVersionUID = -5178310397732210602L;
общественный недействительный уничтожить () {
}
общественная недействительная инициализация () {
}
перехват публичной строки (вызов ActionInvocate) выдает исключение {
System.out.println("Введите перехватчик");
if(пользователь существует в сеансе){
Строковый результат = вызов.invoke();
}еще{
вернуть «вход в систему»;
}
//System.out.println("Возвращаемое значение:"+ результат);
// возвращаем результат;
}
}
<package name="csdn" namespace="/test" расширяет="struts-default">
<перехватчики>
<имя перехватчика="разрешение" />
<interceptor-stack name="permissionStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="разрешение" />
</перехватчик-стек>
</перехватчики>
<action name="helloworld_*" метод="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
<interceptor-ref name="permissionStack"/>
</действие>
</пакет>
Поскольку все функции в struts2, такие как загрузка файлов, проверка данных и инкапсуляция параметров запроса в действия, реализуются перехватчиком в системном стеке defaultStack по умолчанию, определяемый нами перехватчик должен ссылаться на системный стек defaultStack по умолчанию, чтобы приложение могло использовать struts2. Многочисленные функции, предоставляемые фреймворком.
Если вы хотите, чтобы все действия в пакете использовали собственный перехватчик, вы можете определить его как перехватчик по умолчанию с помощью <default-interceptor-ref name="permissionStack"/>. Примечание. Для каждого пакета можно указать только один перехватчик по умолчанию. Кроме того, если мы явно укажем перехватчик для действия в пакете, перехватчик по умолчанию не будет работать.
6. Проверка ввода
В struts2 мы можем проверять все методы действий или проверять указанные методы действий.
Struts2 предоставляет два метода реализации для проверки ввода:
1. Реализовано путем написания кода вручную.
2. Реализовано на основе конфигурации XML.
7. Вручную напишите код для проверки ввода всех методов в действии.
Переопределяя метод validate(), метод validate() проверит все методы в действии, которые имеют ту же сигнатуру, что и метод выполнения. Если определенная проверка данных не удалась, мы должны вызвать метод addFieldError(), чтобы добавить информацию об ошибке проверки в системные fieldErrors (чтобы использовать метод addFieldError(), действие может наследовать ActionSupport. Если системные fieldErrors содержат информацию об ошибке, struts2 will Запрос пересылается на результат с именем input. Информацию об ошибке можно отобразить с помощью <s:fielderror/> в представлении ввода.
пример использования validate():
общественная недействительная проверка() {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("имя пользователя", "Номер мобильного телефона не может быть пустым");
}else{ if(!Pattern.compile("^1[358]//d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError("mobile", "Неверный формат номера мобильного телефона" }
}
}
После неудачной проверки запрос перенаправляется во входное представление:
<result name="input">/WEB-INF/page/addUser.jsp</result>
Используйте <s:fielderror/> на странице addUser.jsp для отображения информации об ошибке.
Реализованный через метод validateXxx(), validateXxx() будет проверять только метод с именем Xxx в действии. Первая буква Xxx должна быть заглавной. Если определенная проверка данных не удалась, мы должны вызвать метод addFieldError(), чтобы добавить информацию об ошибке проверки в системные fieldErrors (чтобы использовать метод addFieldError(), действие может наследовать ActionSupport. Если системные fieldErrors содержат информацию об ошибке, struts2 will Запрос пересылается на результат с именем input. Информацию об ошибке можно отобразить с помощью <s:fielderror/> в представлении ввода.
Пример использования метода validateXxx():
public String add() выдает исключение { return "success";}
общественный недействительный validateAdd() {
if(username==null && "".equals(username.trim())) this.addFieldError("имя пользователя", "Имя пользователя не может быть пустым");
}
После неудачной проверки запрос перенаправляется во входное представление:
<result name="input">/WEB-INF/page/addUser.jsp</result>
Используйте <s:fielderror/> на странице addUser.jsp для отображения информации об ошибке.
8. Процесс проверки ввода
1. Преобразователь типов выполняет преобразование типов параметров запроса и присваивает преобразованное значение атрибуту в действии.
2. Если во время преобразования типа возникает исключение, система сохранит информацию об исключении в ActionContext, а перехватчик конверсииError добавит информацию об исключении в fieldErrors. Независимо от того, возникнет ли исключение во время преобразования типа, будет выполнен шаг 3.
3. Сначала система вызывает метод validateXxx() в действии посредством технологии отражения, где Xxx — имя метода.
4. Затем вызовите метод validate() в действии.
5. После вышеуказанных 4 шагов, если в системе есть информация об ошибке в полеErrors (то есть размер коллекции, хранящей информацию об ошибках, больше 0), система автоматически перенаправит запрос в представление с именем input. Если в полеErrors в системе нет информации об ошибке, система выполнит метод обработки в действии.
9. Внедрить проверку ввода для всех методов действий на основе метода конфигурации XML.
При использовании метода конфигурации на основе XML для реализации проверки ввода действие также должно наследовать ActionSupport и предоставить файл проверки. Файл проверки и класс действия помещаются в один и тот же пакет. Формат имени файла: ActionClassName-validation. xml, где ActionClassName — это простое имя класса действия, а -validation — фиксированный метод записи. Если класс действия — cn.csdn.UserAction, то имя файла должно быть следующим: UserAction-validation.xml. Ниже приведен шаблон файла проверки:
<?xml version="1.0"coding="UTF-8"?>
<!DOCTYPE валидаторы PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<валидаторы>
<field name="имя пользователя">
<field-validator type="requiredstring">
<param name="trim">истина</param>
<message>Имя пользователя не может быть пустым!</message>
</поле-валидатор>
</поле>
</валидаторы>
<field> указывает атрибуты, которые необходимо проверить в действии, а <field-validator> указывает валидатор. Указанная выше строка требуемого валидатора предоставляется системой. Система предоставляет валидаторы, которые могут удовлетворить большинству требований проверки. валидатор можно найти в default.xml в разделе com.opensymphony.xwork2.validator.validators в xwork-2.x.jar.
<message> — это сообщение с подсказкой после неудачной проверки. Если требуется интернационализация, вы можете указать атрибут ключа для сообщения, а значение ключа — это ключ в файле ресурсов.
В этом файле проверки проверяется атрибут имени пользователя строкового типа в действии. Сначала необходимо вызвать метод обрезки() для удаления пробелов, а затем определить, является ли имя пользователя пустым.
При записи файла проверки не может появиться справочное сообщение. При записи файла проверки ActionClassName-validation.xml, если справочное сообщение не появляется, решить проблему можно следующим образом:
windowwos-> настройки->myeclipse->файлы и редакторы->xml->xmlcatalog
Нажмите «Добавить», в появившемся окне выберите «Файловая система», затем выберите xwork-validator-1.0.3.dtd в каталоге src/java каталога распаковки xwork-2.1.2 и вернитесь в папку распаковки xwork-2.1.2. окно настройки Не спешите закрывать окно, вам следует изменить тип ключа в окне на URI. Ключ изменен на http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd.