[Lập trình JSP – Servlet] Bài 5: Hiển thị sản phẩm theo danh mục

Lập trình JSP – Servlet cho phép các nhà phát triển phần mềm xây dựng nội dung động cho website sử dụng nền tảng Java. Tiếp ngay sau đây sẽ là phần hướng dẫn hiển thị sản phẩm theo danh mục trong loạt video hướng dẫn xây dựng website bán hàng bằng JSP – Servlet mong các bạn chú ý đón xem.

Ở bài trước chúng ta làm chức năng hiển thị danh mục sản phẩm, ở bài viết này sẽ làm phần kế tiếp là hiển thị sản phẩm theo danh mục tương ứng. Như ở các bài trước, bạn đã tạo giao diện trang hiển thị sản phẩm cũng như cơ sở dữ liệu cho sản phẩm bao gồm một số thuộc tính cơ bản như mã sản phẩm, mã danh mục, tên sản phẩm…

Bước 1: Đầu tiên, bạn viết phương thức getListProductByCategory(String ma_danh_muc) dùng để lấy danh sách sản phẩm dựa vào mã danh mục. Trong đó, phương thức trên sẽ trả về danh sách sản phẩm, nhận vào mã danh mục.

Như đoạn mã trên bạn sẽ thấy, đầu tiên mình sẽ tạo kết nối đến cơ sở dữ liệu, sau đó thực hiện câu truy vấn SQL để trả về đối tượng ResultSet bằng cách gọi phương thức executeQuery()

Sau đó bạn có thể lấy dữ liệu ra từ ResultSet và gán vào đối tượng Product với các thuộc tính tương ứng.

Bước 2: Để có thể hiển thị sản phẩm theo danh mục, bạn cần truyền tham số mã danh mục từ trang category.jsp sang trang product.jsp

Bằng cách gọi phương thức getParameter("category") thì bạn có thể lấy được tham số truyền qua.

Bước 3: Hiển thị danh sách sản phẩm ở trang product.jsp
Sử dụng  phương thức getListProductByCategory() để trả về danh sách sản phẩm cần hiển thị.

Để có thể hiển thị giá trị ra màn hình, bạn có thể gọi thông qua <%= %> chẳng hạn <%=p.getProductName()%>

Bạn có thể xem video hướng dẫn hiển thị sản phẩm theo danh mục trong lập trình JSP – Servlet:

Hoặc bạn có thể tải mã nguồn cho bài viết lập trình JSP – Servlet hiển thị sản phẩm theo danh mục ở đường dẫn sau:

Download link 123link

Download link Vipshare

Xem thêm một số bài viết liên quan lập trình JSP – Servlet:

Video hướng dẫn xây dựng website bán hàng sử dụng JSP – Servlet:
Bài 1: Hướng dẫn cài đặt, cấu hình cơ bản
Bài 2: Hướng dẫn thiết kế giao diện cho website
Bài 3: Hướng dẫn sử dụng JDBC kết nối cơ sở dữ liệu MySQL
Bài 4: Hiển thị danh mục sản phẩm
Bài 6: Hiển thị thông tin chi tiết sản phẩm

Lời kết: Như vậy chúng ta vừa tìm hiểu về hướng dẫn hiển thị sản phẩm theo danh mục trong loạt bài xây dựng website bán hàng bằng JSP – Servlet. Ngoài ra, các bạn có thể xem thêm các bài viết khác trong chuyên mục lập trình JSP – Servlet để có thể tự xây dựng hoàn chỉnh một website cho riêng mình.

(Tác giả: Tùng Dương)

34 thoughts on “[Lập trình JSP – Servlet] Bài 5: Hiển thị sản phẩm theo danh mục

  1. bạn ơi cho mình hỏi mình bị lỗi ntn là sao
    Exception in thread “main” com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘FORM product WHERE category_id =’ 2” at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2794)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2322)
    at com.mysql.jdbc.CallableStatement.executeQuery(CallableStatement.java:955)
    at dao.ProductDao.getListProductByCategory(ProductDao.java:25)
    at dao.ProductDao.main(ProductDao.java:41)
    C:\Users\Administrator\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
    BUILD FAILED (total time: 1 second)

    1. cái này bạn đang viết hàm lấy danh sách san phâm dựa theo mã thể loại đúng ko, bạn xem cái mã thể loại bạn truyền vào có trong csdl ko

  2. bạn ơi mình bị lỗi như vậy là bị sao, bạn chỉ mình với, thks

    HTTP Status 500 – Internal Server Error

    type Exception report

    messageInternal Server Error

    descriptionThe server encountered an internal error that prevented it from fulfilling this request.

    exception

    org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: “”
    root cause

    java.lang.NumberFormatException: For input string: “”
    note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1.1 logs.

    GlassFish Server Open Source Edition 4.1.1

    1. Mình thấy nó báo lỗi java.lang.NumberFormatException, bạn kiểm tra xem dữ liệu lấy kiểu String có bằng “” hay không?

  3. anh ơi phương thức hiện thị các sản phẩm cùng loại như thế này

    <a href="single.jsp?productID=”><img src="” alt=”” />

    <a href="single.jsp?productID=”>

    <a href="single.jsp?productID=” class=”hvr-shutter-in-vertical hvr-shutter-in-vertical2 “>ADD TO CART
    $

    category_id bị lỗi, anh thể giúp em được không, em cảm ơn

  4. ad ơi mình bị lỗi ở cái chỗ PreparedStatement ps = con.prepareCall(sql); nó cứ báo đỏ là can not convert from Callbablestatement to PrepareStatement là bị sao ạ

    1. Nếu mà bạn dùng PreparedStatement thì gọi như sau:
      PreparedStatement ps = (PreparedStatement) cons.prepareStatement(sql);
      Hoặc dùng CallableStatement thì sử dụng:
      CallableStatement call = (CallableStatement) cons.prepareCall(sql);

  5. HTTP Status 500 – Internal Server Error
    type Exception report

    messageInternal Server Error

    descriptionThe server encountered an internal error that prevented it from fulfilling this request.

    exception

    org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: “”
    root cause

    java.lang.NumberFormatException: For input string: “”
    note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1.1 logs.

    Em bị lỗi này khi chạy trang product.jsp ạ. a xem hộ e với xem lỗi gì ạ

  6. Message An exception occurred processing JSP page [/product.jsp] at line [98]

    Description The server encountered an unexpected condition that prevented it from fulfilling the request.

    Exception
    org.apache.jasper.JasperException: An exception occurred processing JSP page [/product.jsp] at line [98]

    95:
    96:
    97:
    100:
    101:

    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:481)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

    Root Cause
    java.lang.NumberFormatException: For input string: “”
    java.lang.NumberFormatException.forInputString(Unknown Source)
    java.lang.Long.parseLong(Unknown Source)
    java.lang.Long.parseLong(Unknown Source)
    org.apache.jsp.product_jsp._jspService(product_jsp.java:214)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

    Note The full stack trace of the root cause is available in the server logs.

    Em sử dụng eclipse khi chạy product.jsp thì bị lỗi như vậy ad ơi mong ad giúp e sớm

    1. Lỗi này là do category_id = “” —> báo lỗi java.lang.NumberFormatException: For input string: “”
      Bạn kiểm tra lại category_id.

  7. Mình có thể đổi phần giá sản phẩm thành tiền tệ tiếng việt được không vậy ad?
    Mong bạn hướng dẫn phần này, mình ghi trong csdl là tiền tệ việt nam đồng mà nó tự đổi qua usd không à.

  8. Chào anh/chị, làm thế nào để cho một sản phẩm chứa trong nhiều danh mục khác nhau vậy ạ , giúp em với!

  9. 62:
    63:
    64:
    67:
    68:

    Stacktrace:] with root cause
    java.lang.NullPointerException
    at DAO.SinhVienDAO.getListSV(SinhVienDAO.java:16)
    at org.apache.jsp.qlytk_jsp._jspService(qlytk_jsp.java:187)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:412)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1385)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

    Lỗi này fix như nào thế ad??

  10. ad ơi cho em hỏi với ạ: cái đoạn code mà truyền category_id từ bên category.jsp sang bên product.jsp nó nằm ở chỗ nào ạ. em tìm mãi nhưng không thấy. em cảm ơn ạ

      1. ad chỉ chi tiết cho em đoạn code sử lí gửi thông tin gửi đi với ạ… Nó dùng java:usebean hay là setParameter bình thường hay kiểu gì khác được không ạ

  11. admin ơi còn suport ko ạ, em làm từ bài 1 đến đây tắc
    type Exception report

    messageInternal Server Error

    descriptionThe server encountered an internal error that prevented it from fulfilling this request.

    exception

    org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP

    PWC6199: Generated servlet error:
    source value 1.5 is obsolete and will be removed in a future release

    1. Chào bạn,

      Hình như bạn đang sài JDK 1.5 hay sao, bạn nâng cấp lên JDK 1.7 hay 1.8 thử còn lỗi biên dịch ko?

      Xin cám ơn!

  12. Mình đã lấy được danh mục ở top.jsp
    nhưng khi nhúng nó vào trang index.jsp tức trang chủ. Thì k thể hiển thị danh mục được.
    Mong AD hưởng dẫn cách lấy được danh mục khi đã nhúng qua trang khác.

  13. ad ơi..e bị lỗi như này thì làm sau:
    Launching GlassFish on Felix platform
    Dec 02, 2018 10:27:58 PM com.sun.enterprise.glassfish.bootstrap.osgi.BundleProvisioner createBundleProvisioner
    INFO: Create bundle provisioner class = class com.sun.enterprise.glassfish.bootstrap.osgi.BundleProvisioner.
    Dec 02, 2018 10:27:59 PM com.sun.enterprise.glassfish.bootstrap.osgi.BundleProvisioner$DefaultCustomizer getLocations
    WARNING: Skipping entry because it is not an absolute URI.
    Dec 02, 2018 10:27:59 PM com.sun.enterprise.glassfish.bootstrap.osgi.BundleProvisioner$DefaultCustomizer getLocations
    WARNING: Skipping entry because it is not an absolute URI.
    Dec 02, 2018 10:27:59 PM com.sun.enterprise.glassfish.bootstrap.osgi.BundleProvisioner startBundles
    WARNING: Can not start bundle file:/C:/Program%20Files%20(x86)/glassfish-4.1.1/glassfish/modules/core.jar because it is not contained in the list of installed bundles.
    ….. more than….

  14. A ơi e làm y như a sao lúc hiện danh sách sản phẩm ra luôn bị mất 1 sản phẩm đầu tiên xếp theo id trong database

Bình luận

Loading...