Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Struts 1.x với NetBeans

Trong bài này, tôi sẽ giới thiệu với các bạn 1 ví dụ về làm việc với Struts 1x trong môi trường tích hợp phát triển NetBeans 6. Bạn có thể download NetBeans tại địa chỉ http://www.netbeans.org/.

Ta sẽ phát triển một ứng dụng demo có tên LogonApp với mục đích cho người dùng nhập vào username, password, nếu username=ty, password=teo thì thành công và chuyển tới trang success.jsp còn không thì sẽ chuyển đến trang failed.jsp.

Sau khi cài đặt và khởi động thành công NetBeans, vào menu File->New Project, chọn lựa Web categories, project là Web Application như hình sau

strut1netbeans_01

Nhấn Next, đặt tên cho project là LogonApp. Nhấn Next, chọn server là Apache Tomcat. Nhấn Next, chọn Framework là Struts 1.2.9 như hình
strut1netbeans_02

Nhấn Finish để hoàn tất việc tạo project. Trong cửa sổ Project ta có cấu trúc của project chúng ta mới thêm vào như sau:
strut1netbeans_03

Bạn có thể xóa 2 file jsp index.jsp và welcomeStruts.jsp để thêm vào các trang của chúng ta bằng cách chọn file cần xóa, nhấn phím Delete, chấp nhận các cảnh báo.

Bây giờ bạn thêm vào 1 Struts ActionForm Bean bằng cách nhấn phải chuột lên thư mục Source packages chọn New->Others, chọn Categories và file types như hình sau
strut1netbeans_04

Nhấn Next, gõ Class Name của action form là  LogonActionForm, gõ ở mục package tên gói là vovanhai.wordpress.com. Nhấn Finish để hoàn tất việc thêm form.

Mặc định, NetBeans sẽ tự động tạo 1 bean gồm 2 thuộc tính name và number cùng các phương thức setters, getters,…. Bạn xóa bỏ các thuộc tình và các phương thức trong lớp này thêm vào các thuộc tính của chúng ta mong muốn. Code hoàn chỉnh của form này như sau:

package vovanhai.wordpress.com;

public class LogonActionForm extends org.apache.struts.action.ActionForm {
private String username;
private String password;

public LogonActionForm(){
super();
}
public LogonActionForm(String userName, String password) {
this.username = userName;
this.password = password;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}
}

Tiếp tục, ta thêm vào 1 Struts Action như  cách thêm ở trên nhưng chọn File types là Struts Action. Đặt tên cho nó là LogonAction, nhấn Next, chọn các cấu hình như hình sau:
strut1netbeans_05

Nhấn Next, cấu hình tiếp theo như hình sau

strut1netbeans_06

Nhấn Finish. Code của action được cho như sau:

package vovanhai.wordpress.com;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;

public class LogonAction extends org.apache.struts.action.Action {
/* forward name=”success” path=”” */

private final static String SUCCESS = “success”;
private final static String FAILED = “failed”;

/**
* This is the action called from the Struts framework.
* @param mapping The ActionMapping used to select this instance.
* @param form The optional ActionForm bean for this request.
* @param request The HTTP Request we are processing.
* @param response The HTTP Response we are processing.
* @throws java.lang.Exception
* @return
*/

@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LogonActionForm frm = (LogonActionForm) form;
//bạn có thể dùng JDBC để kiểm tra username và password
//trong cơ sở dữ liệu ở đây.

if (frm.getUsername().equalsIgnoreCase(“ty”) &&
frm.getPassword().equals(“teo”)) {
return mapping.findForward(SUCCESS);
}
return mapping.findForward(FAILED);
}
}

Bây giờ chúng ta thêm vào các trang JSP. Chúng ta có tất cả 3 trang jsp là logon.jsp, success.jsp, failed.jsp

Nhấn phải chuột lên thư mục Web Pages của project, chọn New -> JSP, đặt tên là logon, nhấn Finish.

Code cho trang  này như  sau

<%@page contentType=”text/html” pageEncoding=”UTF-8″%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
http://www.w3.org/TR/html4/loose.dtd”&gt;
<%@ taglib uri=”http://struts.apache.org/tags-html&#8221; prefix=”html”%>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Logon with Struts 1.29</title>
</head>
<body>
<h1 align=”center”>Logon with Struts 1</h1>
<html:form action=”logon.do”>
<table>
<tr>
<td>User Name:</td>
<td><html:text property=”username”/></td>
</tr>
<tr>
<td>Password:</td>
<td><html:password property=”password”/></td>
</tr>
<tr><td colspan=”2″><html:submit/></td></tr>
</table>
</html:form>
</body>
</html>

Thêm vào trang success.jsp, code như sau:

<%@page contentType=”text/html” pageEncoding=”UTF-8″%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
http://www.w3.org/TR/html4/loose.dtd”&gt;
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Logon with Struts 1.29</title>
</head>
<body>
<h2>Welcome! bạn đã đăng nhập thành công</h2>
</body>
</html>

Thêm trang failed.jsp, code như sau

<%@page contentType=”text/html” pageEncoding=”UTF-8″%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
http://www.w3.org/TR/html4/loose.dtd”&gt;
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Logon with Struts 1.29</title>
</head>
<body>
<h2>Vui lòng nhập username và password cho đúng</h2>
</body>
</html>

Cấu hình thực thi cho ứng dụng:
Mở file struts-config.xml trong thư mục WEB-INF của project, thay đổi nội dung như sau:

<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!DOCTYPE struts-config PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 1.2//EN”
http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd”&gt;
<struts-config>

<form-beans>
<form-bean name=”logonActionForm” type=”vovanhai.wordpress.com.LogonActionForm”/>
</form-beans>

<action-mappings>
<action name=”logonActionForm” path=”/logon” scope=”session” type=”vovanhai.wordpress.com.LogonAction”>
<forward name=”success” path=”/success.jsp”/>
<forward name=”failed” path=”/failed.jsp”/>
</action>

</action-mappings>
</struts-config>

Thực thi trang logon.jsp bằng cách nhấn chuột phải lên trang, chọn Run File. Kết quả như sau:

strut1netbeans_07

Nhập UserName: ty, Password teo ta được:

strut1netbeans_08
Nhập UserName bất kỳ hoặc Password sai ta được:
strut1netbeans_09

Chúc các bạn thành công!

32 Responses to “Struts 1.x với NetBeans”

  1. kallich said

    Thanks. but i can not run Logon.jsp.

    D:\C.Q.CHIEN\JAVA\Struts 1.x\LogonApp\nbproject\build-impl.xml:550: The module has not been deployed.
    BUILD FAILED (total time: 9 seconds)

  2. TuanNA said

    Click phải chuột vao project và chọn Deploy (hoặc đơn giản là nhấn phím F6). Lúc tạo project bạn đã chọn runtime la Tomcat chưa, sau khi project đã được deployed thì phải chuột vào logon.jsp và chọn Run File là được

  3. jacky said

    library-inclusion-in-manifest:
    compile:
    compile-jsps:
    org.apache.jasper.JasperException: file:C:/Documents and Settings/Administrator/Desktop/LogonApp/build/web/logon.jsp(1,22) quote symbol expected
    org.apache.jasper.JasperException: quote symbol expected
    C:/Documents and Settings/Administrator/Desktop/LogonApp/build/web/logon.jsp(1,22)
    C:\Documents and Settings\Administrator\Desktop\LogonApp\nbproject\build-impl.xml:440: Java returned: 1
    BUILD FAILED (total time: 0 seconds)
    —————————————————–
    tôi làm đúng như hướng dẫn nhưng bị lỗi trên.
    đồng thời ở file LogonAction báo lỗi là phải tạo class success và failed??????
    vậy là sao?? mong anh giải thích sớm!!

  4. vovanhai said

    Lỗi ở chỗ: “C:/Documents and Settings/Administrator/Desktop/LogonApp/build/web/logon.jsp(1,22) quote symbol expected”
    có các vấn đề:
    – Bạn lưu ở đó thì sao mà nó chạy được,nó phải ở trong 1 web server chứ!
    – Lỗi “quote symbol expected” có nghĩa là file thiếu dấu nháy “

  5. Bảo Long said

    Em chào thầy ạh! Em đã làm rồi nhưng nó báo lối
    No getter method for property: “username” of bean: “TestLab.LoginActionForm”

    Mặc dù em đã tạo setter và getter rồi !
    Đây là link bài tập đó ạ! Rất mong thầy xem giúp ạ
    Login.rar

  6. Bảo Long said

    Em chào thầy ạ! Em đã làm nhưng bị báo lỗi

    No getter method for property: “username” of bean: “TestLab.LoginActionForm”

    Mặc dù em đã thiết lập phương thức setter và getter rồi ạ!
    Mong thầy giúp em !

  7. matcuoi88 said

    dấu nháy trên trang này với dấu nháy trong code khác nhau mà. bạn fai sửa lại nó mới chạy đc.

  8. nhieumat said

    Em chạy ct này nhưng nó báo không link được đến logon.do:
    javax.servlet.ServletException: Cannot retrieve definition for form bean logonActionForm on action logon.do

    Anh có thể giải thích giùm không ạ?

  9. vovanhai said

    Em xem trong file cấu hình struts-config.xml thử xem em có định nghĩa bean có tên logonActionForm chưa.

  10. phuongvm said

    thầy ơi! em muốn trang trí các trang jsp (thành công-thất bại) làm bằng file css.thi em fải làm như nào? kết nối ra sao?

  11. doanhit said

    Cho em hỏi chút. Em làm theo cách này nhưng login lần đầu thì ok, nhưng sau khi login mà minh đánh mật khẩu bị sai chẳng hạn, thì lập tức từ đó mình có đánh mật khẩu đúng nó cũng nhảy về trang false.jsp. Giúp em nhé

  12. Toan GT said

    Nói thật là bạn viết bài này rất hay và cơ bản. Tớ thực hành theo là
    làm được ngay. Cảm ơn nhiều nhé. Tiếp tục viết ajax, dojo, flex hay như thế này nhé.

  13. Ngoc said

    Chào thầy, sau khi e đăng nhập xong thì ko vào được trang success.jsp hay fail.jsp, chỉ cảnh báo ngoại lệ:
    javax.servlet.ServletException: java.lang.NullPointerException

    Mong thầy giúp em

  14. luonvuive said

    chào anh hải.cho em hỏi:Khi em Login vào thì em cần phân quyền Admin và Manager.Trong database thì có(UserName,password,RoleId(smallint)) em phải viết file java như thế nào.Em cho Admin 1 Manager 0.

  15. Em thưa Thầy.
    Em làm một bài thế này ạ.

    Em lưu đường dẫn ảnh trong database. Rồi em đọc ra cho vào một list.
    Tiếp đó em muốn hiển thị một loạt ảnh bằng cách duyệt thông qua thẻ

    Khi em làm thế thì báo lỗi.

    Thầy có ví dụ nào thao tác về ảnh tương tự không ạ.

    Thầy giúp em với.
    Em cảm ơn Thầy!

  16. Quân said

    Thầy ơi… Thầy giúp em với… Giờ em có một bảng thành phố và 1 bảng quận huyện trong SQL server 2005…
    Em dùng Struts 1.x
    Giờ em load danh sách thành phố ra 1 dropdownlist Giờ thầy giúp em code làm sao để khi mình chọn một thành phố nào đó thì ở Dropdownlist quận huyện sẽ hiện lên các quận huyện tương ứng với thành phố đó… Thầy giúp em nhé!

  17. Võ Văn Hải said

    Tham khảo bài viết xử lý ngày trên blog này nhé!

  18. Võ Văn Hải said

    trời. bạn dùng mệnh đề where trong câu sql là xong ngay mà!

  19. Nhân said

    Thầy ơi… sao em làm từng bước theo hướng dẫn. Khi run file logon.jsp thì chỉ hiện ra hai dòng chữ UserName và Password thôi. 2 cái textfield và button submit thì không thấy hiện ra. Vậy là lỗi gì vậy thầy.

  20. tuấn said

    Bài viết rất hay và rễ hiểu, em cảm ơn thầy.

  21. tai tai said

    Chào thầy!
    em làm rồi mà nó lại báo như thế này
    type Status report

    message No action instance for path /logon could be created

    description The server encountered an internal error (No action instance for path /login could be created) that prevented it from fulfilling this request.

  22. tai tai said

    tai tai said
    Your comment is awaiting moderation.
    August 20, 2011 at 2:51 pm

    Chào thầy!
    em làm rồi mà nó lại báo như thế này
    type Status report

    message No action instance for path /logon could be created

    description The server encountered an internal error (No action instance for path /logon could be created) that prevented it from fulfilling this request.

  23. Võ Văn Hải said

    Xem kỹ lại từng bước xem thế nào.

  24. Tuan thanh said

    thầy cho e hỏi tạo một master page jsp thế nào

  25. Võ Văn Hải said

    Em tìm hiểu về tile framework. Struts dùng tile để dàn trang.

  26. minh said

    em chào thầy!
    thầy có thể chỉ em run 1 trang HTML trong netbean 7.0 được ko ạ.
    em chạy thì nó báo lổi localhost.
    em đã cài xampp.

  27. Võ Văn Hải said

    Trước hết bạn cài đặt Tomcat đi sau đó tạo 1 web project, tạo 1 trang html, nhấn chuột hải lên cửa sổ soạn thảo, chọn Run File.
    (Tham khảo thêm rất nhiều bài trong blog này).

  28. tanpham said

    Chào thầy!
    Thầy có thể giải thích giúp em sự khác biệt khi dùng Struts 1.x so với cách kiểm tra xử lý đăng nhập bình thường bằng Servlet? Vì em nhận thấy dùng Struts phức tạp mà cách thực thi cũng như trong Servlet.
    VD: trong Servlet em xử lý như sau:
    if(request.getParameter(“username”).equal(“ty”) && request.getParameter(“password”).equal(“teo”))
    {
    request.sendRedirect(“/success.jsp”);
    }
    else
    {
    request.sendRedirect(“/false.jsp”);
    }

  29. fullyit said

    Thưa thấy ! Thế người dùng vào trực tiếp luôn trang success.jsp hoặc vào failure.jsp mà ko thông qua trong login, bâyh mình muốn khi người dùng vào đó thì bị đẩy ra trang Login thì làm thế nào ạ, Em rất băn khoăn về vấn đề này trong Java Web

  30. H.Anh said

    Thầy ơi… sao em làm từng bước theo hướng dẫn. Khi run file logon.jsp thì chỉ hiện ra hai dòng chữ UserName và Password thôi. 2 cái textfield và button submit thì không thấy hiện ra. Vậy là lỗi gì vậy thầy.

    –> Mình cũng bị lỗi này và đã tìm ra cách giải quyết đó là :

    1. Khi tạo Web application phải tích chọn ô : Add Struts TLDs (các thư viện Tag lib của struts)
    2. Trên cùng của trang logon.jsp phải khai báo : thì trang JSP mới nhận được các control hay ….

  31. Xin Thầy giúp đỡ! em tạo 1 project với tên mặc định và chạy thử file index.jsp nhưng nó hiện lỗi này và xóa toàn bộ project em vừa tạo??
    Cannot find the Web Pages folder “C:\JaVa\apache-tomcat-7.0.47\webapps\WebApplication\web”.
    Open the project properties and in the Sources category browse the correct Web Pages folder.
    Mong Thầy giúp đỡ ạ!

  32. Phương said

    Thầy ơi khi em run file logon.jsp thì bị lỗi này em sửa không đc, mong thấy giúp em ah
    “The absolute uri: http://struts.apache.org/tags-html&#8221 cannot be resolved in either web.xml or the jar files deployed with this application”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: