Tích hợp Struts 2 & Tiles

Trong chương này, chúng ta hãy đi qua các bước liên quan đến việc tích hợp khung công tác Tiles với Struts2. Apache Tiles là một khuôn khổ tạo mẫu được xây dựng để đơn giản hóa việc phát triển giao diện người dùng ứng dụng web.

Trước hết, chúng ta cần tải xuống các tệp jar gạch từ trang web Apache Tiles . Bạn cần thêm các tệp jar sau vào đường dẫn lớp của dự án.

  • tiles-api-x.y.z.jar
  • tiles-compat-x.y.z.jar
  • tiles-core-x.y.z.jar
  • tiles-jsp-x.y.z.jar
  • tiles-servlet-x.y.z.jar

Ngoài những thứ trên, chúng tôi phải sao chép các tệp jar sau từ tệp tải xuống struts2 trong WEB-INF/lib.

  • commons-beanutils-x.y.zjar
  • commons-digester-x.y.jar
  • struts2-tiles-plugin-x.y.z.jar

Bây giờ hãy để chúng tôi thiết lập web.xmlđể tích hợp Struts-Tiles như được đưa ra bên dưới. Có hai điểm quan trọng cần lưu ý ở đây. Đầu tiên, chúng ta cần cho biết các ô, nơi tìm tệp cấu hình ôtiles.xml. Trong trường hợp của chúng tôi, nó sẽ nằm dưới/WEB-INFthư mục. Tiếp theo, chúng ta cần khởi chạy trình nghe Tiles đi kèm với tải xuống 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>

Tiếp theo hãy để chúng tôi tạo tiles.xml trong thư mục / WEB-INF với nội dung sau:

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

Tiếp theo, chúng tôi xác định bố cục khung cơ bản trong baseLayout.jsp. Nó có năm khu vực có thể tái sử dụng / ghi đè. Cụ thểtitle, banner, menu, bodyfooter. Chúng tôi cung cấp các giá trị mặc định cho baseLayout và sau đó chúng tôi tạo hai tùy chỉnh mở rộng từ bố cục mặc định. Bố cục con hổ tương tự như bố cục cơ bản, ngoại trừ nó sử dụngtiger.jspnhư phần thân của nó và dòng chữ "Tiger" làm tiêu đề. Tương tự, bố cục sư tử tương tự như bố cục cơ bản, ngoại trừ nó sử dụnglion.jsp như phần thân của nó và dòng chữ "Lion" làm tiêu đề.

Hãy để chúng tôi xem xét các tệp jsp riêng lẻ. Sau đây là nội dung củabaseLayout.jsp tập tin -

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

Ở đây, chúng ta chỉ tập hợp một trang HTML cơ bản có các thuộc tính xếp. Chúng tôi chèn các thuộc tính gạch vào những vị trí mà chúng tôi cần. Tiếp theo, chúng ta hãy tạo mộtbanner.jsp tệp với nội dung sau:

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

Các menu.jsp tệp sẽ có các dòng sau là các liên kết - đến các hành động của TigerMenu.action và LionMenu.action struts.

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

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

Các lion.jsp tệp sẽ có nội dung sau:

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

Các tiger.jsp tệp sẽ có nội dung sau:

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

Tiếp theo, hãy để chúng tôi tạo tệp lớp hành động MenuAction.java trong đó có những thứ sau -

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

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

Đây là một lớp khá thẳng tiến. Chúng tôi đã khai báo hai phương thức tiger () và lion () trả về kết quả tương ứng là hổ và sư tử. Hãy để chúng tôi tập hợp tất cả lại với nhau trongstruts.xml tập tin -

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

Hãy để chúng tôi kiểm tra những gì chúng tôi đã làm trong tệp ở trên. Trước hết, chúng tôi đã khai báo một kiểu kết quả mới được gọi là "gạch" vì chúng tôi hiện đang sử dụng các ô thay vì jsp đơn giản cho công nghệ chế độ xem. Struts2 có hỗ trợ cho kiểu kết quả Tiles View, vì vậy chúng tôi tạo kiểu kết quả "gạch" thuộc lớp "org.apache.struts2.view.tiles.TilesResult".

Tiếp theo, chúng tôi muốn nói nếu yêu cầu dành cho /tigerMenu.action đưa người dùng đến trang xếp hổ và nếu yêu cầu dành cho /lionMenu.action đưa người dùng đến trang xếp hình sư tử.

Chúng tôi đạt được điều này bằng cách sử dụng một chút biểu thức chính quy. Trong định nghĩa hành động của chúng tôi, chúng tôi nói rằng bất kỳ thứ gì phù hợp với mẫu "* Menu" sẽ được xử lý bởi hành động này. Phương thức so khớp sẽ được gọi trong lớp MenuAction. Nghĩa là, tigerMenu.action sẽ gọi tiger () và lionMenu.action sẽ gọi ra lion (). Sau đó chúng ta cần ánh xạ kết quả của kết quả vào các trang gạch thích hợp.

Bây giờ nhấp chuột phải vào tên dự án và nhấp vào Export > WAR Fileđể tạo tệp Chiến tranh. Sau đó, triển khai WAR này trong thư mục ứng dụng web của Tomcat. Cuối cùng, khởi động máy chủ Tomcat và cố gắng truy cập URLhttp://localhost:8080/HelloWorldStruts2/tigerMenu.jsp. Điều này sẽ tạo ra màn hình sau:

Tương tự, nếu bạn truy cập vào trang lionMenu.action, bạn sẽ thấy trang sư tử sử dụng cùng một bố cục gạch.