11/08/2018, 18:36

Ví dụ login trong Struts2

Cấu hình Struts2 Các công nghệ sử dụng trong ví dụ này eclipse mar2 apache-tomcat-7.0.75 struts-2.3.3 jdk 1.8 Maven 3.5 Cấu trúc của project “struts2-login-example” Tạo project “struts2-login-example” Tạo project bằng cách ...

Cấu hình Struts2

Các công nghệ sử dụng trong ví dụ này

  • eclipse mar2
  • apache-tomcat-7.0.75
  • struts-2.3.3
  • jdk 1.8
  • Maven 3.5

Cấu trúc của project “struts2-login-example”

Ví dụ login trong struts2

Tạo project “struts2-login-example”

Tạo project bằng cách chọn File–>New–>Dynamic Web Project.

Add struts2 library

Cách 1: Sao chép các tập tin sau từ struts2 thư mục lib C:libstruts-2.3.3lib vào thư mục WEB-INFlib của project. Để thực hiện việc này, bạn chỉ cần kéo và thả tất cả các tệp sau vào thư mục WEB-INFlib.

  • asm-xy.jar
  • asm-commons-xy.jar
  • asm-tree-xy.jar
  • commons-fileupload-xyz.jar
  • commons-langxy.jar
  • commons-io-xy.jar
  • freemarker-xyz.jar
  • javassist-.xyz.GA
  • ognl-xyz.jar
  • struts2-core-xyz.jar
  • xwork-core.xyz.jar

Cách 2: convert project sang maven project rồi add dependency vào file pom.xml như sau:

<dependencies>
   
  <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.3</version>
  </dependency>
</dependencies>

Cấu hình web.xml

Sửa file web.xml 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" 
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>struts2-login-example</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>

Tạo file struts.xml

Tạo file strtus.xml tại thư mục resources của project:

<?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="default" namespace="/" extends="struts-default">
        <action name="login" class="vn.viettuts.action.LoginAction" method="login">
            <result name="success">/welcome.jsp</result>
            <result name="error">/index.jsp</result>
        </action>
    </package>
</struts>

Tạo trang chứa login form

Tạo file index.jsp tại thư mục WebContent của project. Trong file này chúng ta định nghĩa một form gồm 2 thuộc tính có tên userNamepassword.

File: index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ 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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts2 - Login Example</title>
<style type="text/css">
.error-msg {
  color: red;
}
</style>
</head>
<body>
  <s:form id="loginForm" class="loginForm" theme="css_xhtml">
    <div class="error-msg">
      <s:actionerror />
    </div>
    <table class="login">
      <tbody>
        <tr>
          <td><s:label value="UserName:" for="userName" /></td>
          <td><s:textfield name="userName" id="userName" /></td>
        </tr>
        <tr>
          <td><s:label value="Password:" for="password" /></td>
          <td><s:password name="password" id="password" /></td>
        </tr>
        <tr>
          <td><s:submit name="login" value="Login" 
                        onclick="this.form.action='login'" />
          </td>
        </tr>
      </tbody>
    </table>
  </s:form>
</body>
</html>

Tạo trang welcome.jsp

Tạo file welcome.jsp tại thư mục WebContent của project. Trang này hiện thị tên userName được nhập từ trang index.jsp.

File: welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ 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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts2 - Welcome</title>
</head>
<body>
  Welcome, 
  <s:property value="userName" />
</body>
</html>

Tạo action

Tạo action login LoginAction.java tại package vn.viettuts.action của project.

File: LoginAction.java

package vn.viettuts.action;

import com.opensymphony.xwork2.ActionSupport;
import vn.viettuts.common.Constant;

public class LoginAction extends ActionSupport {
    private String userName;
    private String password;

    /**
     * login method
     * 
     * @return success or error
     */
    public String login() {
        if (!(Constant.USERNAME.equals(userName) 
                && Constant.PASSWORD.equals(password))) {
            addActionError(Constant.INVALID_ACCOUNT_MSG);
            return ERROR;
        }
        return SUCCESS;
    }

    // define setter & setter
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
Note: Chúng ta định nghĩa các thuộc tính userNamepassword có tên trùng với thuộc tính name được định nghĩa trong các thẻ input trong form của trang jsp. Và phải cài đặt các phương thức getter, setter cho các thuộc tính đó vì struts framework làm việc trực tiếp với các phương thức này để truyền dữ liệu từ jsp đến action và ngược lại.

Tạo lớp Constant.java

Tạo lớp Constant.java tại package vn.viettuts.common của project. Vì đây là ứng dụng nhỏ chưa có kết nối đến database nên chúng ta định nghĩa các username, password, và error mesage giả định trong lớp Constant.java.

File: Constant.java

package vn.viettuts.common;

public class Constant {
    public static final String USERNAME = "admin";
    public static final String PASSWORD = "123456";
    public static final String INVALID_ACCOUNT_MSG = 
            "username or password is incorrect!";
}

Thực thi project “struts2-login-example”

Hiển thị ban đầu:

Ví dụ login trong struts2

Login fail:

Ví dụ login trong struts2

Login success:

Ví dụ login trong struts2

Download Source Code

Download source code + thư viện:

Download source code maven:

Cấu hình Struts2
0