Учебники

Struts 2 & Tiles Integration

В этой главе давайте пройдемся по шагам, связанным с интеграцией платформы Tiles со Struts2. Apache Tiles — это шаблонная структура, созданная для упрощения разработки пользовательских интерфейсов веб-приложений.

Прежде всего, нам нужно скачать файлы jar с веб-сайта Apache Tiles . Вам необходимо добавить следующие jar-файлы в путь к классам проекта.

  • плитка-апи-xyzjar
  • плитка-Compat-xyzjar
  • плитка-ядро-xyzjar
  • плитка-xyzjar-JSP
  • плитка-сервлет-xyzjar

В дополнение к вышесказанному, мы должны скопировать следующие файлы jar из загрузки struts2 в ваш WEB-INF / lib .

  • Викисклада BeanUtils-xyzjar
  • Обще-варочного-xyjar
  • Struts2-плитка-плагин-xyzjar

Теперь давайте настроим файл web.xml для интеграции Struts-Tiles, как показано ниже. Здесь следует отметить два важных момента. Во-первых, нам нужно сообщить плиткам , где найти файл конфигурации плиток tile.xml . В нашем случае это будет папка / WEB-INF . Далее нам нужно инициализировать слушатель Tiles, который поставляется с загрузкой Struts2.

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee" 
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   id = "WebApp_ID" version = "2.5">
   <display-name>Struts2Example15</display-name>
	
   <context-param>
      <param-name>
         org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
      </param-name>
      
      <param-value>
         /WEB-INF/tiles.xml
      </param-value>
   </context-param>

   <listener>
      <listener-class>
         org.apache.struts2.tiles.StrutsTilesListener
      </listener-class>
   </listener>

   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
</web-app>

Теперь давайте создадим файл tile.xml в папке / WEB-INF со следующим содержимым:

<?xml version = "1.0" Encoding = "UTF-8" ?>

<!DOCTYPE tiles-definitions PUBLIC
   "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
   "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>

   <definition name = "baseLayout" template="/baseLayout.jsp">
      <put-attribute name = "title"  value = "Template"/>
      <put-attribute name = "banner" value = "/banner.jsp"/>
      <put-attribute name = "menu"   value = "/menu.jsp"/>
      <put-attribute name = "body"   value = "/body.jsp"/>
      <put-attribute name = "footer"   value = "/footer.jsp"/>
   </definition>

   <definition name = "tiger" extends = "baseLayout">
      <put-attribute name = "title"  value = "Tiger"/>
      <put-attribute name = "body"   value = "/tiger.jsp"/>      
   </definition>

   <definition name = "lion" extends = "baseLayout">
      <put-attribute name = "title"  value = "Lion"/>
      <put-attribute name = "body"   value = "/lion.jsp"/>      
   </definition>
  
</tiles-definitions>

Далее мы определяем базовый макет скелета в baseLayout.jsp . Он имеет пять областей многократного использования. А именно заголовок, баннер, меню, тело и нижний колонтитул . Мы предоставляем значения по умолчанию для baseLayout, а затем создаем две настройки, которые расширяются от макета по умолчанию. Макет тигра аналогичен базовому макету, за исключением того, что он использует tiger.jsp в качестве основного текста и текст «Тигр» в качестве заголовка. Аналогично, макет Lion похож на базовый макет, за исключением того, что он использует lion.jsp в качестве основного текста и текст «Lion» в качестве заголовка.

Давайте посмотрим на отдельные файлы JSP. Ниже приводится содержимое файла baseLayout.jsp

<%@ taglib uri = "http://tiles.apache.org/tags-tiles" prefix = "tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset = UTF-8">
      <title>
         <tiles:insertAttribute name = "title" ignore="true" />
      </title>
   </head>

   <body>
      <tiles:insertAttribute name = "banner" /><br/>
      <hr/>
      <tiles:insertAttribute name = "menu" /><br/>
      <hr/>
      <tiles:insertAttribute name = "body" /><br/>
      <hr/>
      <tiles:insertAttribute name = "footer" /><br/>
   </body>
</html>

Здесь мы просто собрали базовую HTML-страницу, которая имеет атрибуты плиток. Мы вставляем атрибуты плиток в те места, где они нам нужны. Далее, давайте создадим файл banner.jsp со следующим содержанием —

<img src="http://www.tutorialspoint.com/images/tp-logo.gif"/>

Файл menu.jsp будет содержать следующие строки, которые являются ссылками — на действия распорок TigerMenu.action и LionMenu.action.

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

<a href = "<s:url action = "tigerMenu"/>" Tiger</a><br>
<a href = "<s:url action = "lionMenu"/>" Lion</a><br>

Файл lion.jsp будет иметь следующее содержимое:

<img src="http://upload.wikimedia.org/wikipedia/commons/d/d2/Lion.jpg"/>
The lion

Файл tiger.jsp будет иметь следующее содержимое:

<img src="http://www.freewebs.com/tigerofdarts/tiger.jpg"/>
The tiger

Далее, давайте создадим файл класса действий MenuAction.java, который содержит следующее:

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class MenuAction extends ActionSupport {
   public String tiger() { return "tiger"; }
   public String lion() { return "lion"; }
}

Это довольно простой класс. Мы объявили два метода tiger () и lion (), которые возвращают тигра и льва в качестве результатов соответственно. Давайте соберем все это вместе в файле struts.xml

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <package name = "default" extends = "struts-default">
      <result-types>
         <result-type name = "tiles" 
         class="org.apache.struts2.views.tiles.TilesResult" />
      </result-types>

      <action name = "*Menu" method = "{1}" 
         class = "com.tutorialspoint.struts2.MenuAction">
         <result name = "tiger" type = "tiles">tiger</result>
         <result name = "lion" type = "tiles">lion</result>
      </action>

   </package>
</struts>

Давайте проверим, что мы сделали в вышеуказанном файле. Прежде всего, мы объявили новый тип результата, названный «плитки», так как теперь мы используем плитки вместо простого jsp для технологии представления. Struts2 поддерживает тип результата Tiles View, поэтому мы создаем тип результата «tile» для класса «org.apache.struts2.view.tiles.TilesResult».

Далее, мы хотим сказать, если запрос относится к /tigerMenu.action, перенаправить пользователя на страницу плиток тигра, а если запрос к /lionMenu.action, перенаправить пользователя на страницу плиток льва.

Мы достигаем этого, используя немного регулярных выражений. В нашем определении действия мы говорим, что все, что соответствует шаблону «* Меню», будет обработано этим действием. Соответствующий метод будет вызван в классе MenuAction. То есть tigerMenu.action будет вызывать tiger (), а lionMenu.action будет вызывать lion (). Затем нам нужно отобразить результат результата на соответствующие страницы листов.

Теперь щелкните правой кнопкой мыши на имени проекта и выберите « Экспорт»> «Файл WAR», чтобы создать файл «War». Затем разверните эту WAR в каталоге веб-приложений Tomcat. Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресу http: // localhost: 8080 / HelloWorldStruts2 / tigerMenu.jsp . Это создаст следующий экран —

Интеграция Struts и Tiles

Точно так же, если вы перейдете на страницу lionMenu.action, вы увидите страницу льва, которая использует тот же макет плиток.