Ví dụ về Tomcat. Cài đặt Apache Tomcat. Thêm người dùng tomcat

Bước tiếp theo sau khi cài đặt Tomcat là chọn các cài đặt cơ bản. Quá trình này được chia thành hai giai đoạn, được mô tả chi tiết trong bài viết này. Đầu tiên là chỉnh sửa các tệp cài đặt XML, thứ hai là chọn các biến thích hợp cho môi trường.

Tệp cài đặt XML

Hai tệp cấu hình quan trọng nhất để chạy Tomcat được gọi là .xml và web.xml. Theo mặc định, chúng nằm ở TOMCAT-HOME/conf/server.xml và TOMCAT-HOME/conf/web.xml tương ứng.

Đừng thực hiện cùng một cài đặt hai lần. Hãy dùng thử Tcat - cấu hình máy chủ cho phép bạn lưu các cài đặt chung và áp dụng chúng cho nhiều phiên bản Tomcat chỉ bằng một cú nhấp chuột.

MÁY CHỦ.XML

tập tin máy chủ.xml - tập tin chính Cài đặt Tomcat. Các phần tử server.xml thuộc năm loại cơ bản:

  • Các yếu tố cấp cao nhất
  • Đầu nối hoặc Đầu nối
  • Hộp đựng
  • Thành phần lồng nhau
  • Thiết lập toàn cầu

Tất cả các phần tử từ các danh mục này đều có nhiều thuộc tính cho phép bạn xác định chính xác chức năng. Thông thường, nếu bạn cần thực hiện một số thay đổi quan trọng đối với quá trình cài đặt Tomcat, chẳng hạn như thay đổi số lượng cổng, bạn phải chỉnh sửa tệp server.xml.

Trang web Tài liệu Tomcat của Apache chứa rất nhiều thông tin nhưng thiếu một số thông tin về các thành phần cấu hình. Bài viết này bao gồm tất cả.

Các yếu tố cấp cao nhất

Máy chủ

Phần tử này xác định một máy chủ Tomcat duy nhất và chứa các phần tử cấu hình Logger và ContextManager. Ngoài ra, phần tử Máy chủ hỗ trợ các thuộc tính “port”, “shutdown” và “className”. Thuộc tính cổng được sử dụng để chỉ định cổng nào sẽ được sử dụng để thực thi lệnh tắt máy(ngắt kết nối). Thuộc tính tắt máy chỉ định dòng lệnh trên một cổng cụ thể để buộc tắt máy. Thuộc tính className là cách triển khai lớp Java nên được sử dụng.

Dịch vụ

Đây là phần tử có thể được đặt bên trong phần tử Máy chủ; nó chứa một hoặc nhiều thành phần Trình kết nối có chung thành phần Engine. Chức năng chính của thành phần này là xác định các thành phần này là một dịch vụ. Tên của dịch vụ sẽ xuất hiện trong nhật ký được xác định bằng thuộc tính “name” (Phần tử dịch vụ).

Đầu nối

Bằng cách đặt một hoặc nhiều trình kết nối vào thẻ Dịch vụ, bạn cho phép hệ thống chuyển tiếp các yêu cầu từ các cổng đó đến một thành phần Engine duy nhất để xử lý. Tomcat cho phép bạn xác định trình kết nối HTTP và AJP.

Trình kết nối HTTP

Phần tử này đại diện cho Trình kết nối HTTP/1.1 và cung cấp cho Catalina chức năng máy chủ web độc lập. Điều này có nghĩa là ngoài việc thực thi các trang phục vụ và trang JSP, Catalina còn có thể lắng nghe các yêu cầu trên các cổng TCP cụ thể. Khi định cấu hình trình kết nối HTTP, hãy chú ý đến các thuộc tính “minSpareThreads”, “maxThreads” và “acceptCount”.

Thuộc tính “maxThreads” đặc biệt quan trọng. Nó kiểm soát số lượng luồng tối đa có thể được tạo để quản lý các yêu cầu. Nếu giá trị được đặt quá thấp, các yêu cầu sẽ bị kẹt trên ổ cắm máy chủ, điều này có thể khiến kết nối không thành công. Vấn đề này đang được giải quyết trong quá trình thử nghiệm.

Đầu nối AJP

Phần tử này là một đầu nối cung cấp khả năng giao tiếp với giao thức AJP. Vai trò chính của phần tử này là giúp Tomcat hoạt động kết hợp với Apache.

Hộp đựng

Bằng cách sử dụng những phần tử này, Catalina định tuyến các yêu cầu đến đúng bộ máy xử lý.

Bối cảnh

Phần tử này đại diện cho một ứng dụng web cụ thể và chứa dữ liệu về đường dẫn mà qua đó các yêu cầu đối với tài nguyên ứng dụng tương ứng được xác định. Catalina nhận được yêu cầu và cố gắng khớp URI dài nhất với đường dẫn ngữ cảnh của một phần tử Ngữ cảnh cụ thể cho đến khi tìm thấy phần tử hợp lệ sẽ phục vụ yêu cầu.

Phần tử Ngữ cảnh có thể có tối đa một phiên bản nội tuyến cho mỗi phần tử từ các phần tử phụ trợ Loader, Manager, Realm, Resources và WatchedResource.

Mặc dù Tomcat cho phép bạn xác định các thành phần Ngữ cảnh trong “TOMCAT-HOME/conf/server.xml”, nhưng tốt nhất bạn nên tránh điều này vì không thể tải lại các cài đặt chính này nếu không khởi động lại Tomcat.

Động cơ

Phần tử này được sử dụng cùng với một hoặc nhiều trình kết nối được đặt trong phần tử Dịch vụ. Chỉ có thể sử dụng phần tử Engine nếu nó được đặt trong phần tử Dịch vụ và chỉ cho phép một phần tử Động cơ trong phần tử Dịch vụ. Hãy chú ý đến thuộc tính “defaultHost”, thuộc tính này chỉ định phần tử Máy chủ.

Cái sau chịu trách nhiệm phục vụ các yêu cầu về tên máy chủ trên máy chủ không được định cấu hình trong server.xml. Tên của thuộc tính này phải khớp với tên của một trong các phần tử Máy chủ được đặt trong phần tử Engine. Điều quan trọng nữa là chọn một tên logic, duy nhất cho từng thành phần Engine bằng cách sử dụng thuộc tính “name”. Nếu một thành phần Máy chủ trong tệp server.xml của bạn bao gồm nhiều thành phần Dịch vụ, bạn sẽ cần chọn một tên duy nhất cho mỗi thành phần Engine.

Chủ nhà

Một phần tử được đặt trong phần tử Engine và được sử dụng để liên kết tên mạng máy chủ với máy chủ Catalina. Phần tử này sẽ chỉ hoạt động bình thường nếu máy chủ ảo đã được đăng ký trong hệ thống DNS của miền tương ứng. Một trong những tính năng hữu ích nhất của phần tử Máy chủ là khả năng chứa các phần tử Bí danh, được sử dụng để xác định tên của nhiều mạng.

Cụm

Thành phần lồng nhau

Những phần tử này được đặt bên trong

các phần tử vùng chứa để cung cấp chức năng bổ sung.

Người nghe

Các phần tử này có thể được đặt bên trong các phần tử Máy chủ, Công cụ, Máy chủ hoặc Ngữ cảnh. Chúng chỉ ra một thành phần tạo ra một hành động cụ thể đối với một sự kiện cụ thể.

Hầu hết các thành phần đều có thuộc tính className để chọn các cách triển khai khác nhau của phần tử. Có một số triển khai Listener bổ sung, không chỉ những triển khai mặc định. Tất cả các cách triển khai này yêu cầu phần tử Listener phải được đặt trong yếu tố nhất định Máy chủ.

Và điều cực kỳ quan trọng là phải cấu hình chính xác thuộc tính này. Các triển khai hiện có sẵn có trong Trình nghe vòng đời APR, Trình nghe Jasper, Trình nghe vòng đời máy chủ, Trình nghe vòng đời tài nguyên toàn cầu, Trình nghe vòng đời từ xa JMX và Trình nghe ngăn chặn rò rỉ bộ nhớ JRE.

Tài nguyên đặt tên toàn cầu

Phần tử này được dùng để xác định Tài nguyên Java Giao diện đặt tên và thư mục cho một Máy chủ cụ thể, khác biệt với mọi bối cảnh ứng dụng web JNDI. Nếu cần, bạn có thể chỉ định các đặc tính tra cứu tài nguyên JNDI cho trong một phần tử nhất định bằng cách xác định chúng và liên kết chúng bằng cách sử dụng .

Kết quả của phương pháp này tương đương với việc thêm phần tử vào tệp ứng dụng “/WEB-INF/web.xml”. Nếu bạn sử dụng kỹ thuật này, hãy đảm bảo bạn xác định các tham số bổ sung cần thiết để đặt và định cấu hình đối tượng và thuộc tính gốc.

Vương quốc

Phần tử này được đặt trên bất kỳ phần tử Vùng chứa nào và chỉ định cơ sở dữ liệu chứa tên người dùng, mật khẩu và vai trò cho Vùng chứa. Khi được đặt bên trong phần tử Máy chủ hoặc Công cụ, các đặc điểm được chỉ định trong phần tử Vương quốc sẽ được chuyển đến tất cả các vùng chứa mức độ thấp hơn mặc định.

Điều quan trọng là phải đặt chính xác thuộc tính “className” của phần tử này vì có nhiều cách triển khai. Những triển khai này được sử dụng để cung cấp Catalina cho các hệ thống quản lý bảo mật người dùng khác (chẳng hạn như JDBC, JNDI hoặc DataSource).

Tài nguyên

Phần tử này chỉ có một mục đích - hướng Catalina đến các tài nguyên tĩnh được ứng dụng web của bạn sử dụng. Những tài nguyên này bao gồm các lớp, tệp HTML và JSP. Việc sử dụng phần tử này sẽ cấp cho Catalina quyền truy cập vào các tệp chứa ở các vị trí khác ngoài hệ thống tập tin(hệ thống tập tin), chẳng hạn như các tài nguyên có trong kho lưu trữ WAR hoặc cơ sở dữ liệu JDBC.

Điều quan trọng cần nhớ là kỹ thuật cho phép ứng dụng web truy cập các tài nguyên nằm bên ngoài hệ thống tệp chỉ có thể được sử dụng nếu ứng dụng không yêu cầu quyền truy cập trực tiếp vào tài nguyên được lưu trữ trong hệ thống tệp.

Van

Các thành phần Valve nằm trong các phần tử Engine, Host và Context để thêm chức năng tùy chỉnh vào quy trình xử lý yêu cầu. Đây là một yếu tố rất linh hoạt. Có nhiều nhiều loại khác nhau Các phần tử van - từ trình xác thực đến bộ lọc và sửa lỗi WebDAV. Nhiều loại Van này chỉ được đặt bên trong các bộ phận đặc biệt.

Web.XML

Tệp web.xml chứa thông tin được sử dụng để định cấu hình các thành phần trong ứng dụng web của bạn. Khi định cấu hình Tomcat lần đầu tiên, bạn có thể đặt ánh xạ servlet cho các thành phần trung tâm như JSP. Trong Tomcat, tệp này hoạt động theo cách tương tự như được mô tả trong đặc tả Servlet.

Điểm khác biệt duy nhất là cách Tomcat xử lý tệp này: có một tùy chọn để đặt giá trị mặc định cho tất cả các ngữ cảnh bằng TOMCAT-HOME/conf/web.xml. Nếu phương pháp này được sử dụng, cấu hình cơ sở sẽ là TOMCAT-HOME/conf/web.xml, có thể ghi đè lên các tệp WEB-INF/web.xml dành riêng cho ứng dụng.

Các tập tin cấu hình quan trọng khác

Có những tập tin quan trọng khác. Bạn có thể tìm thấy danh sách vai trò, người dùng và mật khẩu mà UserDatabaseRealm sử dụng để xác thực trong tomcat-users.xml. Nếu bạn cần quyền truy cập vào các công cụ quản trị khác có trong Tomcat, bạn có thể chỉnh sửa tệp và thêm quyền truy cập của quản trị viên và người quản lý.

Cài đặt ngữ cảnh mặc định cho quá trình cài đặt Tomcat của bạn có thể được thay đổi trong tệp context.xml. Tệp catalina.policy, thay thế tệp java.policy (đã chọn JDK), chứa cài đặt quyền cho các phần tử Tomcat. Bạn có thể chỉnh sửa tệp này theo cách thủ công hoặc sử dụng công cụ chính sách.

Biến môi trường

Nếu đây là lần đầu tiên bạn thiết lập Tomcat, bạn sẽ cần thay đổi một số biến môi trường cho phù hợp với yêu cầu của mình.

JAVA_OPTS

Biến này thay đổi kích thước vùng heap của JVM. Việc đặt biến này thành các giá trị phù hợp là rất quan trọng khi lưu trữ một ứng dụng mới có thể yêu cầu một lượng bộ nhớ heap nhất định để hoạt động chính xác. Bằng cách điều chỉnh các cài đặt này một cách thích hợp, bạn có thể giảm số lượng tin nhắn OOME.

CATALINA_HOME

Biến này chỉ định vị trí cài đặt Tomcat. Các tập lệnh khởi động Tomcat sẽ cố gắng xác định giá trị của biến này, nhưng tốt hơn là bạn chỉ nên đặt giá trị chính xác để tránh các biến chứng.

CATALINA_OPTS

Một biến được sử dụng để đặt các tùy chọn cụ thể khác nhau trong Tomcat.

Trong bài đăng hôm nay, chúng ta sẽ xem xét toàn bộ quá trình biên dịch tomcat từ các nguồn, sau đó thiết lập và chạy nó. Chúng ta sẽ tiến hành thí nghiệm trên linux ubuntu Ví dụ tom 7.
Câu hỏi đầu tiên có thể nảy sinh là, việc này có gì khó khăn đến vậy? Và thứ hai, tại sao lại biên dịch nó từ nguồn, nếu bạn có thể thực hiện phân phối nhị phân làm sẵn? Chà, trước hết, nhìn chung điều này thật thú vị con mèo tom thu thập từ các nguồn và thứ hai, tất cả những người đã từng xử lý việc cài đặt con mèo tom, toàn bộ quá trình cài đặt của nó được thực hiện để tải xuống bản phân phối nhị phân và khởi chạy nó, nghĩa là thực thi tập lệnh ./startup.sh, nhưng trong thế giới Windows, mọi chuyện thậm chí còn đơn giản hơn, ở đó trình cài đặt tạo các phím tắt khởi chạy trong menu bắt đầu. Ở đây chúng ta sẽ thực hiện tất cả các bước từ tải nguồn xuống đến tinh chỉnh ít nhiều con mèo tom.

Đối với bài đăng này, bạn sẽ cần:

  1. JRE là máy ảo Java mà nó chạy trên đó con mèo tom.
  2. Apche ant - công cụ xây dựng ứng dụng
  3. Mã nguồn tomcat chỉ đơn giản là văn bản mà máy không thể hiểu được, không khác gì văn bản của bài đăng này (theo nghĩa là nó cũng bao gồm các ký hiệu) và phải được chuyển đổi thành mã nhị phân mà máy có thể hiểu được.

Thêm người dùng tomcat

Hãy bắt đầu bằng cách thêm người dùng con mèo tom ai sẽ chịu trách nhiệm về máy chủ web con mèo tom, tức là quản trị viên máy chủ web con mèo tom. Nó dùng để làm gì? Nó cần thiết để chỉ anh ta mới có thể khởi động và dừng máy chủ, hơn nữa chỉ anh ta mới có thể (cùng với root) thay đổi cấu hình máy chủ.

sudo useradd -d /home/tomcat -U tomcat

chìa khóa -d có nghĩa thư mục chính, chìa khóa -U Tên tài khoản.
Sau khi người dùng con mèo tomđã tạo, hãy đặt mật khẩu cho nó:

mật khẩu sudo tomcatĐi vào mật khẩu mới UNIX: Nhập lại mật khẩu UNIX mới: passwd: mật khẩu được cập nhật thành công

Bây giờ hãy tạo một người dùng con mèo tom syudoer:

người dùng sudo tomcat sudo Thêm người dùng "tomcat" vào nhóm "sudo"... Thêm người dùng tomcat vào nhóm sudo Xong.

Để kiểm tra xem người dùng con mèo tom Tôi đã trở thành sudoer, bạn có thể mở file /etc/nhóm và tìm dòng trong đó: sudo:x:27:#####,#####,tomcat
Hoặc chuyển sang người dùng con mèo tom và nhập lệnh (cách chuyển sang người dùng khác, xa hơn một chút):

sudo whoami

Nếu đội sudo whoami sẽ trở lại nguồn gốc có nghĩa là người dùng con mèo tomđã trở thành một sudoer. Hãy để tôi giải thích tại sao đội tôi là ai trả lại lời ru, nhưng không con mèo tom bởi vì khi bất kỳ lệnh nào được chạy với sudo, điều này có nghĩa là nó được đưa ra thay mặt cho lời ru, tương ứng là lệnh sudo whoami chạy như Ru-tơ và kết quả sẽ là người dùng Ru-tơ.
Bây giờ hãy tạo một thư mục chính cho người dùng con mèo tom:

sudo mkdir /home/tomcat

Và chỉ định chủ sở hữu của thư mục người dùng con mèo tom:

sudo chown tomcat /home/tomcat

Bây giờ hãy chuyển sang người dùng con mèo tom và đi đến thư mục chính của nó:

su tomcat Mật khẩu: cd

Đang tải xuống nguồn tomcat

Ở bước trước chúng ta đã tạo một người dùng con mèo tom và đi đến thư mục chính của anh ấy. Bây giờ hãy tạo một thư mục trong thư mục chính của anh ấy lượt tải xuống và chúng ta hãy đi sâu vào nó:

mkdir tải về tải cd

Bây giờ hãy truy cập trang web http://tomcat.apache.org/download-70.cgi để tải xuống các nguồn, bạn có thể tìm thấy nguồn này ở cuối trang trong phần Phân phối mã nguồn và tải chúng xuống danh mục lượt tải xuống mà chúng ta vừa tạo.
Thay đổi chủ sở hữu của kho lưu trữ này thành con mèo tom(nếu cần thiết):

sudo chown tomcat apache-tomcat-7.0.54-src.tar.gz mật khẩu cho mèo đực:

Giải nén kho lưu trữ vào thư mục hiện tại:

tar xvzf apache-tomcat-7.0.54-src.tar.gz

và kho lưu trữ có thể bị xóa:

rm apache-tomcat-7.0.54-src.tar.gz

Cài đặt apache-ant

Biên dịch con mèo tom chúng tôi sẽ sử dụng bộ sưu tập kiến apache. Truy cập trang web apache-ant và tải bản phân phối về thư mục lượt tải xuống. Tại thời điểm viết bài này, bài cuối cùng là 1.9.4 .
Hãy giải nén nó vào thư mục hiện tại:

tar xvzf apache-ant-1.9.4-bin.tar.gz

Hãy chuyển nó tới thư mục chung/usr/bin

sudo cp apache-ant-1.9.4-bin.tar.gz /usr/bin

Bây giờ hãy thêm đường dẫn này vào biến môi trường CON ĐƯỜNG vì điều đó:

PATH=/usr/bin/Apache-ant-1.9.4:$PATH

Chúng tôi xóa kho lưu trữ và thư mục đã giải nén khỏi thư mục lượt tải xuống:

rm -rf apache-ant*

Chìa khóa -r cần thiết cho danh mục apache-ant-1.9.4-binđã được loại bỏ đệ quy và chìa khóa -fđể linux không hiển thị cảnh báo rằng kho lưu trữ apache-ant-1.9.4-bin.tar.gzđược bảo vệ.
Bây giờ hãy kiểm tra xem kiến apache chúng tôi thấy:

phiên bản kiến Apache Ant(TM) phiên bản 1.9.4 được biên soạn vào ngày 29 tháng 4 năm 2014

Nếu câu trả lời là thế này thì chúng ta chuyển sang phần biên dịch con mèo tom, nếu không thì thực hiện lại bước này Cài đặt apache-ant.

Biên dịch tomcat

Và vì vậy thư mục chứa các nguồn con mèo tomđã tải về và giải nén, kiến apacheđã được định cấu hình, bây giờ hãy chuyển đến thư mục nguồn con mèo tom:

cd apache-tomcat-7.0.54-src.tar.gz

mở tập tin để chỉnh sửa build.properties.default:

build.properties.default

# -----Mặc địnhĐường dẫn cơ sở cho các gói phụ thuộc ----- # Xin lưu ý rằng đường dẫn này phải tuyệt đối, không tương đối, # vì nó được tham chiếu với các bối cảnh thư mục làm việc khác nhau bởi các tập lệnh xây dựng khác nhau. base.path=/usr/share/java #base.path=C:/path/to/the/repository #base.path=/usr/local

Chúng tôi đang tìm kiếm một dòng trong đó #base.path=/usr/local, bỏ ghi chú và thay đổi đường dẫn đến /home/tomcat/tải xuống/tomcat(dòng 7):

build.properties.default

# ----- Đường dẫn cơ sở mặc định cho các gói phụ thuộc ----- # Xin lưu ý rằng đường dẫn này phải tuyệt đối, không tương đối, # vì nó được tham chiếu với các bối cảnh thư mục làm việc khác nhau bởi các tập lệnh xây dựng khác nhau. base.path=/usr/share/java #base.path=C:/path/to/the/repository base.path=base.path=/home/tomcat/downloads/tomcat

Bây giờ chúng ta đã làm gì? Chúng tôi đã chỉ ra thư mục nơi tập lệnh xây dựng sẽ tải xuống các nguồn cần thiết cho bản dựng. Sau đó đổi tên tập tin thành build.property:

mv build.properties.default build.properties

Và bây giờ chúng ta đến phần tổng hợp con mèo tom. Đầu tiên, hãy xóa thư mục:

ant sạch sẽ phụ thuộc

và biên dịch với con mèo tomđội kiến -Dno.build.dbcp=true:

kiến -Dno.build.dbcp=true

Nếu mọi thứ đã được thực hiện chính xác thì bản dựng sẽ trở lại XÂY DỰNG THÀNH CÔNG:

Bản dựng: Biên dịch 31 tệp nguồn thành /home/tomcat/downloads/apache-tomcat-7.0.54-src/output/jdbc-pool/classes cảnh báo: đường dẫn lớp bootstrap không được đặt cùng với cảnh báo -source 1.5: giá trị nguồn 1.5 là lỗi thời và sẽ bị xóa trong cảnh báo phát hành trong tương lai: giá trị mục tiêu 1.5 đã lỗi thời và sẽ bị xóa trong cảnh báo phát hành trong tương lai: Để chặn cảnh báo về các tùy chọn lỗi thời, hãy sử dụng -Xlint:-options. 4 cảnh báo Xây dựng jar: /home/tomcat/downloads/apache-tomcat-7.0.54-src/output/jdbc-pool/tomcat-jdbc.jar Sao chép 1 tệp vào /home/tomcat/downloads/apache-tomcat-7.0. 54-src/output/build/lib BUILD THÀNH CÔNG Tổng thời gian: 23 giây

nếu vậy thì xin chúc mừng, tổng hợp con mèo tomđã thành công và bản dựng của nó sẽ xuất hiện trong danh mục đầu ra/xây dựng.

Thiết lập tomcat

Sau đó con mèo tomđã được biên dịch thành công, bây giờ nó hơi lạc điệu một chút. Đầu tiên, hãy chuyển nó sang một thư mục dễ chấp nhận hơn, hãy để nó là thư mục thùng rác người dùng ở đâu con mèo tom sẽ xếp chồng tất cả các ứng dụng nhị phân của nó.
Hãy tạo một thư mục thùng rác trong thư mục chính của người dùng con mèo tom:

thùng mkdir

Bây giờ hãy chuyển từ biên soạn con mèo tom vào danh mục thùng rác:

cp -r /home/tomcat/downloads/apache-tomcat-7.0.54-src/output/build /home/tomcat/bin

Tôi tự nhắc nhở bạn con mèo tom với biên dịch vào một thư mục xây dựng.
Tiếp theo chúng ta hãy vào danh mục /home/tomcat/bin và đổi tên thư mục xây dựng ví dụ như một cái gì đó dễ hiểu hơn apache-tomcat-7:

mv xây dựng apache-tomcat-7

Theo mặc định, tất cả các ứng dụng web được đặt trong thư mục ứng dụng web mục lục ($CATALINA_HOME). Chúng tôi sẽ tạo một thư mục riêng để đặt các ứng dụng web, sao cho trong chính thư mục đó ($CATALINA_HOME) không truy cập một cách không cần thiết, vì các tệp ứng dụng web có thể thay đổi tương đối thường xuyên, không giống như các tệp của chính bộ chứa servlet.
Hãy vào thư mục chính của người dùng con mèo tom và tạo một thư mục có cùng tên ứng dụng web:

ứng dụng web cd mkdir

Bây giờ điều quan trọng nhất là chúng ta có một thư mục máy chủ web /home/tomcat/bin/apache-tomcat-7 và có một danh mục /home/tomcat/ứng dụng web nơi các ứng dụng web sẽ được đặt. Chúng tôi sẽ hạn chế quyền truy cập vào chúng đối với người dùng con mèo tom:

sudo chmod -R 700 /home/tomcat/bin/apache-tomcat-7 mật khẩu cho tomcat: sudo chmod -R 700 /home/tomcat/webapps

Bây giờ hãy viết đường dẫn đến thư mục mà chúng ta sẽ đặt tất cả các ứng dụng web vào tệp cấu hình máy chủ máy chủ.xml. Chúng ta hãy đi đến danh mục bin/apache-tomcat-7/conf, nơi lưu trữ tất cả các tệp cấu hình máy chủ và mở tệp để chỉnh sửa máy chủ.xml. Trong thẻ Chủ nhà thay đổi giá trị thuộc tính ứng dụngBase Với ứng dụng web TRÊN /home/tomcat/ứng dụng web(dòng 124):

máy chủ.xml

Bây giờ, hãy thêm bảng quản trị để người dùng có thể triển khai các ứng dụng web, nhưng đối với họ, người dùng con mèo tom phải ban hành các quyền thích hợp. Nhưng người dùng con mèo tom sẽ tự trao quyền cho mình. Để thực hiện việc này, hãy vào thư mục conf:

cd /home/tomcat/bin/apache-tomcat-7/conf

và mở tập tin để chỉnh sửa tomcat-users.xml.
Hãy bỏ ghi chú năm thẻ cuối cùng và thêm vai trò cho usrename con mèo tom:

  • giám đốc
  • quản lý-gui
  • quản trị-gui
  • Dòng 31:

    tomcat-users.xml

    Bây giờ hãy xóa người dùng con mèo tom từ nhóm sudo. Tại sao làm điều này? Rồi sao sudo không phải đồ chơi dành cho trẻ em, chúng tôi cần chỉ định một người dùng con mèo tom syudoer, để không liên tục chuyển sang syudoer nếu chúng ta cần đặt quyền đối với thư mục chứa các ứng dụng web, v.v. Nhưng bây giờ, khi mọi thứ đã hoàn tất và chúng tôi biết chắc chắn rằng người dùng con mèo tom Nếu anh ta không giải quyết bất kỳ nhiệm vụ quản trị nào khác ngoài việc khởi động/dừng máy chủ và thiết lập máy chủ này, thì anh ta không cần phải là một sudoer. Để thực hiện việc này, hãy đi đến một syudoer khác và thực hiện lệnh thay mặt cho syudoer khác đó:

    sudo gpasswd -d tomcat sudo Xóa người dùng tomcat khỏi nhóm sudo

    Ở đây tại đội gpasswd chìa khóa -d có nghĩa xóa bỏ người dùng con mèo tom từ nhóm sudo.
    Và việc cuối cùng còn lại chúng ta phải làm là sao chép tất cả các ứng dụng web từ thư mục /home/tomcat/bin/apache-tomcat-7/webapps vào danh mục đã tạo của chúng tôi /home/tomcat/ứng dụng web:

    cp -r /home/tomcat/bin/apache-tomcat-7/webapps/* /home/tomcat/webapps

    Khởi động máy chủ web tomcat

    Mọi thứ đã sẵn sàng để khởi động máy chủ web con mèo tom. Chúng ta hãy đi đến danh mục /home/tomcat/bin/apache-tomcat-7/bin và chạy tập lệnh ./startup.sh:

    Cd /home/tomcat/bin/apache-tomcat-7/bin ./startup.sh Sử dụng CATALINA_BASE: /home/tomcat/bin/apache-tomcat-7 Sử dụng CATALINA_HOME: /home/tomcat/bin/apache-tomcat-7 Sử dụng CATALINA_TMPDIR: /home/tomcat/bin/apache-tomcat-7/temp Sử dụng JRE_HOME: /usr/java Sử dụng CLASSPATH: /home/tomcat/bin/apache-tomcat-7/bin/bootstrap.jar:/home/tomcat /bin/apache-tomcat-7/bin/tomcat-juli.jar Tomcat đã bắt đầu.

    Hãy kiểm tra xem con mèo tomđã khởi chạy, để thực hiện việc này, hãy nhấp vào liên kết http://localhpst:8080 và trang bắt đầu sẽ xuất hiện con mèo tom:

    Bây giờ chúng ta vào bảng quản trị click vào ổ bánh mì

    Một dự án triển khai đặc tả Bộ chứa Servlet và đặc tả Trang máy chủ Java (JSP). Được dùng như máy chủ độc lập các ứng dụng web, như một máy chủ nội dung kết hợp với Máy chủ web Apache và cũng như một thùng chứa servlet trong các máy chủ ứng dụng JBoss và GlassFish.
    TRONG công việc trong phòng thí nghiệm Giả định rằng Tomcat sẽ được cài đặt và cấu hình như một máy chủ ứng dụng web chạy hệ điều hành OpenSuSE 12.2.

    Mục tiêu của công việc: Cài đặt và thực hiện cấu hình cơ bản của Apache Tomcat như một máy chủ ứng dụng web.

    Nhiệm vụ cho công việc

    1. Cài đặt môi trường Java từ gói OpenJDK.
    2. Cài đặt Tomcat.
    3. Khởi chạy Tomcat và kiểm tra hoạt động của nó tại http://localhost:8080.
    4. Viết một trang JSP test.jsp xuất ra một chuỗi tùy ý.
    5. Viết một servlet thử nghiệm in một chuỗi tùy ý.
    6. Viết một trang bắt đầu index.html chứa các liên kết đến trang test.jsp và servlet thử nghiệm.

    Cài đặt Java và Tomcat

    1. Cài đặt Bộ công cụ phát triển Java (JDK)

    Tomcat yêu cầu môi trường được cài đặt để phát triển các ứng dụng Java (Bộ công cụ phát triển Java, JDK). Bạn có thể kiểm tra phiên bản nào được cài đặt trên hệ thống, ví dụ như thế này:

    Aag@stilo:~> zypper se java | grep "runtime" -i // lọc thông tin dư thừa Tôi| java-1_7_0-openjdk | Thời gian chạy Java môi trường dựa trên OpenJDK 7 và IcedTea 7 | gói | java-1_7_0-openjdk | Môi trường thời gian chạy Java dựa trên OpenJDK 7 và IcedTea 7 | gói nguồn

    Trong ví dụ trên, hệ thống có (ký hiệu Tôi(đã cài đặt)) phiên bản 1.7 của OpenJDK - bộ công cụ phát triển miễn phí, hoàn toàn tương thích với Sun (Oracle) JDK.

    Nếu không có gói nào có sẵn được cài đặt thì bạn nên cài đặt nó:

    Aag@stilo:~> zypper in java-1_7_0-openjdk* .... // quá trình cài đặt

    Bạn có thể kiểm tra kết quả cài đặt như mô tả ở trên.

    Bạn có thể tìm ra đường dẫn chứa môi trường thời gian chạy Java từ biến môi trường $JAVA_HOME:

    Aag@stilo:~> echo $Java_HOME /usr/lib64/jvm/jre

    Và bạn có thể tìm ra số phiên bản JDK đã cài đặt (và đã sử dụng) như thế này:

    Aag@stilo:~> java -version phiên bản java "1.7.0_09" Môi trường thời gian chạy OpenJDK (IcedTea7 2.3.3) (suse-3.16.1-x86_64) OpenJDK 64-Bit Server VM (bản dựng 23.2-b09, chế độ hỗn hợp)

    2. Cài đặt Tomcat

    Việc cài đặt Tomcat và các gói liên quan từ kho lưu trữ được thực hiện theo cách thông thường:

    Aag@stilo:~> zypper in tomcat* Đọc các gói đã cài đặt... // aag: danh sách được rút ngắn và có thể khác với các gói trên Các gói MỚI sau sẽ được cài đặt: jakarta-commons-dbcp-tomcat jakarta-commons-pool -tomcat5 tomcat tomcat- quản trị viên-webapps tomcat-docs-webapp tomcat-servlet-3_0-api tomcat-webapps ... Kích thước đầy đủ tải: 7,2 M. Sau khi vận hành, sẽ sử dụng thêm 43,6 M. Tiếp tục? [Không hẳn vậy]:

    Sau khi được xác nhận, các gói cần thiết sẽ được tải xuống và cài đặt. Trong trường hợp này, các thư mục con sau sẽ được tạo trong hệ thống (cài đặt mặc định trong OpenSuSE 12.2, vị trí thực tế phụ thuộc vào bản phân phối và phiên bản hệ điều hành cũng như phiên bản của chính Tomcat):

    • /usr/share/Tomcat/bin: tập lệnh điều khiển;
    • /etc/tomcat/conf: các tệp cấu hình (server.xml, web.xml, context.xml, tomcat-users.xml);
    • /usr/share/java/tomcat/lib: các tệp jar được sử dụng bởi tất cả các ứng dụng web và tiện ích mở rộng Tomcat;
    • /var/log/Tomcat: tệp nhật ký;
    • /srv/tomcat/webapps: thư mục chứa các ứng dụng web (servlets và JSP);
    • /var/cache/tomcat/work: Thư mục làm việc của Tomcat, được sử dụng chủ yếu khi chuyển đổi các trang JSP thành servlet;
    • /var/cache/Tomcat/temp: các tập tin tạm thời.

    Thư mục /usr/share/Tomcat cũng sẽ chứa các liên kết tượng trưng đến các thư mục được chỉ định. Đường dẫn đến thư mục chính của Tomcat có thể được ghi vào biến môi trường $CATALINA_HOME (export CATALINA_HOME="/usr/share/tomcat/").

    3. Khởi động và dừng máy chủ

    Nếu quá trình cài đặt thành công, bạn có thể thử khởi động Tomcat:

    Aag@stylo:~> $CATALINA_HOME/bin/catalina.sh bắt đầu

    Tập lệnh catalina.sh được sử dụng để khởi động thủ công và dừng máy chủ Tomcat. Vì khởi động tự động bạn có thể sử dụng tập lệnh dịch vụ (dịch vụ tomcat start|stop|restart), trước tiên bạn phải chỉ định mức chạy mà daemon tomcat sẽ bắt đầu (xem chkconfig)

    Catalina- tên của thành phần Tomcat thực hiện trực tiếp các chức năng của bộ chứa servlet. Tên này đã được sử dụng trong phiên bản trước(tối đa Tomcat5) cho toàn bộ sản phẩm. Các thành phần khác trong hệ thống là Coyote, hỗ trợ truyền tải HTTP 1.1 và Jasper, được thiết kế để xử lý JSP (phân tích các tệp JSP và biên dịch chúng thành mã Java, sau đó được chuyển đến Catalina để xử lý).

    Máy chủ ứng dụng web đang chạy sẽ lắng nghe các kết nối đến trên cổng 8080. Bạn có thể kiểm tra điều này bằng cách nhập http://localhost:8080 vào thanh địa chỉ trình duyệt của bạn (Hình 1).

    Cơm. 1. Trang bắt đầu mặc định máy chủ Apache tomcat

    Bạn có thể dừng Tomcat khởi động thủ công như thế này:

    Aag@stylo:~> $CATALINA_HOME/bin/catalina.sh dừng lại

    Thiết lập máy chủ Tomcat

    Để định cấu hình máy chủ Tomcat, các tệp cấu hình XML sau được sử dụng, nằm trong thư mục $CATALINA_HOME/conf/:

    • server.xml: Cài đặt máy chủ chung (cổng, máy chủ ảo, v.v.).
    • web.xml: Cài đặt chung cho TẤT CẢ ứng dụng web trên máy chủ hiện tại. Cài đặt của từng ứng dụng web được chỉ định trong tệp /WEB-INF/web.xml của riêng chúng (điều này có thể được so sánh với việc sử dụng tệp .htaccess trong Apache).
    • context.xml: Cài đặt quản lý nội dung chung.
    • tomcat-users.xml: Danh sách người dùng và nhóm (vai trò).

    Chú ý: Trước khi thực hiện bất kỳ thay đổi nào đối với các tệp này, bạn nên thực hiện chúng bản sao lưu. Bạn cũng nên chú ý đến các nhận xét được cung cấp kèm theo các tệp này.

    conf/server.xml - Thay đổi số cổng

    Theo mặc định, Tomcat sử dụng cổng TCP 8080, cũng như cổng 8009 và 8005, để chấp nhận các kết nối đến:

    Aag@stilo:~> netstat -tuaev --numeric-ports | grep tomcat tcp 0 0 localhost:8005 *:* LISTEN tomcat 20539 tcp 0 0 *:8009 *:* LISTEN tomcat 20533 tcp 0 0 *:8080 *:* LISTEN tomcat 20524

    Các cổng này có thể được thay đổi thành các cổng khác không được các dịch vụ mạng khác sử dụng bằng cách thay đổi chúng trong tệp conf/server.xml. Ví dụ: để buộc Tomcat hoạt động trên cổng 8081, bạn cần tìm dòng sau trong tệp conf/server.xml và thay đổi giá trị của thuộc tính cổng thành thuộc tính bắt buộc (8081), sau đó khởi động lại máy chủ:

    ... ...

    Đối với máy chủ của nhà phát triển, bạn có thể sử dụng bất kỳ cổng không có đặc quyền nào. Đối với máy chủ sản xuất, bạn nên sử dụng cổng 80, cổng này là tiêu chuẩn cho máy chủ HTTP.

    conf/web.xml - Cho phép liệt kê thư mục

    Để thiết lập hiển thị danh sách các tập tin trong thư mục (danh sách), bạn cần thay đổi giá trị của thuộc tính danh sách từ false thành true trong khối cài đặt servlet mặc định ("default"-servlet) trong tệp conf/web.xml . Điều này có thể hữu ích khi phát triển và gỡ lỗi các ứng dụng web, nhưng không được khuyến khích sử dụng trên máy chủ sản xuất vì lý do bảo mật.

    ... mặc định org.apache.catalina.servlets.DefaultServlet gỡ lỗi 0 danh sách ĐÚNG VẬY 1 ...

    conf/context.xml - Cài đặt tự động tải lại trang

    Có thể buộc Tomcat tự động khởi động lại sau khi thay đổi mã. Bạn cần thêm thuộc tính có thể tải lại với giá trị "true" vào phần tử tệp conf/context.xml. Điều này khá hữu ích trong quá trình phát triển và gỡ lỗi các servlet, nhưng một lần nữa, nó không được khuyến khích trong thành phẩm.

    có thể tải lại="true"> ...

    conf/Tomcat-users.xml - Quản lý người dùng và vai trò

    Tệp conf/Tomcat-users.xml được sử dụng để quản lý những người dùng có thể quản lý máy chủ Tomcat. Ví dụ: để tạo một người dùng quản lý có thể quản lý các ứng dụng web thông qua vỏ đồ họa(vai trò được xác định trước của người quản lý-gui), bạn cần thêm một mục như thế này vào tệp này:

    Phát triển và phân phối ứng dụng web chạy Tomcat

    Hãy xem một số ví dụ về việc sử dụng Tomcat để phát triển các ứng dụng web bằng Java. Ở đây chúng tôi sẽ không tập trung vào các mã chương trình như vậy, vì một chuyên ngành riêng được dành cho vấn đề này - “Lập trình hướng đối tượng bằng ngôn ngữ Java”.

    Tạo cấu trúc thư mục và lưu trữ các trang web

    Tất cả các ứng dụng web được lưu trữ trong thư mục webapps (/srv/tomcat/webapps). Mỗi ứng dụng nằm trong thư mục riêng cùng tên với cấu trúc lồng nhau cụ thể (webapps/youappname/WEB-INF/classes). Đối với một ứng dụng web mới (ví dụ: myapp), cấu trúc này có thể được tạo, ví dụ như sau:

    // WEB-INF là tên thư mục được xác định trước và phân biệt chữ hoa chữ thường aag@stilo:~> sudo mkdir -p /srv/tomcat/webapps/myapp/WEB-INF/classes

    Mục đích của các thư mục được tạo như sau:

    • myapp: Thư mục gốc của ứng dụng web. Đây là nơi chứa các trang HTML và các tài nguyên khác (biểu định kiểu (CSS), hình ảnh, tập lệnh máy khách (javascript), JSP, v.v.) có sẵn cho máy khách web.
    • myapp/WEB-INF: Thư mục này, người dùng web không thể truy cập được, chứa mô tả về ứng dụng web và các tham số của nó trong tệp web.xml.
    • myapp/WEB-INF/classes: Thư mục này chứa tất cả các tệp lớp Java của servlet.

    Hãy đặt file index.html có nội dung sau vào thư mục gốc của ứng dụng web đang được tạo:

    Sau khi khởi động lại máy chủ, ứng dụng web đang được tạo có thể được truy cập tại http://localhost:8080/myapp/ (Hình 2).

    Cơm. 2. Hiển thị trang tĩnh

    Trang máy chủ Java

    Trang máy chủ Java (JSP) là các trang web động có chứa, ngoài đánh dấu HTML, các hướng dẫn về ngôn ngữ Java(tương tự như PHP hoặc ASP). Những tài nguyên như vậy được phân bổ và sử dụng giống như tài nguyên tĩnh. Một ví dụ JSP được hiển thị trong Liệt kê 1 và kết quả được hiển thị trong Hình. 3.

    Liệt kê 1. Ví dụ về đánh dấu JSP

    Cơm. 3. Xuất trang JSP

    Lưu ý: Nếu bạn nhận được thông báo lỗi như thế này khi truy cập trang JSP:
    org.apache.jasper.JasperException: java.lang.IllegalStateException: Không có thư mục đầu ra.... ,
    điều này rất có thể có nghĩa là thư mục tomcat/work không thể ghi được. Sử dụng chmod -R a+w tomcat/work để đặt quyền hoặc chown để thay đổi quyền sở hữu.

    Servlet

    Tất cả các servlet ( ứng dụng máy chủ trong Java) được đặt trong thư mục con WEB-INF/classes/. Chúng ta hãy xem việc sử dụng các servlet bằng một ứng dụng ví dụ hiển thị một số thông tin về máy chủ (Liệt kê 1).

    Liệt kê 1. Mã nguồn Java servlet

    // Lưu dưới dạng /srv/Tomcat/webapps/myapp/WEB-INF/classes/MyServlet.java import java.io.*; nhập javax.servlet.*; nhập javax.servlet.http.*; public class MyServlet mở rộng HttpServlet ( @Override public void doGet(HttpServletRequest request, HttpServletResponse reply) ném IOException, ServletException ( // đặt kiểu MIME và mã hóa phản hồi reply.setContentType("text/html; charset=UTF8"); PrintWriter out = reply.getWriter(); // Gửi trang web thử ( out.println(" "); out.println(" mẫu servlet"); out.println(" "); out.println("

    Tài nguyên được yêu cầu: " + request.getRequestURI() + "

    "); out.println("

    Giao thức: " + request.getProtocol() + "

    "); out.println("

    Địa chỉ máy chủ: " + request.getRemoteAddr() + "

    "); out.println(""); ) cuối cùng ( out.close(); // Luôn đóng Writer ) ) )

    Giai đoạn tiếp theo là biên soạn. Điều này có thể được thực hiện từ môi trường phát triển bạn đang sử dụng (Eclipse, NetBeans, IntelliJ, v.v.) hoặc từ dòng lệnh. Nếu bạn sử dụng openJDK và Tomcat 7 thì nó sẽ trông giống như thế này:

    Aag@stylo:~> javac -classpath /usr/share/tomcat/lib/tomcat-servlet-3.0-api.jar:classes /srv/tomcat/webapps/myapp/WEB-INF/classes/MyServlet.java

    Kết quả của quá trình biên dịch là tệp MyServlet.class sẽ được tạo trong thư mục WEB-INF/classes. Bây giờ chúng ta cần cấu hình Tomcat để sử dụng nó.

    Thiết lập quyền truy cập servlet

    Theo quan điểm của người dùng, servlet là một tài nguyên web thông thường được xử lý bởi URI và servlet được truy cập thông qua thanh địa chỉ browser. Tuy nhiên, để servlet có sẵn cho máy khách, nó phải được cấu hình trong tệp WEB-INF/web.xml của ứng dụng web. Cấu trúc của tệp này cho ví dụ đang được xem xét sẽ giống như thế này:

    vềMáy chủ MyServlet vềMáy chủ /Về

    Trong cấu hình này, servlet từ tệp MyServlet.class sẽ được thực thi khi truy cập địa chỉ /myapp/ Về. Đối với MỌI servlet phải có một cặp , liên kết bởi phần tử .

    Để những thay đổi có hiệu lực, bạn cần khởi động lại máy chủ. Kết quả thực hiện servlet được hiển thị trong Hình 2. 4.

    Cơm. 4. Thực thi servlet

    Thông tin chi tiết về tất cả các khả năng của máy chủ Tomcat có thể được lấy từ tài liệu được cài đặt cùng với máy chủ và có sẵn tại http://localhost:8080/docs/ hoặc trên trang web chính thức của dự án: http://tomcat.apache .org/.

    Địa chỉ thường trú trang này:

    Các lập trình viên trẻ thường đặt câu hỏi: tại sao chúng ta thường cần các máy chủ ứng dụng công nghiệp khá nặng và đắt tiền (như JBoss NHƯ, Oracle WebLogic, IBM WebSphere AS), nếu chúng ta có một framework nhẹ tuyệt vời Mùa xuân và một thùng chứa servlet Apache TomCat. Hãy thử trả lời nó. Hãy để tôi lưu ý ngay rằng chúng ta không nói về kiến ​​trúc ứng dụng! Không thành vấn đề nếu bạn sử dụng EJB hay không. Giả sử bạn có một ứng dụng trên Khung mùa xuân và câu hỏi là chạy nó trên cái gì. Vậy máy chủ ứng dụng cung cấp cho chúng ta những dịch vụ bổ sung nào?

    • Nhóm kết nối cơ sở dữ liệu. vâng, vâng TomCat Ngoài ra còn có một nhóm kết nối, nhưng khả năng của nó là gì? Nó có thể kiểm tra định kỳ tính khả dụng của DBMS và cập nhật các kết nối trong trường hợp khôi phục lỗi không? Anh ta có biết cách thay đổi quyền truy cập không? Nói một cách đại khái, chúng tôi kết nối với cơ sở dữ liệu theo người dùng, tùy thuộc vào người được xác thực trong ứng dụng của chúng tôi; nếu một phần logic được chuyển sang cấp DBMS thì điều này có thể hữu ích. Một hồ bơi kết nối có thể tomcat cân bằng tải giữa nhiều cơ sở dữ liệu (ví dụ: trong trường hợp Oracle RAC) và cũng xác định rằng các nút này RACđã chết và bây giờ bạn không cần phải cố gắng kết nối với chúng, sau đó nhận ra rằng chúng lại có sẵn và bây giờ bạn cũng có thể sử dụng chúng? Rốt cuộc, nhóm kết nối của bạn có thể bảo vệ khỏi mã xấu trong một ứng dụng vô tình không trả lại kết nối mà chỉ xóa chúng sau một thời gian chờ không?
    • JMS . Nếu bạn muốn sử dụng hàng đợi trong ứng dụng của mình được triển khai trên TomCat, khi đó bạn sẽ phải cài đặt riêng các máy chủ xếp hàng tin nhắn. Trong trường hợp máy chủ ứng dụng, hàng đợi thường có sẵn trong hộp của chúng. Cùng với hàng đợi, những thứ sau đây cũng có sẵn: phân cụm - bạn có thể xây dựng các hàng đợi phân tán nằm trên nhiều máy chủ cùng một lúc, điều này làm tăng đáng kể khả năng mở rộng và tính khả dụng của ứng dụng của bạn, di chuyển - nếu một trong các máy chủ bị lỗi, hàng đợi của nó sẽ tự động được di chuyển sang cái khác, lưu các tin nhắn chưa được xử lý. Một số máy chủ ứng dụng hỗ trợ Đơn vị đặt hàng- Thứ tự xử lý tin nhắn được đảm bảo đáp ứng các tiêu chí nhất định thường rất hữu ích trong quá trình tích hợp.
    • JTA . Những giao dịch phân phối tương tự. Có người hiểu và sử dụng được, có người lại thấy nặng nề. Theo quy định, điều này đúng, chúng quá nặng, nhưng nếu bạn cần đảm bảo tính nhất quán của dữ liệu trong DBMS, nằm ở các góc khác nhau trong phạm vi rộng lớn của chúng ta hoặc trong DBMS và hàng đợi, thì sẽ khó khăn nếu không có các giao dịch như vậy. Bản chất của giao dịch phân tán là chúng tôi không cam kết với bất kỳ cơ sở dữ liệu nào cho đến khi chúng tôi chắc chắn rằng tất cả cơ sở dữ liệu tham gia giao dịch đều có thể chấp nhận dữ liệu của chúng tôi. Do đó, chúng tôi tránh được vấn đề “tiền được ghi nợ từ một tài khoản ở một ngân hàng nhưng không được ghi có vào tài khoản khác ở ngân hàng khác - một hạn chế về tính toàn vẹn đã được kích hoạt”.
    • Sự an toàn. Các máy chủ ứng dụng hiện đại cung cấp nhiều nhà cung cấp bảo mật khác nhau. Với nhiều nhà cung cấp xác thực có sẵn, bạn có thể lưu trữ người dùng của mình ở nhiều nơi: được tích hợp sẵn LDAP-máy chủ, trong cơ sở dữ liệu, ở bên ngoài LDAP-máy chủ, ở nhiều dạng khác nhau thư mục Internet- các ứng dụng chuyên dụng để quản lý quyền truy cập. Có thể xảy ra các tình huống sau: một người được thuê làm một công việc, anh ta được bổ sung vào , quá trình phân phối quyền bắt đầu từ đó, trao cho một người quyền đối với tất cả tài nguyên của doanh nghiệp bạn và giờ đây mọi máy chủ ứng dụng trong công ty của bạn (và có thể có rất nhiều trong số chúng) đều nhìn thấy các quyền này, vì nó được kết nối với điều này Thư mục Internet/Trình quản lý truy cập. Có thể chia phiên người dùng giữa các ứng dụng: chúng tôi đã xác thực trong một ứng dụng - chúng tôi không cần xác thực trong ứng dụng khác nữa. Triển khai cũng có sẵn Dấu hiệu duy nhất trên: bạn đặt một trong các máy chủ làm cơ sở lưu trữ người dùng, tất cả các máy chủ khác đều truy cập vào cơ sở này khi xác thực người dùng. Đã thực hiện SSO bởi vì Xác nhận bảo mật Ngôn ngữ đánh dấu(SAML) 1/2 hoặc thông qua Đàm phán đơn giản và được bảo vệ (SPNEGO)Kerberoscác cửa sổ-khách hàng. Có thể ủy quyền thông qua giao thức Ngôn ngữ đánh dấu kiểm soát truy cập mở rộng (XACML), cho phép bạn mô tả các chính sách khá phức tạp (ví dụ: ứng dụng chỉ có sẵn cho người dùng ở thời gian làm việc). Một lần nữa, tất cả các tính năng này hoạt động trong môi trường cụm. Tuy nhiên, điều đáng chú ý là với sự trợ giúp An ninh mùa xuânApacheShiro Bạn có thể triển khai hầu hết chúng, nhưng bạn sẽ phải “kéo” những cách triển khai này ra sau mỗi chương trình của mình, trong khi trên máy chủ ứng dụng, chúng có sẵn ngay lập tức.
    • Khả năng mở rộng và tính sẵn sàng cao. Vâng, đối với TomCat chúng ta có thể thiết lập phân cụm, nhưng nó sẽ khá thô sơ. Chúng tôi sẽ không thể chuyển phiên người dùng từ trung tâm dữ liệu (DC) này sang trung tâm dữ liệu (DC) khác qua Internet, chúng tôi sẽ không thể thiết lập sao chép phiên một cách hiệu quả trên một cụm lớn bao gồm 40-50 phiên bản máy chủ ứng dụng. Trong trường hợp xảy ra lỗi, chúng tôi sẽ không thể di chuyển các phiên bản máy chủ sang máy khác, v.v. Cũng trong TomCat không có cơ chế giám sát tự động và phản ứng với các lỗi: chúng tôi không thể tự động khởi động lại phiên bản máy chủ nếu có 10 luồng treo trên đó, chúng tôi không thể tự động gửi thư cho quản trị viên khi nhóm kết nối đầy, v.v.
    • Khả năng kiểm soát. Trường hợp cụm lớn TomCat chúng tôi không có trung tâm duy nhất quản lý, cái gọi là Máy chủ quản trị và tương tự Trình quản lý nút MỘT. Chúng tôi sẽ không thể khởi chạy 50 phiên bản máy chủ cùng lúc. Chúng ta không thể xem trạng thái của các phiên bản, xem chúng ta có bao nhiêu bộ xử lý trên hàng đợi này hoặc hàng đợi kia, trên máy chủ này hoặc máy chủ kia, có bao nhiêu kết nối đã được tạo với cơ sở dữ liệu này hoặc cơ sở dữ liệu kia, cái nào trong số chúng có thể bị giết, cái nào khoảnh khắc này các giao dịch được thực hiện, những tài nguyên nào có liên quan đến chúng, v.v. Tất nhiên, bạn có thể làm mọi thứ “trong ba phút bằng cách sử dụng tập lệnh, như thông lệ trong Linux,” nhưng kết quả sẽ rất thảm hại.
    • Ngôn ngữ kịch bản. Nói về tập lệnh, hầu hết các máy chủ ứng dụng công nghiệp đều chứa các tiện ích để thực thi tập lệnh, thường bằng ngôn ngữ Python, Sử dụng những tiện ích này là một niềm vui. Người quản trị có thể mô tả dưới dạng script tất cả các bước chuẩn bị triển khai theo ý muốn ứng dụng lớn, vì vậy việc đưa vào sản xuất hoặc cập nhật sẽ mất tương đối ít thời gian. Bằng cách sử dụng các tập lệnh như vậy, bạn có thể tạo nguồn dữ liệu (hãy tưởng tượng một bus dịch vụ được kết nối với 120 phiên bản cơ sở dữ liệu), JMS-queues, trình quản lý luồng, tạo phiên bản máy chủ mới và thêm chúng vào cụm, dừng và khởi động máy chủ cũng như di chuyển chúng.
    • Kênh hành chính và triển khai sản xuất. Một số máy chủ ứng dụng cho phép bạn kích hoạt cái gọi là kênh quản trị - một cổng riêng được bảo vệ SSL, những yêu cầu được ưu tiên. Bằng cách này, ngay cả khi máy chủ của bạn không hoạt động, bạn vẫn có thể đăng nhập vào đó và xem giao dịch nào đang diễn ra và chuỗi nào đang bị treo. Nhưng kênh này có những công dụng khác. Khi cập nhật ứng dụng bạn không cần phải tắt phiên bản cũ! Bạn có thể thêm phiên bản mới của ứng dụng vào máy chủ ở chế độ quản trị - người dùng tiếp tục làm việc với phiên bản cũ và phiên bản mới có sẵn thông qua kênh quản trị, vì vậy chúng tôi có thể thực hiện thử nghiệm cuối cùng trước khi khởi chạy, kiểm tra xem mọi thứ đã có chưa được triển khai chính xác. Cuối cùng, chúng tôi xuất bản ứng dụng, trong khi những người dùng đã có phiên tiếp tục làm việc với phiên bản cũđể không bị mất dữ liệu. Người dùng mới được xác thực trên phiên bản mới. Do đó, chúng tôi cập nhật ứng dụng mà không có thời gian ngừng hoạt động, điều này rất quan trọng đối với các hệ thống quan trọng.

    Như chúng ta có thể thấy, có khá nhiều dịch vụ được cung cấp bởi các máy chủ ứng dụng công nghiệp. Một câu hỏi hoàn toàn hợp lý được đặt ra: tại sao lại có một thùng chứa servlet? TomCat thật là phổ biến? Có một số cân nhắc ở đây:

    • Trước hết là giá cả. Đối với mọi thứ tốt, chúng tôi phải trả tiền, đối với mọi thứ tuyệt vời, chúng tôi thậm chí còn phải trả nhiều hơn, đặc biệt nếu chúng tôi muốn truy cập vào hỗ trợ kỹ thuật và các bản vá. Ví dụ: một máy chủ ứng dụng Oracle WebLogic bao gồm trong gói cơ bản 10.000 USD/bộ xử lý(dưới bộ xử lýở đây chúng tôi muốn nói đến một lõi nhân với cái gọi là. yếu tố cốt lõi). Không phải mọi khách hàng đều có thể mua được giải pháp như vậy.
    • Không phải ứng dụng nào cũng cần những dịch vụ trên và đôi khi các nhà phát triển cũng không biết cách sử dụng chúng. Ví dụ: nếu chúng ta có một hệ thống kế toán đơn giản hoạt động với một cơ sở dữ liệu thì chúng ta không cần các giao dịch phân tán. Mặt khác, mở rộng quy mô. Ứng dụng có thể theo dõi mọi người Java EE thông số kỹ thuật, nhưng không thể mở rộng. Một ví dụ đơn giản: một ứng dụng đọc các bản ghi đã thay đổi từ cơ sở dữ liệu (được viết bằng trình kích hoạt trong một bảng riêng biệt) và chuyển chúng sang cơ sở dữ liệu khác. Đồng thời, các tác giả bằng cách nào đó đã quên mất việc chặn. Nếu chúng ta chạy chương trình này trên cụm thì mỗi bản ghi sẽ được xử lý N-lần, theo số lượng bản sao TomCat trong cụm. Chúng tôi không cần loại khả năng mở rộng đó. Những cân nhắc tương tự có thể được thực hiện cho các dịch vụ khác.
    • Đơn giản và dễ học. Nhìn chung, quản trị viên máy chủ ứng dụng là một nghề riêng biệt, giống như quản trị viên cơ sở dữ liệu. Đây không chỉ là một quản trị viên Linux. Chúng ta hãy xem lại danh sách các dịch vụ và suy nghĩ xem phải mất bao lâu để nghiên cứu khả năng của máy chủ ứng dụng đã chọn để triển khai và cấu hình chúng. khóa học quản trị IBM WebSphere hoặc Oracle WebLogic có thể có giá hàng chục ngàn rúp.
    • Hãy tự mình nấu cháo từ một chiếc rìu. Có những tình huống khi điều này là cần thiết. Không phải lúc nào cũng hợp lý khi chờ đợi một bản vá sửa một số lỗi nghiêm trọng cho ứng dụng của chúng tôi. Sẽ nhanh hơn nhiều nếu chỉ thay đổi phiên bản thư viện. Đúng, điều này thường có thể được thực hiện trên máy chủ ứng dụng bằng cách thêm thư viện vào ứng dụng của chúng ta và thiết lập trình nạp lớp. Hơn thế nữa máy chủ hiện đại chứa các tiện ích để tìm kiếm lỗi trong hệ thống phân cấp của bộ tải khởi động.

    Chúng ta hãy lưu ý riêng lý do cho sự phổ biến của nó Khung mùa xuân Làm thế nào TomCat' e và trên các máy chủ ứng dụng công nghiệp, đồng thời hãy nhận xét một chút về chúng:

    • Lý do lịch sử. Tại sao Khung mùa xuân, nhưng không EJB? Vâng, bởi vì tôi đã lập trình vào năm 1988 C++, vớ vẩn cái này là của bạn C++. Đúng vậy EJB 1.1EJB 2.x rất khó học và sử dụng, nhưng thời thế đang thay đổi. Một lần nữa, bắt đầu từ Java EE 6, một vật nhẹ xuất hiện IoC-thùng đựng hàng - CDI. Tại sao phải kéo hàng trăm megabyte thư viện vào ứng dụng của bạn, điều này sẽ làm chậm đáng kể quá trình triển khai nếu bạn có thể sử dụng các triển khai có sẵn và chất lượng khá cao do nhà sản xuất máy chủ ứng dụng cung cấp? Thực ra đôi khi cũng có lý do.
    • Cân bằng giữa cam kết cụ thể của nhà cung cấp và tính di động. Đúng, EJBđây là một phần của đặc điểm kỹ thuật Java EE, và phức tạp nhất, chỉ khó khăn hơn J2CA và vì lý do chính đáng, các ứng dụng được viết cho một máy chủ sẽ hoạt động trên một máy chủ khác. Trong thực tế điều này không phải lúc nào cũng đúng. Thông thường, để sử dụng hiệu quả tất cả các khả năng của máy chủ ứng dụng, bạn phải gọi nó bằng mã API, và điều này đã làm cho ứng dụng không thể di chuyển được. Đúng, công bằng mà nói, với mỗi phiên bản mới Java EE Ngày càng có ít những kết nối như vậy. Mặt khác, ngay cả khi không có mối quan hệ rõ ràng với API các phần của tiêu chuẩn có thể được thực hiện máy chủ khác nhau theo cách riêng của nó, ví dụ, một máy chủ sẽ đóng Thực thểManagerNhà máy khi ứng dụng bị dừng thì ứng dụng kia thì không. Việc triển khai hệ thống phân cấp của trình nạp lớp cũng có thể khác nhau.
    • Đồng thời, có một mối liên hệ rõ ràng với Khung mùa xuân cũng có nhược điểm của nó. Đây là sự ràng buộc tương tự của nhà sản xuất khi quyết định chỉ sử dụng WebLogic. Nhưng nếu với WebLogic mặc dù chúng ta có thể rời đi với một tiếng cọt kẹt, sau đó với Khung mùa xuân Rất có thể là không. Điều gì sẽ xảy ra nếu ngày mai các nhà phát triển hàng đầu quyết định rời bỏ đứa con tinh thần của mình và cùng nhau chuyển đến Lời tiên tri? Tuy nhiên, tôi cho rằng khả năng xảy ra kịch bản như vậy là không cao.
    • Điều đặc biệt đáng chú ý là sự hỗ trợ Khung mùa xuân bởi các nhà phát triển máy chủ ứng dụng. Ví dụ, trong Oracle WebLogic có thể được bật trang riêng trong bảng điều khiển quản trị cho từng ứng dụng được xây dựng trên khung này. Trang này sẽ hiển thị một cây đậu và hiển thị các thuộc tính của chúng. Các thùng của máy chủ cũng có sẵn và việc phát triển được đơn giản hóa MBeanồ. Bên cạnh đó, Khung mùa xuân tích hợp một cách minh bạch vào môi trường cụm và An ninh mùa xuân có thể sử dụng hệ thống con bảo mật máy chủ ứng dụng.

    Tóm lại, tôi muốn lưu ý rằng việc chọn nền tảng cho một ứng dụng là một nhiệm vụ kỹ thuật không hề tầm thường, trong đó phải tính đến rất nhiều yếu tố. Điều này bao gồm tỷ lệ giữa chi phí phát triển và chi phí hỗ trợ (người ta phải tính đến việc phát triển có thể mất một năm, nhưng phần mềm có thể được sử dụng trong mười năm), chi phí của chính máy chủ ứng dụng, mối quan hệ của bạn với nhà cung cấp, bởi vì Mặc dù giá trị danh nghĩa cao nhưng thường có mức giảm giá lên tới 80%. Cuối cùng hãy xem xét trình độ của bạn và nhóm của bạn. Chà, bạn không cần phải thụt lùi nếu bạn viết lên EJB và kể từ đó bạn không thể nhìn vào chúng, thì đây không phải là lý do để từ bỏ công nghệ tuyệt vời này và các máy chủ ứng dụng triển khai nó, mà ngay cả khi bạn là một chuyên gia Khung mùa xuân, nghĩ xem, có lẽ cũng có một nơi dành cho nó trên một máy chủ công nghiệp?

    Tôi cần thiết lập và chạy Tomcat trên Mac OS X ( Con sư tử núi) và đăng ký máy chủ ứng dụng này (thùng chứa servlet) với NetBeans.
    Để làm điều này, tôi đã làm theo các bước sau.

    Cài đặt Tomcat
    1. Tải xuống kho lưu trữ Tomcat từ đây.
    2. Ví dụ: giải nén kho lưu trữ vào thư mục của người dùng. ~/Apache-Tomcat-7.0.42
    3. Mở chương trình Terminal.
    4. Chuyển đến thư mục “bin” cd ~/apache-tomcat-7.0.42/bin và đặt quyền chạy các tệp có phần mở rộng .sh. Sudo chmod +x ./*.sh
    5. Đặt biến môi trường CATALINA_HOME. Để nó được lưu không phải trong suốt thời gian của phiên trong thiết bị đầu cuối mà là vĩnh viễn, bạn cần phải đăng ký nó trong tệp “launchd.conf”.
      Tạo/mở tệp (ví dụ được hiển thị bằng trình soạn thảo vi, nhưng bạn có thể sử dụng bất kỳ trình soạn thảo nào khác, chẳng hạn như emacs): sudo vi /etc/launchd.conf
      Chuyển sang chế độ chèn: “s key”.
      Viết văn bản ở đó: setenv CATALINA_HOME /Users/ХХХ/apache-tomcat-7.0.42
      XXX là tên người dùng của bạn, nếu bạn đã lưu tomcat trong thư mục người dùng như được chỉ ra ở bước 2, nếu không, hãy chỉ đường dẫn đến thư mục bạn đã lưu tomcat.
      Đóng chế độ chèn "Phím Esc".
      Chuyển sang chế độ lệnh “phím:”.
      Lưu tập tin, lệnh "wq".
    6. Theo mặc định, máy chủ được cấu hình trên cổng 8080. Để thay đổi cổng này, bạn cần vào thư mục “conf”: cd ~/apache-Tomcat-7.0.42/conf
      Mở file “server.xml” ở đó.
      Tìm thẻ “Connector” trong đó thuộc tính cổng bằng “8080” và đặt thuộc tính cổng thành giá trị bạn cần:
    7. Theo mặc định, người dùng có quyền triển khai tới máy chủ qua GUI web hoặc qua tập lệnh sẽ bị tắt. Nó phải được viết trong tệp “tomcat-users.xml”. Để thực hiện việc này, hãy chuyển đến thư mục “conf”: cd ~/apache-tomcat-7.0.42/conf
      Mở tệp “tomcat-users.xml” ở đó và thêm thông tin sau (bạn có thể sử dụng tên người dùng và mật khẩu khác với tên người dùng đã cung cấp):
    8. Khởi động lại máy tính để biến môi trường CATALINA_HOME được đặt.
    9. Mở chương trình Terminal.
    10. Chuyển đến thư mục “bin” cd ~/apache-tomcat-7.0.42/bin và chạy tập lệnh “startup.sh”
      sh khởi động.sh
      Bạn sẽ thấy nội dung như thế này trong thiết bị đầu cuối (tùy thuộc vào cài đặt hệ thống của bạn): Sử dụng CATALINA_BASE: /Users/ХХХ/apache-tomcat-7.0.42 Sử dụng CATALINA_HOME: /Users/ХХХ/apache-tomcat-7.0.42 Sử dụng CATALINA_TMPDIR: /Người dùng /ХХХ/apache-tomcat-7.0.42/temp Sử dụng JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home Sử dụng CLASSPATH: /Users/ХХХ/apache-tomcat-7.0.42/ bin/ bootstrap.jar:/Users/XXX/apache-tomcat-7.0.42/bin/tomcat-juli.jar
    11. Khởi chạy trình duyệt của bạn và nhập http://localhost:8080 vào trường địa chỉ. Nếu bạn đã thay đổi cổng, như được chỉ ra ở bước 6, hãy cho biết cổng của bạn.
    12. Trang chủ tomcat sẽ mở ra.
    13. Bằng cách nhấp vào nút “Trạng thái máy chủ”, bạn có thể xem trạng thái của máy chủ được nâng cấp. Bạn sẽ cần nhập tên người dùng và mật khẩu bạn đã tạo trước đó.
    14. Bằng cách nhấp vào nút “Ứng dụng quản lý”, bạn có thể xuất bản (xóa) ứng dụng. Bạn sẽ cần nhập tên người dùng và mật khẩu bạn đã tạo trước đó.
    15. Việc dừng máy chủ được thực hiện như sau. Chuyển đến thư mục “bin” cd ~/apache-tomcat-7.0.42/bin và chạy tập lệnh “shutdown.sh”
      sh tắt máy.sh
    Đăng ký máy chủ Tomcat với NetBeans
    1. Nếu phiên bản 8 của Tomcat đã được cài đặt thì bạn cần tạo một liên kết tượng trưng đến thư mục thư viện.
      ln -s /Users/XXX/apache-tomcat-8.0.0-RC3/lib /Users/XXX/apache-tomcat-8.0.0-RC3/common/lib
    2. Mở NetBeans
    3. Menu Công cụ->Máy chủ
    4. Trong cửa sổ mở ra, nhấp vào nút “Thêm máy chủ”
    5. Trong cửa sổ mở ra, chọn “Apache Tomcat” và nhấp vào nút “Tiếp theo”
    6. Trong bảng tiếp theo được hiển thị, chỉ định thư mục chính Tomcat, ví dụ "/Users/ХХХ/apache-Tomcat-7.0.42"
    7. Nhập tên người dùng và mật khẩu bạn đã tạo trước đó. Nhấp vào nút “Tiếp theo”.
    8. Chỉ định cổng nếu nó đã được thay đổi trước đó. Nhấp vào nút “Hoàn tất”.
    9. Để kiểm tra, bạn có thể tạo một ứng dụng Web và chọn Apache Tomcat làm máy chủ ứng dụng. Sau đó chạy nó từ NetBeans. Ứng dụng này sẽ được triển khai tự động trong Tomcat và khởi chạy trong trình duyệt, chẳng hạn như theo địa chỉ sau: http://localhost:8090/WebApplication1 (thông thường, theo mặc định, mẫu ứng dụng web chứa một trang jsp có văn bản “Xin chào thế giới!” ).
    Ghi chú
    Điều này không áp dụng cho việc thiết lập Tomcat hoặc đăng ký máy chủ Tomcat với NetBeans, nhưng một số ứng dụng tìm kiếm java trong thư mục /bin và trên Mac OS X java được cài đặt trong các thư mục khác, nhưng có một liên kết tượng trưng đến java trong thư mục /usr/bin.
    Vì vậy, bạn cần tạo một liên kết tượng trưng khác tới java.
    sudo ln -s /usr/bin/java /bin/java