18125

Struts Framework

Лекция

Информатика, кибернетика и программирование

Тема 10: Struts Framework Apache Struts це opensource framework для розробки Java EE web програм. В ньому використовується і розширюється Java Servlet API та надається базова інфраструктура для реалізації програми на основі шаблону проектування design pattern MVC. Базова платформа для використання Struts 2 вклю...

Украинкский

2013-07-06

175 KB

2 чел.


Тема 10: Struts Framework

Apache Struts – це open-source framework для розробки Java EE web програм. В ньому використовується і розширюється Java Servlet API та надається базова інфраструктура для реалізації програми на основі шаблону проектування (design pattern) MVC. Базова платформа для використання Struts 2 включає Servlet API 2.4, JSP API 2.0 та Java 5. Архітектура Struts є елегантною та гнучкою і базується на стандартних технологіях, таких, як Java Filters, Java Beans, ResourceBundles, XML тощо. 

Основна задача Struts полягає в реалізації MVC, тобто чіткого розділення model (логіки програми, яка може взаємодіяти з базою даних) від view (сторінок, що показуються у броузері користувача) та controller (компонентів, що передають інформацію між model та view і керують перебігом програми). Для model Struts може використовувати різноманіття технологій доступу до баз даних, таких, як  JDBC, JPA, Hibernate тощо, а view може базуватись на JSP, JTL, JSF, Jakarta Velocity Engine, Templates, PDF, XSLT тощо.

На рисунку зображено життєвий цикл обробки запиту від користувача програмою, що базується на Struts2. Запит надходить до сервлет-контейнера, такого, як Tomcat і потім проходить через стандартний ланцюг фільтрів.

ActionContextCleanUp та Other Filters (SiteMesh, etc) є необов’язковими. При виклику FilterDispatch перевіряється з використанням ActionMapper чи викликати Action (реалізація controller) чи ні. Якщо action повинен виконуватись, то FilterDispatcher передає керування ActionProxy. ActionProxy звертається до Configuration Files Manager, який бере дані з конфігураційного файлу struts-config.xml. Потім ActionProxy створює ActionInvocation, який реалізує собою шаблон команди. Процес ActionInvocation викликає Interceptors (перехоплювачі – якщо такі вказані) та потім викликає action. Потім ActionInvocation знаходить відповідний Result, який виконується, забезпечуючи формування результату, який побачить користувач з JSP чи іншого шаблону. Потім інтерсептори виконуються знову в зворотньому порядку. Нарешті, відповідь повертається через фільтри, описані в файлі web.xml.

Struts надає для використання controller (сервлет ActionServlet) і полегшує створення шаблонів для презентаційного рівня (зазвичай це JSP, але також можуть використовуватись XML/XSLT і Velocity). Розробник web програми повинен створити код model, а також створити основний конфігураційний файл struts.xml, в якому зв’язуються model, view і controller.

Приклад найпростішої програми з використанням Struts Framework.

Структуру програми можна побачити на рисунку:

Програма починається з файлу index.html, який перенаправляє подальше виконання на URL example/HelloWorld.action, який являє собою насправді action-об’єкт Struts:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

<head>

   <META HTTP-EQUIV="Refresh" CONTENT="0;URL=example/HelloWorld.action">

</head>

<body>

<p>Loading ...</p>

</body>

</html>

URL example/HelloWorld.action описується в файлі struts.xml – спеціальному конфігураційному файлі Struts, який повинен знаходитись в папці WEB-INF/classes. Приклад файлу:

<?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>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />

<constant name="struts.devMode" value="true" />

<package name="example" namespace="/example" extends="struts-default">

 <action name="HelloWorld" class="org.chdtu.trystruts.Struts2HelloWorld">

  <result>/pages/HelloWorld.jsp</result>

 </action>

</package>

</struts>

Елемент action, який виконує функцію контроллера, має вигляд:

package org.chdtu.trystruts;

import com.opensymphony.xwork2.ActionSupport;

import java.util.Date;

public class Struts2HelloWorld extends ActionSupport {

   public static final String MESSAGE = "Struts 2 Hello World!";

   public String execute() throws Exception {

       setMessage(MESSAGE);

       return SUCCESS;

   }

   private String message;

   public void setMessage(String message){

       this.message = message;

   }

   public String getMessage() {

       return message;

   }

 public String getCurrentTime(){

     return new Date().toString();

 }

}

При передачі йому керування автоматично виконується метод execute(). В Struts2 екземпляр action створюється для кожного запиту і знищується зразу після завершення запиту.

JSP сторінка виведення результату HelloWorld.jsp:

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>

<head>

<title>Struts 2 Hello World Application!</title>

</head>

<body>

<h2><s:property value="message" /></h2>

<p>Current date and time is: <b><s:property value="currentTime"/></b>

</body>

</html>


 

А также другие работы, которые могут Вас заинтересовать

79101. Определение обязательства. Основания возникновения обязательств. Классификация обязательств. Сделки. Контракты и пакты 24.8 KB
  Римское право определяло обязательство как правовые оковы в силу которых мы принуждаемся чтонибудь исполнить согласно законам нашего государства . В позднейший период обязательство стало рассматриваться как юридическое отношение между двумя лицами в силу которого одно из них именуемое кредитором имеет право требовать от другого лица именуемого должником исполнения чеголибо в свою пользу. В отличие от вещного права обязательство связывает только тех лиц которые в нем участвуют и поэтому кредитор может предъявить иск не ко всем а...
79102. Особые средства преторской защиты. Понятие исковой давности 19.33 KB
  Помимо предоставления исков преторы пользуясь принадлежащей им властью так называемым imperium оказывали иногда защиту особыми средствами своими безусловными в противоположность формуле иска непосредственными распоряжениями хотя с течением времени и здесь преторы в некоторых случаях перешли на путь условных распоряжений. С течением времени по мере увеличения числа дел претор стал давать интердикты без проверки фактов в виде условного распоряжения если подтвердятся факты на которые ссылается заявитель и тогда интердикты с...
79103. Открытие наследства. Принятие наследства. Последствия принятия. Иски о наследстве. Выморочное наследство 23.96 KB
  Принятие наследства. Открытие наследства происходило в момент смерти наследодателя. За время между открытием наследства и его принятием наследниками наследственное имущество не принадлежало никому и именовалось лежачее наследство.
79104. Отцовская власть. Основания возникновения. Правовое положение детей. Имущественные права подвластных детей. Пекулий и его виды 24.19 KB
  По праву Юстиниана rrogtio совершалось путем получения на то императорского рескрипта; doptio путем занесения в судебный протокол pud ct соглашения прежнего домовладыки усыновляемого с усыновителем в присутствии усыновляемого. Последствием doptio было прекращение родительской власти прежнего домовладыки и установление власти усыновителя. Если правонарушитель переходил под власть другого домовладыки то и ответственность по ctio noxlis переходила на нового домовладыку: nox cput sequitur ответственность следует за виновным лицом.С...
79105. Периодизация истории Римской империи и Римского права. Рецепция. Русская историография Римского права 21.29 KB
  Русская историография Римского права Периодизация римского права выделение в развитии права определенных этапов имеющих соответствующий временной промежуток и характерные признаки. Периодизация римского права позволяет сформировать представление о.качественных состояниях права на различных этапах развития.
79106. Понятие вещных прав. Виды вещных прав. Классификация вещей 22.87 KB
  Римское право не выработало понятий вещного и обязательственного права однако делалось различие между вещными исками и исками личными. Вещное право это право возможность непосредственно и независимо от чьей либо воли воздействовать на вещь. Римское право знало несколько оснований классификации вещей. В Древнем Риме выделялись следующие виды вещных прав: право собственности как основное вещное право; владение различие между владением и собственностью стало проводиться в римском праве лишь на позднем этапе его развития; права на чужие...
79107. Понятие иска. Виды исков 19.9 KB
  Виды исков.Поэтому практически первостепенное значение имел вопрос дает ли претор в данном случае иск ctio. Постепенно формулы исков в практике претора типизируются...
79108. Личность и ее социальные роли 86 KB
  Личность и ее социальные роли. Человек индивид и личность. Человек индивид и личность. В разговорном языке мы часто употребляем понятия человек индивид и личность как синонимы.
79109. Социология конфликта 68 KB
  Определение социального конфликта. Структура и этапы конфликта. Жизнь людей в обществе представляет собой бесконечную цепь конфликтов, которые сопровождаются психологическими стрессами, значительным ущербом – материальным, человеческим.