JSP có giống HTML không?

Công nghệ Java Servlet và JavaServer Pages (trang JSP) là các công nghệ phía máy chủ đã thống trị thị trường công nghệ Java phía máy chủ; . Các nhà phát triển Java yêu thích những công nghệ này vì vô số lý do, bao gồm. các công nghệ này khá dễ học và chúng mang mô hình Viết một lần, Chạy mọi nơi cho các ứng dụng web. Quan trọng hơn, nếu được sử dụng hiệu quả bằng cách tuân theo các phương pháp hay nhất, các trang servlet và JSP sẽ giúp tách biệt phần trình bày khỏi nội dung. Các phương pháp hay nhất là các phương pháp đã được chứng minh để phát triển các ứng dụng web dựa trên servlet và JSP có chất lượng, có thể tái sử dụng và dễ bảo trì. Chẳng hạn, mã Java nhúng (tập lệnh) trong các phần của tài liệu HTML có thể dẫn đến các ứng dụng phức tạp, không hiệu quả và khó tái sử dụng, nâng cao và bảo trì. Thực tiễn tốt nhất có thể thay đổi tất cả điều đó

Trong bài viết này, tôi sẽ trình bày các phương pháp hay nhất quan trọng cho các trang servlet và JSP; . bài viết này

  • Trình bày tổng quan về Java servlet và trang JavaServer (trang JSP)
  • Cung cấp các gợi ý, mẹo và hướng dẫn để làm việc với các trang servlet và JSP
  • Cung cấp các phương pháp hay nhất cho các trang servlet và JSP

Tổng quan về Servlet và các trang JSP

Tương tự như tập lệnh Common Gateway Interface (CGI), servlet hỗ trợ mô hình lập trình yêu cầu và phản hồi. Khi máy khách gửi yêu cầu đến máy chủ, máy chủ sẽ gửi yêu cầu đến servlet. Sau đó, servlet sẽ xây dựng một phản hồi mà máy chủ gửi lại cho máy khách. Tuy nhiên, không giống như các tập lệnh CGI, các servlet chạy trong cùng một quy trình như máy chủ HTTP

Khi một yêu cầu của khách hàng được thực hiện, phương thức service được gọi và chuyển một đối tượng yêu cầu và phản hồi. Đầu tiên, servlet xác định xem yêu cầu là hoạt động GET hay POST. Sau đó, nó gọi một trong các phương thức sau. doGet hoặc doPost. Phương thức doGet được gọi nếu yêu cầu là GETdoPost được gọi nếu yêu cầu là POST. Cả doGetdoPost đều nhận yêu cầu (



        ">

4) và phản hồi (


        ">

5)

Nói một cách đơn giản nhất, servlet là các lớp Java có thể tạo nội dung HTML động bằng cách sử dụng các câu lệnh



        ">

6. Tuy nhiên, điều quan trọng cần lưu ý về các servlet là chúng chạy trong một bộ chứa và các API cung cấp khả năng quản lý vòng đời của phiên và đối tượng. Do đó, khi bạn sử dụng servlet, bạn sẽ nhận được tất cả các lợi ích từ nền tảng Java, bao gồm hộp cát (bảo mật), API truy cập cơ sở dữ liệu qua JDBC và khả năng di động đa nền tảng của servlet

Trang máy chủ Java (JSP)

Công nghệ JSP - trừu tượng hóa các servlet ở mức cao hơn - là một đặc điểm kỹ thuật mở, sẵn có miễn phí do Sun Microsystems phát triển như một giải pháp thay thế cho công nghệ Trang máy chủ hoạt động (ASP) của Microsoft và là thành phần chính của Phiên bản Java 2 Enterprise (J2EE . Nhiều máy chủ ứng dụng có sẵn trên thị trường (chẳng hạn như BEA WebLogic, IBM WebSphere, Live JRun, Orion, v.v.) hỗ trợ công nghệ JSP

Các trang JSP hoạt động như thế nào?

Một trang JSP về cơ bản là một trang web với HTML truyền thống và các đoạn mã Java. Phần mở rộng tập tin của một trang JSP là. jsp chứ không phải. html hoặc. htm, cho máy chủ biết rằng trang này yêu cầu xử lý đặc biệt sẽ được thực hiện bằng tiện ích mở rộng máy chủ hoặc trình cắm

Khi một trang JSP được gọi, nó sẽ được biên dịch (bởi công cụ JSP) thành một Java servlet. Tại thời điểm này, servlet được xử lý bởi servlet engine, giống như bất kỳ servlet nào khác. Sau đó, công cụ servlet tải lớp servlet (sử dụng trình tải lớp) và thực thi nó để tạo HTML động để gửi tới trình duyệt, như thể hiện trong Hình 1. servlet tạo bất kỳ đối tượng cần thiết nào và ghi bất kỳ đối tượng nào dưới dạng chuỗi vào luồng đầu ra tới trình duyệt

JSP có giống HTML không?

Hình 1. Luồng yêu cầu/phản hồi gọi một trang JSP

Lần tiếp theo trang được yêu cầu, công cụ JSP sẽ thực thi servlet đã được tải trừ khi trang JSP đã thay đổi, trong trường hợp đó, nó sẽ tự động được biên dịch lại thành một servlet và được thực thi

Thực hành tốt nhất

Trong phần này, tôi trình bày các phương pháp hay nhất cho servlet và đặc biệt là các trang JSP. Việc nhấn mạnh vào các phương pháp hay nhất của JSP đơn giản là vì các trang JSP dường như được sử dụng rộng rãi hơn (có thể là do công nghệ JSP thúc đẩy việc tách phần trình bày khỏi nội dung). Một thực tiễn tốt nhất kết hợp và tích hợp việc sử dụng các servlet và trang JSP là mẫu thiết kế Model View Controller (MVC), sẽ được thảo luận sau trong bài viết này

  • Không lạm dụng mã Java trong các trang HTML. Đặt tất cả mã Java trực tiếp vào trang JSP là được đối với các ứng dụng rất đơn giản. Nhưng lạm dụng tính năng này dẫn đến mã spaghetti không dễ đọc và dễ hiểu. Một cách để giảm thiểu mã Java trong các trang HTML là viết các lớp Java riêng biệt để thực hiện các tính toán. Sau khi các lớp này được kiểm tra, các phiên bản có thể được tạo
  • Chọn đúng cơ chế bao gồm. Dữ liệu tĩnh như đầu trang, chân trang và nội dung thanh điều hướng được lưu giữ tốt nhất trong các tệp riêng biệt và không được tạo lại động. Khi nội dung đó nằm trong các tệp riêng biệt, chúng có thể được đưa vào tất cả các trang bằng cách sử dụng một trong các cơ chế bao gồm sau
    • Bao gồm chỉ thị.
      
      
              ">
      
      
      7
    • Bao gồm hành động.
      
      
              ">
      
      
      8
  • Cơ chế bao gồm đầu tiên bao gồm nội dung của tệp được chỉ định trong khi trang JSP đang được chuyển đổi thành một servlet (giai đoạn dịch) và bao gồm thứ hai bao gồm phản hồi được tạo sau khi trang được chỉ định được thực thi. Tôi khuyên bạn nên sử dụng lệnh bao gồm, nhanh về mặt hiệu suất, nếu tệp không thay đổi thường xuyên;

    Một cơ chế bao gồm khác là thẻ hành động

    
    
            ">
    
    
    9 được cung cấp bởi các trang JavaServer Thư viện thẻ tiêu chuẩn (JSTL). Bạn có thể sử dụng thẻ này để đưa vào hoặc nhập nội dung từ các nguồn cục bộ và từ xa. Dưới đây là một số ví dụ

    
    
    
    
    
    
    

  • Đừng trộn lẫn logic kinh doanh với bản trình bày. Đối với các ứng dụng nâng cao và khi có nhiều mã hơn, điều quan trọng là không trộn logic nghiệp vụ với bản trình bày giao diện người dùng trong cùng một tệp. Tách logic kinh doanh khỏi bản trình bày cho phép thay đổi sang một trong hai bên mà không ảnh hưởng đến bên kia. Tuy nhiên, mã JSP sản xuất nên được giới hạn ở phần trình bày ở mặt trước. Vì vậy, làm thế nào để bạn thực hiện phần logic kinh doanh? . Công nghệ này là một mô hình thành phần di động, độc lập với nền tảng, cho phép các nhà phát triển viết các thành phần và tái sử dụng chúng ở mọi nơi. Trong ngữ cảnh của các trang JSP, các thành phần JavaBeans chứa logic nghiệp vụ trả về dữ liệu cho một tập lệnh trên trang JSP, từ đó định dạng dữ liệu được trả về từ thành phần JavaBeans để trình duyệt hiển thị. Một trang JSP sử dụng một thành phần JavaBeans bằng cách thiết lập và nhận các thuộc tính mà nó cung cấp. Lợi ích của việc sử dụng các thành phần JavaBeans để tăng cường các trang JSP là
    • thành phần tái sử dụng. Các ứng dụng khác nhau sẽ có thể sử dụng lại các thành phần
    • Tách logic nghiệp vụ và logic trình bày. Bạn có thể thay đổi cách hiển thị dữ liệu mà không ảnh hưởng đến logic nghiệp vụ. Nói cách khác, các nhà thiết kế trang web có thể tập trung vào trình bày và các nhà phát triển Java có thể tập trung vào logic kinh doanh
    • Bảo vệ tài sản trí tuệ của bạn bằng cách giữ an toàn cho mã nguồn
  • Nếu bạn sử dụng các thành phần Enterprise JavaBeans (EJB) với ứng dụng của mình, logic nghiệp vụ sẽ vẫn nằm trong các thành phần EJB cung cấp khả năng quản lý vòng đời, hỗ trợ giao dịch và quyền truy cập nhiều máy khách vào các đối tượng miền (Entity Beans)

  • Sử dụng thẻ tùy chỉnh. Việc nhúng các đoạn mã Java (hoặc tập lệnh) vào tài liệu HTML có thể không phù hợp với tất cả các nhà phát triển nội dung HTML, có lẽ vì họ không biết ngôn ngữ Java và không quan tâm đến việc học cú pháp của nó. Mặc dù các thành phần JavaBeans có thể được sử dụng để đóng gói phần lớn mã Java, nhưng việc sử dụng chúng trong các trang JSP vẫn yêu cầu các nhà phát triển nội dung phải có một số kiến ​​thức về cú pháp Java

    Công nghệ JSP cho phép bạn giới thiệu các thẻ tùy chỉnh mới thông qua cơ sở thư viện thẻ. Là nhà phát triển Java, bạn có thể mở rộng các trang JSP bằng cách giới thiệu các thẻ tùy chỉnh có thể được triển khai và sử dụng theo cú pháp giống như HTML. Thẻ tùy chỉnh cũng cho phép bạn cung cấp cách đóng gói tốt hơn bằng cách cải thiện sự tách biệt giữa logic nghiệp vụ và logic trình bày. Ngoài ra, chúng còn cung cấp phương tiện tùy chỉnh bản trình bày mà điều này không thể thực hiện dễ dàng với JSTL

    Một số lợi ích của thẻ tùy chỉnh là

    • Chúng có thể loại bỏ scriptlet trong các ứng dụng JSP của bạn. Bất kỳ tham số cần thiết nào cho thẻ đều có thể được chuyển dưới dạng thuộc tính hoặc nội dung cơ thể và do đó không cần mã Java để khởi tạo hoặc đặt thuộc tính thành phần
    • Chúng có cú pháp đơn giản hơn. Tập lệnh được viết bằng mã Java, nhưng các thẻ tùy chỉnh có thể được sử dụng theo cú pháp giống như HTML
    • Chúng có thể cải thiện năng suất của các nhà phát triển nội dung không phải là lập trình viên, bằng cách cho phép họ thực hiện các tác vụ không thể thực hiện được bằng HTML
    • Chúng có thể tái sử dụng. Họ tiết kiệm thời gian phát triển và thử nghiệm. Tập lệnh không thể tái sử dụng, trừ khi bạn gọi cắt và dán là "tái sử dụng. "

    Tóm lại, bạn có thể sử dụng các thẻ tùy chỉnh để hoàn thành các tác vụ phức tạp giống như cách bạn sử dụng HTML để tạo bản trình bày

    Các nguyên tắc lập trình sau đây rất hữu ích khi viết thư viện thẻ tùy chỉnh

    • Giữ nó đơn giản. Nếu một thẻ yêu cầu nhiều thuộc tính, hãy thử chia nó thành nhiều thẻ
    • Làm cho nó có thể sử dụng được. Tham khảo ý kiến ​​của người dùng thẻ (nhà phát triển HTML) để đạt được mức độ khả dụng cao
    • Không phát minh ra ngôn ngữ lập trình trong các trang JSP. Không phát triển các thẻ tùy chỉnh cho phép người dùng viết các chương trình rõ ràng
    • Cố gắng không phát minh lại bánh xe. Có sẵn một số thư viện thẻ JSP, chẳng hạn như Dự án Taglibs Jakarta. Kiểm tra xem những gì bạn muốn đã có sẵn chưa
  • Đừng phát minh lại bánh xe. Mặc dù thẻ tùy chỉnh cung cấp cách sử dụng lại các thành phần có giá trị nhưng chúng vẫn cần được tạo, kiểm tra và sửa lỗi. Ngoài ra, các nhà phát triển thường phải phát minh lại bánh xe nhiều lần và các giải pháp có thể không hiệu quả nhất. Đây là vấn đề mà Thư viện thẻ tiêu chuẩn trang JavaServer (JSTL) giải quyết, bằng cách cung cấp một tập hợp các thẻ tiêu chuẩn có thể tái sử dụng. JSTL định nghĩa một thư viện thẻ tiêu chuẩn hoạt động giống nhau ở mọi nơi, vì vậy bạn không còn phải lặp lại các bộ sưu tập bằng tập lệnh (hoặc thẻ lặp từ nhiều nhà cung cấp). JSTL bao gồm các thẻ để lặp, đọc các thuộc tính mà không cần cú pháp Java, lặp qua các cấu trúc dữ liệu khác nhau, đánh giá các biểu thức theo điều kiện, đặt các thuộc tính và các biến tập lệnh theo cách ngắn gọn và phân tích cú pháp các tài liệu XML
  • Sử dụng ngôn ngữ biểu thức JSTL. Thông tin được chuyển đến các trang JSP được truyền đạt bằng cách sử dụng các thuộc tính và tham số yêu cầu trong phạm vi JSP. Một ngôn ngữ biểu thức (EL), được thiết kế dành riêng cho tác giả trang, thúc đẩy các thuộc tính có phạm vi của JSP như là cách tiêu chuẩn để truyền đạt thông tin từ logic nghiệp vụ đến các trang JSP. Tuy nhiên, lưu ý rằng mặc dù EL là một khía cạnh quan trọng của công nghệ JSP, nhưng nó không phải là ngôn ngữ lập trình mục đích chung. Thay vào đó, nó chỉ đơn giản là một ngôn ngữ truy cập dữ liệu, cho phép dễ dàng truy cập (và thao tác) dữ liệu ứng dụng mà không cần phải sử dụng tập lệnh hoặc giá trị biểu thức thời gian yêu cầu
  • In JSP 1.x, a page author must use an expression <%= aName %> to access the value of a system, as in the following example:

    
    
            ">
    
    

    hoặc giá trị của một thành phần JavaBeans tùy chỉnh

    
    
            
    
    
    0

    Ngôn ngữ biểu thức cho phép tác giả trang truy cập một đối tượng bằng cú pháp đơn giản hóa. Ví dụ: để truy cập một biến đơn giản, bạn có thể sử dụng một cái gì đó như

    
    
            
    
    
    1

    Và để truy cập thuộc tính JavaBeans lồng nhau, bạn sẽ sử dụng một cái gì đó như

    ________số 8_______

    Nếu bạn đã từng làm việc với JavaScript, bạn sẽ cảm thấy quen thuộc vì EL mượn cú pháp JavaScript để truy cập dữ liệu có cấu trúc

  • Sử dụng bộ lọc nếu cần thiết. Một trong những tính năng mới của công nghệ JSP là bộ lọc. Nếu bạn từng gặp trường hợp có nhiều servlet hoặc trang JSP cần nén nội dung của chúng, bạn có thể viết một bộ lọc nén duy nhất và áp dụng nó cho tất cả các tài nguyên. Ví dụ, trong Java BluePrints, các bộ lọc được sử dụng để cung cấp SignOn
  • Sử dụng mô hình bảo mật di động. Hầu hết các máy chủ ứng dụng đều cung cấp các tính năng bảo mật dành riêng cho máy chủ hoặc nhà cung cấp để khóa các nhà phát triển vào một máy chủ cụ thể. Để tối đa hóa tính di động của ứng dụng doanh nghiệp của bạn, hãy sử dụng mô hình bảo mật ứng dụng web di động. Tuy nhiên, cuối cùng, đó là tất cả về sự đánh đổi. Ví dụ: nếu bạn có một nhóm người dùng được xác định trước, bạn có thể quản lý họ bằng đăng nhập dựa trên biểu mẫu hoặc xác thực cơ bản. Nhưng nếu bạn cần tạo người dùng động, bạn cần sử dụng API dành riêng cho vùng chứa để tạo và quản lý người dùng. Mặc dù các API dành riêng cho bộ chứa không khả dụng, nhưng bạn có thể khắc phục điều này bằng mẫu thiết kế Bộ điều hợp
  • Sử dụng cơ sở dữ liệu cho thông tin liên tục. Bạn có thể triển khai các phiên với đối tượng
    
    
            
    
    
    2, cung cấp một cơ chế đơn giản và thuận tiện để lưu trữ thông tin về người dùng và sử dụng cookie để xác định người dùng. Sử dụng các phiên để lưu trữ thông tin tạm thời--vì vậy ngay cả khi nó bị mất, bạn vẫn có thể ngủ vào ban đêm. (Dữ liệu phiên bị mất khi phiên hết hạn hoặc khi khách hàng thay đổi trình duyệt. ) Nếu bạn muốn lưu trữ thông tin liên tục, hãy sử dụng cơ sở dữ liệu, an toàn hơn nhiều và di động trên các trình duyệt
  • Nội dung bộ đệm. Bạn không bao giờ nên tự động tạo lại nội dung không thay đổi giữa các yêu cầu. Bạn có thể lưu trữ nội dung ở phía máy khách, phía proxy hoặc phía máy chủ
  • Sử dụng tổng hợp kết nối. Tôi khuyên bạn nên sử dụng JSTL để truy cập cơ sở dữ liệu. Nhưng nếu bạn muốn viết các hành động tùy chỉnh của riêng mình để truy cập cơ sở dữ liệu, tôi khuyên bạn nên sử dụng nhóm kết nối để chia sẻ hiệu quả các kết nối cơ sở dữ liệu giữa tất cả các yêu cầu. Tuy nhiên, lưu ý rằng các máy chủ J2EE cung cấp điều này dưới vỏ bọc
  • Kết quả bộ đệm của các truy vấn cơ sở dữ liệu. Nếu bạn muốn lưu kết quả cơ sở dữ liệu vào bộ nhớ đệm, không sử dụng đối tượng
    
    
            
    
    
    3 của JDBC làm đối tượng bộ đệm. Điều này được liên kết chặt chẽ với một kết nối xung đột với tổng hợp kết nối. Sao chép dữ liệu từ một
    
    
            
    
    
    3 vào một bean dành riêng cho ứng dụng, chẳng hạn như
    
    
            
    
    
    5, hoặc của JDBC's
    
    
            
    
    
    6
  • Áp dụng cú pháp JSP XML mới nếu cần. Điều này thực sự phụ thuộc vào việc bạn muốn các ứng dụng của mình tuân thủ XML như thế nào. Tuy nhiên, có một sự đánh đổi ở đây vì điều này làm cho JSP trở nên thân thiện với công cụ hơn, nhưng lại kém thân thiện hơn với nhà phát triển
  • Đọc và áp dụng Enterprise BluePrints. Sun's Enterprise BluePrints cung cấp cho nhà phát triển các hướng dẫn, mẫu và ứng dụng mẫu, chẳng hạn như Adventure Builder và Pet Store. Nhìn chung, J2EE BluePrints cung cấp các phương pháp hay nhất và một tập hợp các mẫu thiết kế, là giải pháp đã được chứng minh cho các sự cố lặp lại trong việc xây dựng các ứng dụng Java dành cho doanh nghiệp di động, mạnh mẽ và có thể mở rộng

Tích hợp Servlet và trang JSP

Đặc tả JSP trình bày hai cách tiếp cận để xây dựng các ứng dụng web sử dụng các trang JSP. Kiến trúc JSP Model 1 và Model 2. Hai mô hình này khác nhau ở vị trí diễn ra quá trình xử lý. Trong kiến ​​trúc Mô hình 1, như thể hiện trong Hình 2, trang JSP chịu trách nhiệm xử lý các yêu cầu và gửi trả lời lại cho các máy khách

JSP có giống HTML không?

Hình 2. Kiến trúc JSP Model 1

Kiến trúc Model 2, như thể hiện trong Hình 3, tích hợp việc sử dụng cả servlet và trang JSP. Trong chế độ này, các trang JSP được sử dụng cho lớp trình bày và các servlet để xử lý các tác vụ. servlet hoạt động như một bộ điều khiển chịu trách nhiệm xử lý các yêu cầu và tạo bất kỳ bean nào cần thiết cho trang JSP. Bộ điều khiển cũng chịu trách nhiệm quyết định trang JSP nào sẽ chuyển tiếp yêu cầu. Trang JSP truy xuất các đối tượng được tạo bởi servlet và trích xuất nội dung động để chèn vào trong một mẫu

JSP có giống HTML không?

Hình 3. Kiến trúc JSP Model 2

Mô hình này thúc đẩy việc sử dụng mẫu thiết kế kiểu kiến ​​trúc Model View Controller (MVC). Lưu ý rằng một số khung đã tồn tại triển khai mẫu thiết kế hữu ích này và bản trình bày thực sự tách biệt khỏi nội dung. Apache Struts là một framework chính thức cho MVC. Khung này được sử dụng tốt nhất cho các ứng dụng phức tạp trong đó một yêu cầu hoặc gửi biểu mẫu có thể dẫn đến các kết quả trông khác biệt đáng kể

Phần kết luận

Các phương pháp hay nhất -- là giải pháp đã được chứng minh cho các sự cố lặp lại -- dẫn đến các ứng dụng có chất lượng cao hơn. Bài viết này đã trình bày một số nguyên tắc và thực tiễn tốt nhất để tuân theo khi phát triển các ứng dụng web dựa trên servlet và JSP

Theo dõi các công nghệ servlet và JSP, bởi vì một số điều thú vị đang được thực hiện. Ví dụ: JavaServer Faces (JFC), một nỗ lực của Quy trình cộng đồng Java nhằm xác định khung ứng dụng web tiêu chuẩn, sẽ tích hợp độc đáo với Apache Struts

Để biết thêm thông tin

  • mèo con
  • servlet
  • Trang máy chủ Java
  • Doanh nghiệp BluePrints
  • Thanh chống Apache
  • Quy ước mã cho Công nghệ trang JavaServer Phiên bản 1. x Ngôn ngữ
  • Khuôn mặt máy chủ Java (JSF)

Sự nhìn nhận

Đặc biệt cảm ơn Gregory Murray của Sun Microsystems, phản hồi của ông đã giúp tôi cải thiện bài viết này

Thông tin về các Tác giả

Qusay H. Mahmoud cung cấp dịch vụ tư vấn và đào tạo Java. Ông đã xuất bản hàng chục bài báo về Java và là tác giả của Lập trình phân tán với Java (Manning Publications, 1999) và Learning Wireless Java (O'Reilly, 2002)

JSP có giống với HTML không?

JSP cung cấp một giao diện động cho dữ liệu thay đổi liên tục và nó cũng tự động gọi các hành động của máy chủ. HTML cung cấp một phương tiện để cung cấp tài khoản chi tiết về cấu trúc của thông tin dựa trên văn bản trong tài liệu. Chỉ các trang web động được tạo bởi JSP. Trong khi Html chỉ tạo các trang web tĩnh .

JSP có cần HTML không?

Một trang JSP đơn giản bao gồm đánh dấu HTML được nhúng với các thẻ JSP . Các tệp JSP có. tiện ích mở rộng jsp. Máy chủ JSP (còn được gọi là bộ chứa JSP) được định cấu hình để hướng một yêu cầu HTTP đến một trang JSP cụ thể, trang này sau đó chịu trách nhiệm hiển thị phản hồi HTTP.

Chúng ta có thể sử dụng HTML và JSP cùng nhau không?

Không. Các trang JSP được thực thi ở phía máy chủ và tạo HTML, được gửi tới trình duyệt . Về mặt này, JSP hoạt động giống như PHP, về cơ bản là "kết xuất" một số mã HTML và gửi mã đó cho người dùng. Bạn không thể nhúng mã JSP vào HTML và gửi nó cho người dùng - trình duyệt của họ sẽ không làm gì với nó.

JSP có còn được sử dụng vào năm 2022 không?

JSP thực sự hơi lỗi thời. Và có một số bất tiện trong đó. Ví dụ, JSP thực sự là một vấn đề đau đầu đối với các nhà thiết kế web. Nhà thiết kế không thể chỉ mở tệp JSP, thực hiện một số thay đổi và kiểm tra kết quả trong trình duyệt vì tệp JSP chứa các thẻ không hợp lệ đối với HTML