Chương trình Hello World trong Struts 2



Chương này, chúng ta sẽ xây dựng một chương trình Struts 2 đầu tiên có tên là HelloWorld bởi sử dụng Eclipse IDE. Trước hết, chúng ta cần tạo 4 thành phần cho bất cứ Struts 2 project nào.

Action: Tạo một lớp Action chứa trình logic và điều khiển tương tác giữa người dùng, model và view.

Interceptor: Tạo Interceptor nếu cần thiết, hoặc sử dụng bất cứ Interceptor nào đã tồn tại. Đây là một phần của Controller.

View: Tạo một JSP để tương tác với người dùng để nhận input và để biểu diễn các thông điệp cuối cùng.

Các file cấu hình: Tạo các file cấu hình cho Action, View và Controller. Các file này là struts.xml, web.xml và struts.properties.

Mình sử dụng Eclipse IDE, do đó tất cả các thành phần cần thiết sẽ được tạo dưới một Dynamic Web Project. Do đó, chúng ta bắt đầu với việc tạo Dynamic Web Project.

Tạo một Dynamic Web Project

Bắt đầu Eclipse và sau đó File > New > Dynamic Web Project và nhập tên project là HelloWorldStruts2 và thiết lập các tùy chọn còn lại như hình sau:

Hello World trong Sturts 2

Bây giờ vào Windows > Show View > Project Explorer, và bạn sẽ thấy cửa sổ project của bạn như sau:

Hello World trong Sturts 2

Bây giờ sao chép các file sau từ struts 2 lib folder C:\struts-2.2.3\lib tới WEB-INF\lib folder. Để làm điều này, bạn chỉ cần kéo và thả tất cả các file sau vào trong WEB-INF\lib folder.

  • commons-fileupload-x.y.z.jar

  • commons-io-x.y.z.jar

  • commons-lang-x.y.jar

  • commons-logging-x.y.z.jar

  • commons-logging-api-x.y.jar

  • freemarker-x.y.z.jar

  • javassist-.xy.z.GA

  • ognl-x.y.z.jar

  • struts2-core-x.y.z.jar

  • xwork-core.x.y.z.jar

Tạo lớp Action trong Struts 2

Tạo một java file là HelloWorld.java dưới Java Resources > src với một tên package là com.vietjack.struts2 có nội dung như sau:

package com.vietjack.struts2;

public class HelloWorldAction{
   private String name;

   public String execute() throws Exception {
      return "success";
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

Tạo một View trong Struts 2

Tạo jsp file là HelloWorld.jsp trong WebContent folder trong project của bạn. Để làm điều này, bạn nhấn chuột phải vào WebContent folder và chọn New >JSP File.

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
   Hello World, <s:property value="name"/>
</body>
</html>

Taglib directive nói cho Servlet Container rằng page này sẽ sử dụng Struts 2 tag và các thẻ này sẽ được đặt trước bởi ký tự s. Thẻ s:property hiển thị giá trị của thuộc tính name của lớp action, mà được trả về bởi phương thức getName() của lớp HelloWorldAction.

Tạo index.jsp trong Struts 2

Bạn cần tạo index.jsp trong WebContent folder. File này đóng vai trò như là Action URL ban đầu, là nơi người dùng có thể click vào để nói cho Struts 2 Framework để gọi phương thức đã định nghĩa của lớp HelloWorldAction và truyền HelloWorld.jsp view.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
   pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
   <h1>Hello World From Struts2</h1>
   <form action="hello">
      <label for="name">Nhap ten cua ban</label><br/>
      <input type="text" name="name"/>
      <input type="submit" value="Xin chao!"/>
   </form>
</body>
</html>

hello action được định nghĩa trong view file trên sẽ được ánh xạ tới lớp HelloWorldAction và phương thức execute của nó sử dụng struts.xml file.

Các file cấu hình trong Struts 2

Chúng ta cần một ánh xạ để kết nối URL, lớp HelloWorldAction (là Model) và HelloWorld.jsp (là view) lại với nhau. Ánh xạ này nói cho Struts 2 Framework rằng lớp nào sẽ phản hồi tới action của người dùng, phương thức nào của lớp đó sẽ được thực thi, và view nào để hiển thị dựa trên chuỗi kết quả mà phương thức trả về.

Bạn tạo một file là struts.xml dưới WebContent/WEB-INF/classes folder bằng cách nhấn chuột phải vào WEB-INF folder và chọn New > Folder. struts.xml sẽ trông giống như:

<?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.devMode" value="true" />
   <package name="helloworld" extends="struts-default">
     
      <action name="hello" 
            class="com.vietjack.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>
   </package>
</struts>

Bước tiếp theo là tạo web.xml file, mà là một điểm entry cho bất cứ request nào tới Struts 2. Tại đây, chúng ta sẽ định nghĩa một entry là một lớp oforg.apache.struts2.dispatcher.FilterDispatcher trong web.xml. web.xml này cần được tạo dưới WebContent. Eclipse đã tạo sẵn cho bạn khi bạn tạo project, giờ bạn chỉ cần sửa đổi nó như sau:

<?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_3_0.xsd"
   id="WebApp_ID" version="3.0">
   
   <display-name>Struts 2</display-name>
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

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

Tiếp đó, bạn có thể kích hoạt toàn bộ tính năng log trong khi làm việc với Struts 2 bằng cách tạo logging.properties file dưới WEB-INF/classes folder. Giữ hai dòng sau trong file này.

 
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = \
                              java.util.logging.ConsoleHandler

Cuối cùng, bạn thực thi ứng dụng. Bạn nhấn chuột phải vào tên project và chọn Export > WAR File để tạo một war file. Triển khai WAR này, sau đó khởi động Tomcat Server và truy cập URL là http://localhost:8080/HelloWorldStruts2/index.jsp.

Ghi nhớ rằng bạn có thể định nghĩa index như là một action trong struts.xml file và trong trường hợp đó bạn có thể gọi index page dưới dạng http://localhost:8080/HelloWorldStruts2/index.action. Bạn theo dõi cách định nghĩa index như là một action trong đoạn code sau:

<?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.devMode" value="true" />
   <package name="helloworld" extends="struts-default">

      <action name="index">
            <result >/index.jsp</result>
      </action>

      <action name="hello" 
            class="com.vietjack.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>

Các bài học Struts 2 phổ biến khác tại VietJack: