JavaRush /Blog Java /Random-VI /Tạo một ứng dụng web đơn giản sử dụng servlets và jsp (ph...
Стас Пасинков
Mức độ
Киев

Tạo một ứng dụng web đơn giản sử dụng servlets và jsp (phần 1)

Xuất bản trong nhóm
Mức độ kiến ​​thức cần thiết để hiểu bài viết: bạn đã hiểu ít nhiều về Java Core và muốn tìm hiểu các công nghệ JavaEE và lập trình web. Sẽ hợp lý nhất nếu bạn hiện đang nghiên cứu nhiệm vụ Bộ sưu tập Java, bao gồm các chủ đề gần với bài viết. Tạo một ứng dụng web đơn giản sử dụng servlets và jsp (phần 1) - 1Tài liệu này là sự tiếp nối hợp lý của bài viết Tạo một dự án web đơn giản trong IntelliJ Idea Enterprise của tôi . Trong đó tôi đã trình bày cách tạo một mẫu dự án web đang hoạt động. Lần này tôi sẽ chỉ cho bạn cách tạo một ứng dụng web đơn giản nhưng đẹp mắt bằng cách sử dụng công nghệ Java Servlet API và JavaServer Pages API. Ứng dụng của chúng tôi sẽ có một trang chủ với hai liên kết:
  • tới trang thêm của người dùng;
  • đến trang xem danh sách người dùng.
Tôi vẫn sẽ sử dụng IntelliJ Idea Enterprise Edition, Apache Maven (chỉ bao gồm một số phần phụ thuộc) và Apache Tomcat. Cuối cùng, chúng ta sẽ “trang trí” ứng dụng của mình bằng framework W3.CSS . Chúng tôi sẽ cho rằng hiện tại bạn đã có một dự án trống mà chúng tôi sẽ phát triển tại đây. Nếu không, hãy xem qua bài viết đầu tiên và thực hiện nó. Nó sẽ chỉ mất một vài phút :)

Một chút về cấu trúc của ứng dụng trong tương lai

Trang chính của chúng tôi ( / ) sẽ là trang html tĩnh thông thường nhất có tiêu đề và hai liên kết/nút:
  • thêm người dùng mới (sẽ được gửi tới /add );
  • xem danh sách người dùng (gửi tới /list ).
Tomcat sẽ bắt các yêu cầu đến các địa chỉ này và gửi chúng đến một trong hai servlet mà chúng ta sẽ tạo (chúng ta sẽ mô tả ánh xạ trong tệp web.xml ). Và các servlet lần lượt sẽ xử lý các yêu cầu, chuẩn bị dữ liệu (hoặc lưu dữ liệu nếu người dùng được thêm) và chuyển quyền điều khiển sang các tệp jsp tương ứng, tệp này sẽ “kết xuất” kết quả. Chúng ta sẽ lưu trữ dữ liệu vào danh sách chung nhất (List).

Hãy tạo một trang chủ tĩnh

Nếu bạn có index.jsp trong thư mục web của mình , hãy xóa nó. Thay vào đó, trong thư mục này, chúng ta sẽ tạo một tệp html đơn giản có tên là index.html :
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My super project!</title>
</head>
<body>
    <!-- header -->
    <div>
        <h1>Super app!<//h1>
    </div>

    <div>       <!-- content -->
        <div>    <!-- buttons holder -->
            <button onclick="location.href='/list'">List users<//button>
            <button onclick="location.href='/add'">Add user<//button>
        </div>
    </div>
</body>
</html>
Không có gì phức tạp ở đây. Trong tiêu đề, chúng tôi chỉ ra tiêu đề của trang của chúng tôi. Trong phần body của trang chúng ta có 2 div chính: header (tiêu đề) và content (nội dung). Trong nội dung, chúng tôi có một ngăn chứa các nút của mình và thực tế là hai nút mà khi nhấp vào sẽ được gửi đến các địa chỉ thích hợp. Bạn có thể chạy dự án và xem nó trông như thế nào bây giờ. Nếu bạn nhấp vào các nút, các trang có lỗi 404 sẽ mở ra vì chúng tôi chưa có chúng. Nhưng điều này cho thấy các nút hoạt động. Hãy để tôi lưu ý rằng đây không phải là tùy chọn phổ biến nhất, vì nếu bạn đột nhiên tắt JavaScript, các nút này sẽ không được sử dụng trong trình duyệt. Nhưng chúng tôi sẽ cho rằng không ai vô hiệu hóa JavaScript :). Rõ ràng là có thể sử dụng các liên kết đơn giản, nhưng tôi thích các nút hơn. Bạn làm những gì bạn thích nhất. Và đừng nhìn vào thực tế là trong ví dụ của tôi sẽ có rất nhiều div . Sau đó, chúng ta sẽ tô các kiểu cho chúng và mọi thứ sẽ trông đẹp hơn :).

Tạo tập tin jsp để hiển thị kết quả

Trong cùng một thư mục web , chúng ta sẽ tạo một thư mục nơi chúng ta sẽ đặt các tập tin jsp . Tôi gọi đó là lượt xem và một lần nữa, bạn có thể ứng biến. Trong thư mục này chúng ta sẽ tạo hai file jsp:
  • add.jsp — trang để thêm người dùng;
  • list.jsp - trang hiển thị danh sách người dùng.
Hãy cung cấp cho họ những tiêu đề trang thích hợp. Những nội dung như “Thêm người dùng mới” và “Danh sách người dùng” và hiện tại chúng tôi sẽ giữ nguyên như vậy.

Hãy tạo hai servlet

Servlets sẽ chấp nhận và xử lý các yêu cầu mà Tomcat chuyển tới chúng. Trong thư mục src/main/java , chúng ta sẽ tạo một gói ứng dụng chứa các nguồn của chúng ta. Ở đó chúng ta sẽ có nhiều gói khác nhau hơn. Do đó, để các gói này không được tạo bên trong nhau, hãy tạo một số lớp trong gói ứng dụng (sau đó xóa nó). Bây giờ hãy tạo ba gói khác nhau trong gói ứng dụng :
  • các thực thể - đây là nơi các thực thể của chúng ta sẽ nằm (chính lớp đó sẽ mô tả các đối tượng người dùng);
  • mô hình - mô hình của chúng tôi sẽ có ở đây (sẽ nói thêm về điều này sau);
  • servlet - à, đây sẽ là servlet của chúng ta.
Sau này, bạn có thể xóa lớp đó khỏi gói ứng dụng một cách an toàn (tất nhiên là nếu bạn đã tạo nó). Trong gói servlets chúng ta sẽ tạo hai lớp:
  • AddServlet - sẽ xử lý các yêu cầu nhận được tại /add ;
  • ListServlet - sẽ xử lý các yêu cầu nhận được tại /list .

Kết nối các phụ thuộc trong Maven

Phiên bản Tomcat 9.* triển khai các thông số kỹ thuật của Servlet phiên bản 4.0 và JavaServer Pages phiên bản 2.3. Điều này được viết trong tài liệu chính thức của Tomcat 9 ở đoạn đầu tiên của dòng thứ hai. Điều này có nghĩa là nếu bạn, giống như tôi, đang sử dụng phiên bản Tomcat này, thì mã chúng tôi viết và gửi để chạy sẽ sử dụng chính xác các phiên bản được chỉ định. Nhưng chúng tôi muốn có những thông số kỹ thuật này trong dự án của mình để mã sử dụng chúng ít nhất sẽ được biên dịch thành công. Và để làm được điều này, chúng ta cần tải chúng vào dự án của mình. Đây là nơi Maven đến giải cứu.

Nguyên tắc chung là thế này: nếu bạn cần kết nối thứ gì đó với dự án của mình bằng Maven:

  • truy cập trang web kho lưu trữ Maven;
  • hãy tìm thư viện bạn cần và phiên bản bạn cần ở đó;
  • bạn nhận được mã phụ thuộc cần được chèn vào tệp pom.xml của mình;
  • chèn! :)
Vậy hãy bắt đầu. Đầu tiên chúng ta hãy chuẩn bị một file pom . Ở đâu đó sau /version nhưng trước /project , hãy chèn đoạn sau:
<dependencies>

</dependencies>
Vì vậy, chúng tôi đã chỉ ra rằng bên trong các thẻ này, chúng tôi sẽ liệt kê các phần phụ thuộc mà chúng tôi cần. Bây giờ bạn vào mvnrepository.com , trên cùng sẽ có trường tìm kiếm. Đầu tiên, nhập servlet vào tìm kiếm. Kết quả đầu tiên, nơi có hơn bảy nghìn công dụng, phù hợp với chúng tôi. Chúng tôi nhớ rằng chúng tôi cần phiên bản 4.0 (đối với Tomcat 9; đối với các phiên bản khác, cách triển khai cũ hơn có thể phù hợp). Đây là phiên bản khá gần đây nên không có nhiều công dụng nhưng đây là phiên bản chúng tôi cần. Một trang sẽ mở ra nơi bạn có thể lấy mã cho phần phụ thuộc này cho các trình quản lý gói khác nhau và thậm chí bạn có thể chỉ cần tải xuống. Nhưng vì chúng tôi muốn kết nối nó bằng Maven nên chúng tôi chọn mã trên tab Maven. Chúng tôi sao chép và dán vào tệp pom của mình bên trong phần phụ thuộc. Nếu một thông báo xuất hiện ở góc dưới bên phải của IDEA hỏi xem chúng tôi có muốn bật tính năng tự động nhập hay không thì chúng tôi đồng ý. Nếu bạn vô tình từ chối, hãy đi tới “Cài đặt” và bật tự động nhập thủ công: Cài đặt (Ctrl + Alt + S) -> Xây dựng, Thực thi, Triển khai -> Maven -> Nhập Thao tác này sẽ giữ tệp pom và tệp cấu hình IDEA cho việc này dự án đồng bộ. Bây giờ, sử dụng nguyên tắc tương tự, chúng ta sẽ tìm và kết nối JavaServer Pages phiên bản 2.3 (nhập jsp vào tìm kiếm). Và vì chúng ta đã sử dụng Maven, hãy thông báo ngay cho nó rằng các nguồn của chúng ta tuân thủ cú pháp Java 8 và chúng cần được biên dịch thành mã byte của cùng một phiên bản. Sau tất cả những thao tác này, pom.xml của chúng ta sẽ trông giống như thế này:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ru.javarush.info.fatfaggy</groupId>
    <artifactId>my-super-project</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compile.source>
        <maven.compiler.target>1.8</maven.compile.target>
    </properties>

    <dependencies>
        <!-- Servlet API 4.0 for tomcat 9 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- JavaServer Pages API 2.3 for tomcat 9 -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

Làm cho các servlet của chúng tôi trở thành các servlet thực sự

Tại thời điểm này, một vài servlet mà chúng ta đã tạo thực ra chỉ là các lớp thông thường. Họ không có bất kỳ chức năng nào. Nhưng bây giờ chúng tôi đã kết nối API Servlet với dự án của mình và nếu vậy, chúng tôi có thể sử dụng các lớp từ đó. Để biến các servlet của chúng ta thành các servlet “thực sự”, chúng ta chỉ cần kế thừa chúng từ lớp HttpServlet .

Ánh xạ hoặc phân vùng

Bây giờ, thật tuyệt nếu bằng cách nào đó thông báo cho Tomcat để các yêu cầu từ /add được xử lý bởi servlet AddServlet của chúng tôi và do đó các yêu cầu từ /list được xử lý bởi servlet ListServlet . Quá trình này được gọi là lập bản đồ . Việc này được thực hiện trong tệp web.xml theo nguyên tắc sau:
  • đầu tiên chúng ta mô tả servlet (chúng ta đặt một số tên và chỉ ra đường dẫn đến chính lớp đó);
  • sau đó chúng tôi liên kết servlet này với một địa chỉ cụ thể (chúng tôi cho biết tên của servlet mà chúng tôi vừa cung cấp cho nó và cho biết địa chỉ mà từ đó các yêu cầu sẽ được gửi đến servlet này).
Hãy mô tả servlet:
<servlet>
    <servlet-name>add</servlet-name>
    <servlet-class>app.servlets.AddServlet</servlet-class>
</servlet>
Bây giờ chúng tôi liên kết nó với địa chỉ:
<servlet-mapping>
    <servlet-name>add</servlet-name>
    <url-pattern>/add</url-pattern>
</servlet-mapping>
Như bạn có thể thấy, tên servlet giống nhau trong cả hai trường hợp. Nhờ đó, Tomcat biết rằng nếu một yêu cầu đến địa chỉ /add , nó cần phải được chuyển đến servlet app.servlets.AddServlet . Chúng tôi làm tương tự với servlet thứ hai. Do đó, web.xml của chúng tôi có nội dung xấp xỉ sau:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!-- add servlet -->
    <servlet>
        <servlet-name>add</servlet-name>
        <servlet-class>app.servlets.AddServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>add</servlet-name>
        <url-pattern>/add</url-pattern>
    </servlet-mapping>

    <!-- list servlet -->
    <servlet>
        <servlet-name>list</servlet-name>
        <servlet-class>app.servlets.ListServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>list</servlet-name>
        <url-pattern>/list</url-pattern>
    </servlet-mapping>
</web-app>
Nhân tiện, chúng tôi không tạo đánh dấu cho trang chính ở đây (tại / ). Thực tế là trong trường hợp này chúng ta không cần nó. Trang chủ của chúng tôi là một tệp html đơn giản chỉ hiển thị hai nút. Không có nội dung động, do đó, sẽ vô nghĩa nếu chúng ta tạo một servlet riêng cho nó, các yêu cầu từ địa chỉ / sẽ được gửi đến và sẽ không làm gì ngoại trừ việc chuyển việc thực thi sang một số jsp (cũng phải là đã tạo), sẽ vẽ Giá như chúng ta có hai nút. Chúng tôi không cần điều này; chúng tôi hài lòng với tài nguyên tĩnh. Khi Tomcat nhận được một yêu cầu, nó sẽ kiểm tra xem không có một servlet nào có thể xử lý yêu cầu tại một địa chỉ như vậy và sau đó nó sẽ thấy rằng tại địa chỉ này thực sự có một tệp html được tạo sẵn , nó sẽ gửi thành công . Chúng tôi có thể chạy lại ứng dụng của mình (khởi động lại máy chủ hoặc triển khai lại, tùy ý muốn) và đảm bảo rằng trang chính được hiển thị, không có gì bị hỏng, khi chúng tôi nhấp vào nút, quá trình chuyển đổi sẽ xảy ra, nhưng hiện tại cũng có lỗi bằng văn bản. Nhân tiện, nếu trước đây chúng tôi gặp lỗi 404 thì bây giờ chúng tôi có lỗi 405. Điều này có nghĩa là ánh xạ đã hoạt động, các servlet đã được tìm thấy nhưng chúng không có bất kỳ phương pháp phù hợp nào để xử lý yêu cầu. Nếu ở giai đoạn này bạn vẫn gặp lỗi 404, mặc dù mọi thứ đã được thực hiện chính xác, có lẽ bạn nên sửa lại cấu hình triển khai trong ý tưởng. Để thực hiện việc này, bạn cần đi tới Chỉnh sửa cấu hình (ở trên cùng gần nút bắt đầu), chuyển đến tab Triển khai ở bên phải cửa sổ và đảm bảo rằng trong ngữ cảnh Ứng dụng, nó chỉ được chỉ định /

Một đoạn lạc đề trữ tình ngắn: chuyện gì đang xảy ra “dưới mui xe”?

Có lẽ bạn đã tự hỏi ứng dụng của chúng tôi hoạt động như thế nào trong Tomcat? Chuyện gì đang xảy ra ở đó thế? Và phương thức main() ở đâu ? Ngay khi bạn nhập localhost:8080 vào trình duyệt của mình và truy cập địa chỉ này, trình duyệt sẽ gửi yêu cầu đến địa chỉ này thông qua giao thức http . Tôi hy vọng bạn đã biết rằng các yêu cầu có thể thuộc nhiều “loại” khác nhau, phổ biến nhất là GETPOST . Mọi yêu cầu đều phải có câu trả lời. Yêu cầu GET mong đợi rằng để đáp lại, nó sẽ được cung cấp một mã html làm sẵn , mã này sẽ được trả về trình duyệt và trình duyệt sẽ thay thế mã này một cách đẹp mắt bằng đủ loại chữ cái, nút và biểu mẫu. Yêu cầu POST thú vị hơn một chút vì nó cũng mang theo một số thông tin. Ví dụ: trong biểu mẫu đăng ký hoặc ủy quyền người dùng, bạn đã nhập dữ liệu của mình và nhấp vào “gửi”. Tại thời điểm này, một yêu cầu POST đã được gửi đến máy chủ kèm theo thông tin cá nhân của bạn bên trong. Máy chủ đã chấp nhận thông tin này, xử lý nó và trả về một số loại phản hồi (ví dụ: một trang html có hồ sơ của bạn). Sự khác biệt cơ bản giữa chúng là các yêu cầu GET chỉ nhằm mục đích nhận dữ liệu từ máy chủ, trong khi các yêu cầu POST mang theo một số thông tin và dữ liệu trên máy chủ có thể thay đổi (ví dụ: khi bạn tải ảnh của mình lên máy chủ, nó sẽ sẽ bay theo yêu cầu POST và máy chủ sẽ thêm nó vào cơ sở dữ liệu, tức là sẽ có một số thay đổi xảy ra. Bây giờ chúng ta quay lại Tomcat. Khi nhận được yêu cầu nào đó từ máy khách, nó sẽ xem xét địa chỉ. Tìm kiếm dữ liệu của nó để xem liệu có một servlet phù hợp nào có thể xử lý các yêu cầu đến một địa chỉ như vậy (hoặc một tài nguyên có sẵn có thể được trả lại ngay lập tức). Nếu nó không tìm thấy bất cứ thứ gì để trả về, nó sẽ phản hồi không phải bằng một trang html mà là với phản hồi 404. Nếu nó tìm thấy một servlet phù hợp "nằm" trên địa chỉ này, nó sẽ xem loại yêu cầu nào nó nhận được (GET, POST hoặc một số yêu cầu khác), sau đó hỏi servlet xem nó có phương thức nào không có thể xử lý loại yêu cầu này. Nếu servlet nói rằng nó không thể xử lý loại yêu cầu này, Tomcat sẽ phản hồi khách hàng bằng mã 405. Đây là điều vừa xảy ra với chúng tôi. Nhưng nếu tìm thấy một servlet phù hợp và nó có một phương thức phù hợp, Tomcat sẽ tạo một đối tượng của servlet này, chạy nó trong một luồng mới ( thread ), cho phép servlet đó hoạt động trong một luồng riêng biệt và Tomcat tiếp tục hoạt động xa hơn riêng của mình, nhận và gửi yêu cầu. Ngoài ra, Tomcat còn tạo thêm hai đối tượng: một thuộc loại HttpServletRequest (tôi sẽ gọi ngắn gọn nó là một yêu cầu trong tương lai) và đối tượng thứ hai thuộc loại HttpServletResponse(Tôi sẽ gọi nó là câu trả lời). Trong đối tượng đầu tiên, nó đặt tất cả dữ liệu mà nó nhận được theo yêu cầu từ máy khách, vì vậy tất cả dữ liệu đó có thể được lấy ra khỏi đối tượng này. Chà, sau tất cả những điều này, nó chuyển hai đối tượng này sang phương thức thích hợp của servlet đang chạy trong một luồng riêng biệt. Ngay sau khi servlet hoàn thành công việc của mình và có phản hồi sẵn sàng gửi cho khách hàng, nó sẽ treo cờ cho Tomcat và nói: “Tôi đã hoàn tất, mọi thứ đã sẵn sàng”. Tomcat chấp nhận phản hồi và gửi nó cho khách hàng. Điều này cho phép Tomcat chấp nhận các yêu cầu và gửi phản hồi mà không bị gián đoạn, trong khi tất cả công việc được thực hiện bởi các servlet chạy trong các luồng riêng biệt. Theo đó, khi viết mã servlet, chúng ta xác định công việc sẽ được thực hiện. Và vâng, bạn có thể coi phương thức main() giống như trong chính Tomcat (vâng, nó được viết bằng Java) và khi chúng ta "khởi động" Tomcat, tệp main().

Chúng tôi bắt các phương thức GET bằng servlet và gửi phản hồi đơn giản

Hiện tại, các servlet của chúng tôi không có phương thức phù hợp (GET), vì vậy Tomcat trả về cho chúng tôi lỗi 405. Hãy thực hiện chúng! Lớp HttpServlet , từ đó chúng ta kế thừa các servlet của mình, định nghĩa các phương thức khác nhau. Để đặt một số mã cho các phương thức, chúng ta chỉ cần ghi đè chúng. Trong trường hợp này, chúng ta cần ghi đè phương thức doGet() trong cả hai servlet.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}
Như bạn có thể thấy, phương thức này chấp nhận hai đối tượng: req (yêu cầu) và resp (phản hồi). Đây chính là những đối tượng mà Tomcat sẽ tạo và điền vào cho chúng ta khi nó gọi phương thức thích hợp trong servlet này. Đầu tiên, hãy làm những câu trả lời đơn giản nhất. Để thực hiện việc này, hãy lấy đối tượng resp và lấy từ nó một đối tượng PrintWriter , đối tượng này có thể được sử dụng để soạn phản hồi. Vâng, sử dụng nó chúng ta sẽ in ra một chuỗi đơn giản.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter writer = resp.getWriter();
    writer.println("Method GET from AddServlet");
}
Chúng tôi sẽ làm điều gì đó tương tự trong servlet ListServlet , sau đó chúng tôi sẽ khởi động lại máy chủ của mình. Như bạn có thể thấy, mọi thứ đều hoạt động! Khi bạn nhấp vào các nút, các trang sẽ mở ra với văn bản mà chúng tôi đã “ghi lại” bằng PrintWriter . Chỉ là jsp mà chúng tôi đã chuẩn bị để tạo các trang có câu trả lời không được sử dụng dưới bất kỳ hình thức nào. Điều này là do việc thực thi đơn giản là không đến được với họ. Bản thân serverlet bây giờ tạo ra phản hồi và hoàn thành công việc của nó, báo hiệu cho Tomcat rằng nó đã có phản hồi sẵn sàng cho máy khách. Tomcat chỉ cần nhận phản hồi này và gửi lại cho khách hàng. Chúng ta chuyển quyền điều khiển từ servlet sang jsp. Hãy thay đổi mã của các phương thức theo cách này:
  • chúng tôi nhận được từ đối tượng yêu cầu một đối tượng trình quản lý yêu cầu, nơi chúng tôi chuyển địa chỉ jsp của trang mà chúng tôi muốn chuyển quyền kiểm soát;
  • bằng cách sử dụng đối tượng nhận được, chúng tôi chuyển quyền kiểm soát đến trang jsp được chỉ định và đừng quên đính kèm vào đó các đối tượng yêu cầu và phản hồi mà chúng tôi nhận được từ Tomcat.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/add.jsp");
    requestDispatcher.forward(req, resp);
}
Trong phần nội dung của các trang jsp (bên trong thẻ body), chúng ta có thể viết một cái gì đó để có thể thấy rõ trang nào đang được hiển thị. Sau đó, chúng tôi khởi động lại máy chủ và kiểm tra. Các nút trên trang chính được nhấn, các trang được mở, có nghĩa là các yêu cầu được gửi đến các servlet, sau đó quyền điều khiển được chuyển đến các trang jsp đã được hiển thị. Đó là tất cả. Trong phần tiếp theo của bài viết, chúng ta sẽ đề cập đến chức năng của ứng dụng của mình.

Còn gì để đọc:

Tạo một dự án web đơn giản trong IntelliJ Idea Enterprise. Từng bước, với hình ảnh


Cuộc trò chuyện của tôi
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION