JavaRush /Blog Java /Random-VI /JSP là gì? Hãy khám phá những khả năng trong thực tế
Анзор Кармов
Mức độ
Санкт-Петербург

JSP là gì? Hãy khám phá những khả năng trong thực tế

Xuất bản trong nhóm
JSP hay Java Server Pages là một công nghệ Java cho phép bạn tạo các trang web động cho các ứng dụng Java. Trong bài viết này, chúng ta sẽ nói chi tiết hơn về JSP là gì, thảo luận về một số khả năng của công nghệ này, xem xét cấu trúc của các trang JSP và cũng cố gắng có cái nhìn thực tế về các Trang Máy chủ Java này là gì. JSP là gì?  Tìm hiểu những khả năng trong thực tế - 1Nhưng trước tiên hãy nói về lợi ích và tầm quan trọng của JSP. JSP cho phép nhà phát triển:
  • nhận dữ liệu từ một trang web vào mã Java;
  • gửi dữ liệu từ mã Java tới một trang web;
  • viết code Java trực tiếp vào html (tuy nhiên bạn không nên lạm dụng điều này).
Nhu cầu về kiến ​​thức JSP có thể được đánh giá khá cao vì một số lý do:
  • JSP là một trong những công nghệ web Java chính;
  • JSP được sử dụng rộng rãi ở hầu hết các công ty, dự án;
  • JSP tích hợp hoàn toàn với các servlet Java bên trong một thùng chứa servlet.

Định nghĩa JSP

Đây là định nghĩa từ Wikipedia: JSP (Trang JavaServer) là một công nghệ cho phép các nhà phát triển web tạo nội dung có cả thành phần tĩnh và động. Một trang JSP chứa hai loại văn bản: dữ liệu nguồn tĩnh, có thể ở một trong các định dạng văn bản HTML, SVG, WML hoặc XML và các phần tử JSP, xây dựng nội dung động. Ngoài ra, có thể sử dụng các thư viện thẻ JSP, cũng như Ngôn ngữ biểu thức (EL) để nhúng mã Java vào nội dung tĩnh của các trang JSP. Mã trang JSP được dịch sang mã Java servlet bằng cách sử dụng trình biên dịch trang Jasper JSP, sau đó được biên dịch thành mã byte của Máy ảo Java (JVM). Các thùng chứa Servlet có khả năng thực thi các trang JSP được viết bằng ngôn ngữ Java độc lập với nền tảng. Công nghệ JSP là một công nghệ độc lập với nền tảng, di động và dễ dàng mở rộng để phát triển các ứng dụng web.

Cấu trúc trang JSP

Nói chung, JSP đề cập đến các trang web động trong đó phần động được tạo bằng Java và phần tĩnh được tạo bằng ngôn ngữ đánh dấu, thường là HTML. Trang như vậy là một tài liệu văn bản có phần mở rộng .jsp, được viết bằng một trong các ngôn ngữ đánh dấu (chẳng hạn như HTML, SVG, WML và XML), xen kẽ với các phần tử JSP (hoặc thẻ JSP). Các thẻ này chứa các lệnh gọi đến mã máy chủ (dữ liệu) và cũng thực hiện một số phép tính. Các tệp này được xử lý trên máy chủ, do đó tất cả các thẻ JSP được chuyển đổi thành thẻ html và đầu ra là một trang html thông thường. Sơ đồ bên dưới thể hiện sơ đồ cấu trúc của một trang JSP và sự tương tác của nó với máy chủ. JSP là gì?  Tìm hiểu những khả năng trong thực tế - 2Một ví dụ về một trang JSP đơn giản:
<html>
  <body>
    <p> ${2 + 2} равно 4 </p>
  </body>
</html>
Trong ví dụ này, một biểu thức JSP được viết bằng một ngôn ngữ đặc biệt, Ngôn ngữ biểu thức (EL), được “nhúng” bên trong mã html . Nó cung cấp một cơ chế quan trọng để tương tác giữa lớp trình bày (trang web) và lớp logic nghiệp vụ ứng dụng (mã Java). Như bạn có thể thấy từ ví dụ, biểu thức JSP được đặt trong dấu ngoặc nhọn, có ký hiệu đô la ở đầu - ${...}. Mọi thứ bên trong dấu ngoặc nhọn đều được đánh giá trên máy chủ và kết quả của biểu thức này được đưa ra dưới dạng html, ở vị trí mà biểu thức JSP ban đầu được xác định. Sau khi xử lý tất cả các thẻ, trang sẽ trông như thế này:
<html>
  <body>
    <p> 4 равно 4 </p>
  </body>
</html>

Cài đặt và chạy thùng chứa servlet

Vì mã JSP được dịch sang mã servlet Java, nên chúng ta cần lấy một loại thùng chứa servlet nào đó ở đâu đó để có thể nói về cách hoạt động của JSP. Nếu không, không có vùng chứa, JSP sẽ không hoạt động. Nhưng trước tiên, hãy xem định nghĩa của servlet container. Bộ chứa servlet là một chương trình là máy chủ cung cấp hỗ trợ hệ thống cho các servlet và đảm bảo vòng đời của chúng tuân theo các quy tắc được xác định trong thông số kỹ thuật. Nó có thể hoạt động như một máy chủ web độc lập hoàn chỉnh, là nhà cung cấp trang cho một máy chủ web khác hoặc tích hợp vào máy chủ ứng dụng Java EE. Một trong những thùng chứa servlet phổ biến nhất là Apache Tomcat. JSP là gì?  Tìm hiểu các khả năng trong thực tế - 3Điều đáng nói là Tomcat không phải là máy chủ ứng dụng Java EE chính thức. Tuy nhiên, đối với nhu cầu thiết yếu của các servlet và trang JSP, máy chủ Tomcat là quá đủ. Hãy bắt đầu cài đặt. Bạn có thể tải xuống Tomcat từ trang chính thức . Đối với hệ điều hành Windows bạn có thể cài đặt Tomcat như sau:
  1. Tải xuống Trình cài đặt dịch vụ Windows 32-bit/64-bit.

  2. Hãy chạy tập tin.

  3. Tiếp theo, hãy làm theo quy trình cài đặt thông thường:

    1. Đừng quên chọn hộp kiểm Ví dụ trên cửa sổ trình cài đặt tương ứng:

      JSP là gì?  Tìm hiểu các khả năng trong thực tế - 4
    2. và chỉ định đường dẫn đến JRE được cài đặt sẵn:

      JSP là gì?  Tìm hiểu những khả năng trong thực tế - 5
  4. Sau khi cài đặt, khởi chạy Tomcat và mở trình duyệt. Truy cập http://localhost:8080/ .

Nếu bạn thấy trang bắt đầu Tomcat, điều đó có nghĩa là quá trình cài đặt đã thành công và máy chủ đang chạy. Để khởi động và dừng Tomcat theo cách thủ công, bạn có thể chạy một trong hai tệp thực thi trong thư mục bin. Nó nằm trong thư mục cài đặt Tomcat: JSP là gì?  Tìm hiểu những khả năng trong thực tế - 6

Ứng dụng demo. Các đối tượng ẩn

Chúng ta hãy xem xét một số tính năng của JSP đang hoạt động. Một trong số đó là quyền truy cập vào cái gọi là đối tượng ẩn ( Imlicit Objects ). Đây là những đối tượng có thể được truy cập bằng Ngôn ngữ biểu thức (EL). Ví dụ về các đối tượng như vậy là tiêu đề HTTP hoặc tham số URL. Hãy tiết lộ (hoặc làm mới bộ nhớ của chúng tôi) tham số URL là gì. Ví dụ bên dưới hiển thị một URL có tham số. Các tham số được in đậm: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom Các tham số luôn bắt đầu bằng dấu chấm hỏi (?). Tiếp theo là tên của tham số, theo sau là dấu bằng - giá trị của tham số được xác định. Có thể có một vài hoặc một tham số. Nếu có nhiều hơn một, mỗi cặp tên-giá trị được phân tách bằng ký tự dấu và (&). Trong ví dụ trên, một số tham số và giá trị của chúng đã được xác định:
Tên tham số Giá trị tham số
thông số 1 giá trị1
thông số 2 giá trị2
Một 1
tên tom
Chúng ta hãy xem cách bạn có thể truy cập các đối tượng ẩn trong JSP, bao gồm các tham số URL. Để thực hiện việc này, hãy khởi chạy Tomcat và mở trình duyệt trên trang http://localhost:8080/ Sau đó vào trang Ví dụ: JSP là gì?  Tìm hiểu những khả năng trong thực tế - 7Sau đó theo liên kết JSP Ví dụ: JSP là gì?  Tìm hiểu những khả năng trong thực tế - 8Trên trang ví dụ theo liên kết Implicit Objects -> Thực thi: JSP là gì?  Tìm hiểu những khả năng trong thực tế - 9Về điều này trang bạn có thể xem một ví dụ về việc sử dụng các đối tượng ẩn. Dưới đây là ảnh chụp màn hình của trang với phần giải thích chi tiết: JSP là gì?  Tìm hiểu các khả năng trong thực tế - 10Hãy thử thay đổi giá trị của tham số foobằng trường tương ứng trên trang, sau đó lưu ý rằng giá trị của tham số này cũng đã thay đổi trên thanh địa chỉ. Trang được trình bày không có nhiều chức năng, nhưng nó là một tài liệu tham khảo tốt mà bạn có thể tham khảo trong tương lai khi cần truy cập vào một đối tượng ẩn cụ thể. Trang này chứa danh sách các đối tượng ẩn có thể được truy cập. Và bên dưới, trong bảng, nó trình bày cách bạn có thể truy cập một đối tượng cụ thể.

Các hàm JSP

Bây giờ chúng ta quay lại trang trước và xem mã nguồn của trang “đối tượng ẩn”: JSP là gì?  Tìm hiểu các khả năng trong thực tế - 11Đây là:
<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<html>
  <head>
    <title>JSP 2.0 Expression Language - Implicit Objects</title>
  </head>
  <body>
    <h1>JSP 2.0 Expression Language - Implicit Objects</h1>
    <hr>
    This example illustrates some of the implicit objects available
    in the Expression Language.  The following implicit objects are
    available (not all illustrated here):
    <ul>
      <li>pageContext - the PageContext object</li>
      <li>pageScope - a Map that maps page-scoped attribute names to
          their values</li>
      <li>requestScope - a Map that maps request-scoped attribute names
          to their values</li>
      <li>sessionScope - a Map that maps session-scoped attribute names
          to their values</li>
      <li>applicationScope - a Map that maps application-scoped attribute
          names to their values</li>
      <li>param - a Map that maps parameter names to a single String
          parameter value</li>
      <li>paramValues - a Map that maps parameter names to a String[] of
          all values for that parameter</li>
      <li>header - a Map that maps header names to a single String
          header value</li>
      <li>headerValues - a Map that maps header names to a String[] of
          all values for that header</li>
      <li>initParam - a Map that maps context initialization parameter
          names to their String parameter value</li>
      <li>cookie - a Map that maps cookie names to a single Cookie object.</li>
    </ul>

    <blockquote>
      <u><b>Change Parameter</b></u>
      <form action="implicit-objects.jsp" method="GET">
          foo = <input type="text" name="foo" value="${fn:escapeXml(param["foo"])}">
          <input type="submit">
      </form>
      <br>
      <code>
        <table border="1">
          <thead>
            <td><b>EL Expression</b></td>
            <td><b>Result</b></td>
          </thead>
          <tr>
            <td>\${param.foo}</td>
            <td>${fn:escapeXml(param["foo"])} </td>
          </tr>
          <tr>
            <td>\${param["foo"]}</td>
            <td>${fn:escapeXml(param["foo"])} </td>
          </tr>
          <tr>
            <td>\${header["host"]}</td>
            <td>${fn:escapeXml(header["host"])} </td>
          </tr>
          <tr>
            <td>\${header["accept"]}</td>
            <td>${fn:escapeXml(header["accept"])} </td>
          </tr>
          <tr>
            <td>\${header["user-agent"]}</td>
            <td>${fn:escapeXml(header["user-agent"])} </td>
          </tr>
        </table>
      </code>
    </blockquote>
  </body>
</html>
Nếu bạn quen thuộc với HTML, mã nguồn của trang sẽ khá rõ ràng đối với bạn. Hãy chú ý đến những dòng này:
<tr>
  <td>${param.foo}</td>
  <td>${fn:escapeXml(param["foo"])} </td>
</tr>
Ở đây chúng ta thấy các thẻ html <tr><td>. Các thẻ được theo sau bởi <td>các thẻ JSP, được bọc trong dấu ngoặc nhọn ${ }. Tuy nhiên, hãy chú ý cách xuất giá trị của tham số URL foo:
${fn:escapeXml(param["foo"])}
Giá trị được xuất ra thông qua việc sử dụng hàm JSP fn:escapeXml(). Các hàm JSP đóng gói một số chức năng có thể được sử dụng lại. Trong trường hợp này, đó là lối thoát XML. Công nghệ JSP cung cấp nhiều chức năng để bạn lựa chọn cũng như khả năng tạo các chức năng của riêng bạn. Để sử dụng một hàm trong JSP, bạn phải nhập thư viện thích hợp chứa hàm đó vào tệp JSP.

Thư viện thẻ

Chúng ta hãy xem một dòng mã nguồn khác (dòng thứ hai) ở trên:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
Đây là cách thư viện thẻ được nhập. Cú pháp trực quan. Chúng tôi xác định một số điều:
  • taglib(thư viện thẻ - thư viện thẻ);
  • url, thư viện này nằm ở đâu;
  • một tiền tố (trong trường hợp này fn) qua đó có thể gọi các hàm được xác định trong thư viện này.
Trong ví dụ trên, chúng ta đã xem xét các hàm nhập. Cụ thể, trong ví dụ của chúng tôi, chúng tôi đã nhập thư viện JSTL (Thư viện thẻ tiêu chuẩn JSP). JSTL là một thư viện thẻ tiêu chuẩn chứa một tập hợp các thư viện khác nhau đi kèm với mọi triển khai servlet và JSP, bao gồm cả Tomcat. Một thư viện thẻ phổ biến khác là core, có thể được nhập như thế này:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
Giống như fn, ký hiệu này clà tùy chọn và được chấp nhận rộng rãi. Chỉ định này có thể được tìm thấy ở hầu hết mọi nơi sử dụng các thư viện này. Đây là một ví dụ về hàm từ thư viện lõi:
<c:out value = "${'<div>'}"/>
Chức năng này sẽ chỉ xuất ra thẻ <div>. Hàm này đã thực hiện thoát XML. Chức năng này rất quan trọng theo quan điểm bảo mật, bởi vì bằng cách xuất trực tiếp giá trị của các biến, thông qua ${variable}, chúng ta mở ra cơ hội cho việc chèn tập lệnh.

Chỉnh sửa JSP

Bây giờ, được trang bị kiến ​​thức mới, chúng ta hãy thử thực hiện các thay đổi đối với ứng dụng demo bên trong Tomcat. Để thực hiện việc này, chúng ta sẽ tìm thấy mã nguồn của trang này bên trong thư mục chứa bộ chứa servlet này đã được cài đặt. Có thể tìm thấy tệp này tại địa chỉ sau: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el Sau đó, mở tệp Implicit-objects.jsp trong bất kỳ trình soạn thảo văn bản nào Thêm phần nhập của thư viện lõi , sau đó sử dụng nó Hãy xuất ra một số văn bản: JSP là gì?  Tìm hiểu các khả năng trong thực tế - 12Bây giờ, hãy làm mới trang đối tượng ẩn và xem những thay đổi đã thực hiện: JSP là gì?  Tìm hiểu các khả năng trong thực tế - 13

Kết quả

Vì vậy, chúng tôi đã xem xét sơ bộ công nghệ như JSP. Chúng tôi đã thảo luận:
  • JSP là gì;
  • Cấu trúc trang JSP;
  • quy trình cài đặt và chạy bộ chứa servlet Tomcat;
  • ứng dụng demo để truy cập các đối tượng ẩn, được bao gồm trong gói phân phối máy chủ Tomcat;
  • Các hàm JSP và thư viện thẻ.

Cái gì tiếp theo?

Để bảo đảm tài liệu bạn có thể:
  1. Lặp lại mọi thứ được mô tả trong bài viết này.
  2. Hãy xem xét các ứng dụng demo khác có trong máy chủ Tomcat.
  3. Viết ứng dụng của riêng bạn và triển khai nó vào vùng chứa servlet. Để làm hướng dẫn, bạn có thể sử dụng bài viết Tạo một dự án web đơn giản trong IntelliJ Idea Enterprise. Từng bước, với hình ảnh.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION