JavaRush /Blog Java /Random-VI /Tomcat trong Java

Tomcat trong Java

Xuất bản trong nhóm
Tại một thời điểm nào đó, mọi nhà phát triển đều đạt đủ kỹ năng để nghĩ đến việc tạo dự án của riêng mình để áp dụng kiến ​​thức của mình vào thực tế. Dễ dàng nhất là thực hiện một dự án web vì việc triển khai ứng dụng web không bị hạn chế bởi bất kỳ hạn chế nào, chẳng hạn như ứng dụng dành cho máy tính để bàn. Khách hàng chỉ cần có trình duyệt và có thể tương tác với ứng dụng mà không cần tải xuống bất kỳ bản phân phối nào. Như họ nói, không cần đăng ký và SMS (mặc dù điều này phụ thuộc vào chính ứng dụng). Tomcat trong Java - 1Vì vậy, để triển khai một ứng dụng web tốt bằng Java, bạn không thể thiếu công cụ có tên Tomcat. Nội dung:

Tomcat biết về Javarush

Tomcat được nghiên cứu ở cấp độ 9 của nhiệm vụ Bộ sưu tập Java trong khóa học JavaRush. Trong 2 bài giảng, Bilaabo sẽ hướng dẫn bạn cách tải xuống và định cấu hình Tomcat cũng như xây dựng ứng dụng web đầu tiên của bạn .

Tomcat - nó là gì?

Tomcat là một thùng chứa servlet mã nguồn mở cũng hoạt động như một máy chủ web. Thoạt nhìn, Tomcat có vẻ là một chủ đề khá nặng nề nhưng thực tế không phải vậy. Hầu hết các ứng dụng Java được khởi chạy bằng dòng lệnh và thực hiện một số hành động. Các ứng dụng như vậy thực hiện một chức năng được xác định trước, sau đó chúng không còn được thực thi nữa. Những chương trình như vậy thường có một phương pháp mainđể có thể khởi chạy chúng. Ứng dụng web được thiết kế để tương tác với khách hàng. Nếu có yêu cầu từ client, nó sẽ được xử lý và phản hồi sẽ được gửi đến người dùng. Nếu không, ứng dụng sẽ không hoạt động. Làm cách nào để triển khai logic như vậy trong một ứng dụng tiêu chuẩn, với điều kiện là bạn cần hỗ trợ phiên, chấp nhận yêu cầu HTTP, v.v.? Xe đạp while-true? Không, chúng ta cần một giải pháp đáng tin cậy ở đây. Đó chính là mục đích của Tomcat. Trên thực tế, đây là một ứng dụng Java đảm nhiệm việc mở cổng để tương tác với máy khách, thiết lập phiên, số lượng yêu cầu, độ dài tiêu đề và nhiều thao tác khác.

Thành phần Tomcat

Tomcat có các thành phần thực hiện các chức năng cụ thể đáng để biết. Chúng ta hãy xem xét kỹ hơn.

Catalina

Nhờ thành phần này, các nhà phát triển có cơ hội triển khai các chương trình của họ trong một thùng chứa. Catalina triển khai đặc tả API Servlet, công nghệ web cốt lõi trong lập trình web Java. Trên thực tế, Catalina là một thùng chứa servlet bên trong Tomcat (chúng ta sẽ xem xét khái niệm này chi tiết hơn bên dưới).

Jatpe

Nhờ thành phần này mà người lập trình sử dụng công nghệ JSP. Chúng giống như các tệp HTML, chỉ khác là chúng có mã Java nhúng có thể được thực thi khi trang được gửi tới người dùng. Điều này cho phép bạn nhúng động bất kỳ dữ liệu nào vào trang. Jasper biến mã Java thành HTML, đồng thời theo dõi các thay đổi và tự động cập nhật chúng.

chó sói

Đây là thành phần quan trọng lắng nghe các yêu cầu HTTP từ máy khách trên một cổng cụ thể, cung cấp dữ liệu đó để xử lý trong ứng dụng và cũng trả về phản hồi cho người dùng. Tức là Coyote triển khai chức năng của máy chủ HTTP. Các thành phần này có thể được mô tả cấu trúc bằng sơ đồ sau: Tomcat trong Java - 2Ở đây, sơ đồ gần đúng về sự tương tác của các thành phần được hiển thị “trên ngón tay”. Trên thực tế, cách thức hoạt động của Tomcat phức tạp hơn nhiều, nhưng điều này là đủ để bạn hiểu cơ bản.

Cài đặt Tomcat

Để sử dụng Tomcat trong Java, nó cần được cài đặt trên hệ thống. Bạn có thể đọc về cách cài đặt Tomcat trong bài viết này, bài viết này cũng đề cập đến các máy chủ ứng dụng khác. Vì vậy, khi có một Tomcat đang hoạt động được tích hợp trong IDEA, bạn có thể thử chuẩn bị servlet đầu tiên của mình.

Cách tạo một ứng dụng web

Để tạo một ứng dụng web, bạn phải tuân theo cấu trúc thư mục cụ thể. IntelliJ IDEA có chức năng tạo ứng dụng web trong menu tạo dự án. Sau khi tạo dự án theo cách này, bạn có thể thấy một cấu trúc đơn giản: Tomcat trong Java - 3Trong src, như mọi khi, có các nguồn và trong thư mục web web.xml và index.jsp được tạo. web.xml là hướng dẫn dành cho Tomcat nơi tìm kiếm trình xử lý yêu cầu và thông tin khác. index.jsp là trang chính của ứng dụng web, nơi người dùng nên truy cập đầu tiên (đây là cấu hình mặc định). Trong lần chạy đầu tiên, bạn chỉ cần chỉnh sửa tệp index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>$Title$</title>
 </head>
 <body>
   <h1>Hello world!</h1>
 </body>
</html>
Nếu Tomcat được cài đặt trực tiếp trong IDEA, bạn có thể khởi động máy chủ ứng dụng: Tomcat trong Java - 4Máy khách nhận được nội dung của tệp index.jsp trong trình duyệt khi nó điều hướng đến '/', tức là đến trang chính. Bây giờ, hãy thêm một liên kết đến trang nơi đặt thời gian của máy chủ hiện tại. Để tạo servlet đầu tiên của bạn, bạn cần sử dụng thư viện servlet-api.jar đi kèm với Tomcat (có thể tìm thấy trong thư mục lib). Hãy tạo một servlet sẽ hiển thị thời gian hiện tại của máy chủ trên trang. Để làm điều này bạn cần tạo một lớp TimeWorker. Hãy đặt nó vào thư mục src/ru/javarush/tomcat:
package ru.javarush.tomcat;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

public class TimeWorker extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     Date date = new Date();
     req.setAttribute("date", date.toString());
     req.getRequestDispatcher("time.jsp").forward(req, resp);
  }
}
TimeWorkerkế thừa từ lớp HttpServletvà ghi đè lớp doGet. Trong phương pháp này, chúng tôi nhận được hai tham số - requestresponse. Ví dụ: requestmột thuộc tính có tên datavà chứa chuỗi biểu thị ngày hiện tại sẽ được lưu trữ. Sau đó, nó được gọi và tham số và requestDispatcherđược truyền cho nó . Trình xử lý đã được tạo. Bây giờ bạn cần gửi yêu cầu cụ thể đến anh ấy. Hãy để bất kỳ quá trình chuyển đổi nào dẫn đến trang time.jsp. Mở web.xml, chèn cấu hình sau vào giữa các thẻ: requestresponse/time<web-app>
<servlet>
   <servlet-name>timeWorker</servlet-name>
   <servlet-class>ru.javarush.tomcat.TimeWorker</servlet-class>
   </servlet>

<servlet-mapping>
   <servlet-name>timeWorker</servlet-name>
   <url-pattern>/time</url-pattern>
</servlet-mapping>

<welcome-file-list>
   <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Thẻ đầu tiên - servlet- xác định tên của servlet và chỉ định đường dẫn đến lớp servlet sẽ xử lý các yêu cầu. Thẻ thứ hai - servlet-mapping- chỉ ra rằng servlet có tên timeWorkersẽ được gọi khi có yêu cầu url/thời gian. Thẻ thứ ba - welcome-file-list- cho biết tệp sẽ được gọi khi chuyển sang url /. Điều này phải được cấu hình nếu có nhu cầu thay đổi tệp mặc định. Bao gồm ở đây như một ví dụ. Bây giờ, khi bạn truy cập, phương thức trong lớp /timesẽ được gọi và trả về trang time.jsp... không tồn tại. Hãy tạo nó bên cạnh index.jsp: doGet TimeWorker
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>Hello</title>
</head>
<body>
   <h1>Current server time: <%=request.getAttribute("date")%></h1>
</body>
</html>
Sự khởi đầu là cổ điển, nhưng thẻ h1chứa lời kêu gọi đối tượng request, được đóng khung bởi <%=%>. Đây là những thẻ mẫu. Mã kèm theo các thẻ này được gọi trước khi gửi đến máy khách. Chà, các đối tượng requestresponsesẵn trong các thẻ như vậy trong bất kỳ tệp JSP nào. Trong ví dụ này, thời gian hiện tại của máy chủ được truyền bởi servlet sẽ được thay thế ở đó TimeWorker. Để thuận tiện, chúng ta tạo link tới file index.jsp /time:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>$Title$</title>
 </head>
 <body>
   <h1>Hello world!</h1>
   <a href="/time">Узнать текущее время serverа</a>
 </body>
</html>
Hãy chạy ví dụ: Tomcat trong Java - 5Theo liên kết: Tomcat trong Java - 6Tuyệt vời, mọi thứ đều hoạt động. Trong ví dụ này, chúng tôi đã triển khai quá trình chuyển đổi từ trang chính sang trang phụ, nơi một tham số được truyền và hiển thị cho người dùng. Nếu bạn gặp vấn đề khi chạy servlet, tôi khuyên bạn nên đọc bài đăng này , bài đăng này cung cấp các mẹo giải quyết vấn đề này. Để có phần giới thiệu đầy đủ hơn về servlet, chúng tôi khuyên bạn nên đọc các bài viết ( phần 1 , phần 2 ), trong đó tác giả mô tả chi tiết cách tạo một ứng dụng đơn giản bằng cách sử dụng servlets và jsp.

Cách nhúng ứng dụng vào máy chủ đang chạy

Mặc dù Tomcat tích hợp trong IDEA là một tính năng tiện lợi nhưng ứng dụng web có thể được chuyển sang máy chủ khác và sang vùng chứa khác. Hãy xem xét tùy chọn khi bạn cần nhúng ứng dụng của mình vào một máy chủ đang chạy. Đầu tiên, cần hiểu rõ hơn về mục đích và chức năng của servlet container . Chương trình trong ví dụ trên là một ứng dụng web. Lớp học TimeWorkerlà một servlet. Các thành phần độc quyền thực hiện xử lý yêu cầu. Các thành phần này phải được tích hợp vào một thùng chứa servlet đặc biệt. Mục đích của servlet container là hỗ trợ các servlet và đảm bảo vòng đời của chúng. Ví dụ đơn giản nhất về cách hoạt động của Tomcat là quét một thư mục cụ thể để xác định xem một servlet mới có xuất hiện trong đó hay không. Nếu có, hãy khởi tạo nó và chuẩn bị để nhận yêu cầu từ khách hàng. Nếu servlet đã được cập nhật, hãy khởi tạo lại để cập nhật các thành phần. Khi xóa một servlet, hãy dừng xử lý các yêu cầu và xóa servlet đó khỏi Tomcat.

Hàm chứa Servlet

  1. Trao đổi dữ liệu giữa servlet và client;
  2. Tổ chức các buổi gặp gỡ khách hàng;
  3. Tạo môi trường phần mềm cho hoạt động của servlet;
  4. Идентификация и авторизация клиентов;
  5. В большинстве случаев — управление метаданными (заголовки, методы и прочее).
Во-вторых, необходимо разобраться, How установить свой сервлет.

Установка сервлета

Tomcat принимает для обработки веб-applications на Java, которые имеют расширение .war. Это How jar, только web. Файлы такого типа объединяют в себе JSP-файлы, сервлеты, class-файлы, статические ресурсы и прочее. При установке такого file в Tomcat происходит его распаковка, а затем запуск, поэтому существует строгое требование к структуре файлов в проекте. Если проект был создан в IDEA, вся структура создана автоматически. Файл war можно создать стандартными средствами IDEA. Для этого необходимо зайти в ProjectStructure -> Artifacts -> Нажать “ +” -> WebApplication: Archive. В открывшемся поле задать Name для итогового war-file, например deployed_war. Ниже необходимо нажать на кнопку Create Manifest… Далее необходимо указать way to папке web проекта. В ней будет создана папка META-INF, в которую будет помещен файл MANIFEST.MF. Далее следует нажать Apply и Ok. Whatбы собрать проект в war-файл, следует во вкладке Build выбрать опцию Build Artifact: Tomcat trong Java - 7В появившемся поле нужно нажать на deployed_war. Затем начнется сборка проекта и Intellij IDEA создаст папку out, в которой появится папка artifacts с именем нашего артефакта. В этой папке будет лежать файл deployed_war.war: Tomcat trong Java - 8Теперь можно деплоить этот файл в Tomcat. Деплой applications проще всего выполнить из веб-интерфейса Tomcat. Просто нажмите кнопку выбора file на вкладке Deploy, перейдите к местоположению file WAR и выберите его, затем нажмите кнопку развертывания. В обоих случаях, если все пойдет хорошо, консоль Tomcat сообщит нам, что развертывание прошло успешно примерно таким выводом в консоль: INFO: Deployment of web application archive \path\to\deployed_war has finished in 4,833 ms

Польза Tomcat для разработки

Для разработчиков контейнеры сервлетов имеют огромную роль, так How решают целый спектр проблем. Для программирования на Java Tomcat обеспечивает несколько серьезных преимуществ:
  1. Самое главное, Tomcat может выполнять роль полноценного web-serverа. Благодаря этому развертывание приложений происходит гораздо быстрее, чем было раньше.Также Tomcat может выступать в роли классического контейнера сервлетов, который можно встроить в более крупный веб-server.

  2. Tomcat способствует обмену данными между клиентом и сервлетом, обеспечивает программный контекст для веб-приложений, берет на себя функции идентификации и авторизации клиентов, создание сессий для каждого из них.

  3. Cung cấp khả năng quản lý các trang JSP rất thuận tiện. Trên thực tế, máy chủ web chỉ có thể phục vụ html. Jasper, một thành phần của Tomcat, biên dịch mã có trong thẻ mẫu trang JSP thành một tệp HTML hợp lệ mà máy khách nhận được. Tất cả logic tạo khuôn mẫu đều nằm trong Tomcat, cho phép bạn thêm các hàm tạo thậm chí phức tạp vào biểu mẫu HTML cổ điển.

Và cuối cùng: các nhà phát triển mới làm quen thường được hỏi câu hỏi: liệu có thể chạy một ứng dụng Java mà không cần mainphương thức -. Thoạt nhìn, nếu bạn nhìn vào các ví dụ trên, điều đó là có thể. servlet của chúng tôi đã được thực thi mà không có main. Tuy nhiên, nó không phải vậy. Tomcat có phương thức riêng mainđược gọi khi máy chủ khởi động. Bạn có thể bị bắt gặp khi hỏi câu hỏi này tại một cuộc phỏng vấn.

Liên kết bổ sung:

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION