Tác giả Chủ đề: Cài đặt và cấu hình Apache Tomcat 9 trên Windows, Mac OS X, Ubuntu Unix  (Đã xem 549 lần)

0 Thành viên và 1 Khách đang xem chủ đề.

Ngủ rồi CCNACCNP

  • Hero Member
  • *****
  • Bài viết: 3980
  • Số Lần: +73/-0
Bài thực hành này có thể được hoàn thành trong một phiên 3 giờ.

Hướng dẫn cài đặt và cấu hình này có thể áp dụng cho Tomcat 9, và có thể các phiên bản trước đó. Hãy lưu ý rằng Tomcat 9 yêu cầu JDK 8 trở lên.

1. Giới thiệu
1.1 Ứng dụng web (Ứng dụng web)

Một ứng dụng web (hoặc webapp), không giống như ứng dụng độc lập, chạy qua Internet. Ví dụ về các ứng dụng web là google, amazon, facebook và twitter.

Một ứng dụng web thường là ứng dụng cơ sở dữ liệu máy khách-máy chủ 3 tầng (hoặc nhiều tầng) chạy qua Internet như được minh họa trong sơ đồ bên dưới. Nó bao gồm năm thành phần:

    Máy chủ HTTP: Ví dụ: Máy chủ HTTP Apache, Máy chủ Tomcat của Apache, Máy chủ thông tin Internet của Microsoft (IIS), nginx, Máy chủ web của Google (GWS) và các máy chủ khác.
    Máy khách HTTP (hoặc Trình duyệt web): Ví dụ: Internet Explorer (MSIE), FireFox, Chrome, Safari và các ứng dụng khác.
    Cơ sở dữ liệu: Ví dụ: MySQL nguồn mở, PostgreSQL, Apache Derby, mQuery, SQLite, OpenOffice's Base; Thương mại Oracle, IBM DB2, SAP SyBase, Microsoft SQL Server, Microsoft Access; và những người khác.
    Chương trình phía khách hàng: Có thể được viết dưới dạng HTML, JavaScript và các chương trình khác.
    Các chương trình phía máy chủ: Có thể được viết bằng Java Servlet / JSP, ASP, PHP, Perl, Python, JavaScript và các chương trình khác.


Một trường hợp sử dụng điển hình là:

    Một người dùng, thông qua trình duyệt web (máy khách HTTP), đưa ra yêu cầu URL đến máy chủ HTTP để bắt đầu một ứng dụng web.
    Máy chủ HTTP trả về một biểu mẫu HTML (chương trình phía máy khách), được tải và chuyển đến trong trình duyệt của máy khách.
    Người dùng điền vào các tiêu chí truy vấn bên trong biểu mẫu và gửi biểu mẫu.
    Chương trình phía máy khách gửi các tham số truy vấn đến chương trình phía máy chủ.
    Chương trình phía máy chủ nhận các tham số truy vấn, truy vấn cơ sở dữ liệu dựa trên các tham số này và trả về kết quả truy vấn cho chương trình phía máy khách.
    Chương trình phía máy khách nhận kết quả truy vấn và hiển thị trên trình duyệt.
    Quá trình lặp lại cho phản hồi yêu cầu tiếp theo.

1.2 Giao thức truyền siêu văn bản (HTTP)

    HTTP là một giao thức lớp ứng dụng chạy trên TCP / IP. IP cung cấp hỗ trợ định tuyến và địa chỉ (thông qua một địa chỉ IP duy nhất cho các máy được kết nối với Internet); trong khi TCP hỗ trợ ghép kênh qua các cổng 64K từ số cổng 0 đến 65535. Số cổng mặc định được gán cho HTTP là cổng TCP 80. (Lưu ý: Số cổng TCP dưới 1024 được dành riêng cho các giao thức phổ biến như HTTP, FTP, SMTP; Số cổng 1024 và ở trên có thể được sử dụng cho các ứng dụng.)
    HTTP là một giao thức lớp ứng dụng đáp ứng yêu cầu không đồng bộ. Một khách hàng gửi tin nhắn yêu cầu đến máy chủ. Sau đó, máy chủ trả về một thông báo phản hồi cho khách hàng. Nói cách khác, HTTP là một giao thức kéo, máy khách kéo một trang từ máy chủ (thay vì máy chủ đẩy các trang đến máy khách).
    Cú pháp của thông báo được xác định trong đặc tả HTTP.

1.3 Máy chủ HTTP Tomcat của Apache

Apache Tomcat là một máy chủ HTTP có khả năng Java, có thể thực thi các chương trình Java đặc biệt được gọi là "Java Servlet" và "Java Server Pages (JSP)". Tomcat là một dự án nguồn mở, thuộc "Quỹ phần mềm Apache" (cũng cung cấp Máy chủ HTTP Apache công nghiệp mã nguồn mở, sử dụng nhiều nhất). Trang web mẹ cho Tomcat là http://tomcat.apache.org. Ngoài ra, bạn có thể tìm thấy tomcat thông qua trang web mẹ Apache @ http://www.apache.org.

Tomcat ban đầu được viết bởi James Duncan Davison (sau đó làm việc tại Sun) vào năm 1998, dựa trên máy chủ của Sun trước đó có tên là Java Web Server (JWS). Nó bắt đầu ở phiên bản 3.0 sau khi JWS 2.1 thay thế. Sun sau đó đã tạo ra Tomcat mã nguồn mở và đưa nó cho Apache.

Các bản phát hành Tomcat khác nhau là:

    Tomcat 3.0 (1999): Triển khai tham chiếu (RI) cho Servlet 2.2 và JSP 1.1.
    Tomcat 4.1 (Tháng 9 năm 2002): RI cho Servlet 2.3 và JSP 1.2.
    Tomcat 5.0 (Tháng 12 năm 2003): RI cho Servlet 2.4 và JSP 2.0.
    Tomcat 6.0 (Tháng 2 năm 2007): RI cho Servlet 2.5 và JSP 2.1.
    Tomcat 7.0 (tháng 1 năm 2011): RI cho Servlet 3.0, JSP 2.2 và EL 2.2.
    Tomcat 8.0 (tháng 6 năm 2014): RI cho Servlet 3.1, JSP 2.3, EL 3.0 và WebSocket 1.0. Tomcat 8.5 (tháng 6 năm 2016) hỗ trợ HTTP / 2, OpenSSL, lưu trữ ảo TLS và JASPIC 1.1.
    Tomcat 9.0 (tháng 1 năm 2018): RI cho Servlet 4.0, JSP 2.3, EL 3.0, WebSocket 1.0, JASPIC 1.1.
    Tomcat 10.0 (???):

2. Cách cài đặt Tomcat và bắt đầu với lập trình Java Servlet
2.1 BƯỚC 0: Tạo một thư mục để giữ tất cả các tác phẩm của bạn


Tôi sẽ giả sử rằng bạn đã tạo một thư mục có tên "c: \ myWebProject" (cho Windows) hoặc "~ \ myWebProject" (cho Mac OS X) trong các bài tập trước của bạn. Làm khác đi. Bước này rất quan trọng; nếu không, bạn sẽ không đồng bộ với bài viết này và sẽ không thể tìm thấy các tệp của bạn sau này.

2.2 BƯỚC 1: Tải xuống và cài đặt Tomcat


Trích dẫn

For Windows

    Goto http://tomcat.apache.org ⇒ Under "Tomcat 9.0.{xx} Released", where {xx} is the latest update number ⇒ Click "Download" ⇒ Under "9.0.{xx}" ⇒ Binary Distributions ⇒ Core ⇒ "zip" (e.g., "apache-tomcat-9.0.{xx}.zip", about 11 MB).
    UNZIP the downloaded file into your project directory "c:\myWebProject". Tomcat shall be unzipped into directory "c:\myWebProject\apache-tomcat-9.0.{xx}".
    For EASE OF USE, we shall shorten and rename this directory to "c:\myWebProject\tomcat".

Take note of Your Tomcat Installed Directory. Hereafter, I shall refer to the Tomcat installed directory as <TOMCAT_HOME>.

For Mac OS X

    Goto http://tomcat.apache.org ⇒ Under "Tomcat 9.0.{xx} Released", where {xx} is the latest update number ⇒ Click "Download" ⇒ Under "9.0.{xx}"⇒ Binary distribution ⇒ Core ⇒ "tar.gz" (e.g., "apache-tomcat-9.0.{xx}.tar.gz", about 10.5 MB).
    To install Tomcat:
        Double-click the downloaded tarball (e.g., "apache-tomcat-9.0.{xx}.tar.gz") to expand it into a folder (e.g., "apache-tomcat-9.0.{xx}").
        Move the extracted folder (e.g., "apache-tomcat-9.0.{xx}") to your project directory "~/myWebProject".
        For EASE OF USE, we shall shorten and rename this folder to "tomcat", i.e., "~/myWebProject/tomcat".

Take note of Your Tomcat Installed Directory. Hereafter, I shall refer to the Tomcat installed directory as <TOMCAT_HOME>.

For Ubuntu

Read "How to Install Tomcat on Ubuntu". You need to switch between these two articles.

Đối với việc học tập, tôi khuyên dùng gói "zip" (hoặc "tar.gz"), vì bạn có thể chỉ cần xóa toàn bộ thư mục khi Tomcat không còn cần thiết (không chạy bất kỳ trình cài đặt nào). Bạn có thể tự do di chuyển hoặc đổi tên thư mục đã cài đặt của Tomcat. Bạn có thể cài đặt (giải nén) nhiều bản sao Tomcat trong cùng một máy.

Thư mục phụ của Tomcat

Hãy xem nhanh thư mục cài đặt Tomcat. Nó chứa các thư mục con:

    bin: chứa các tệp nhị phân và tập lệnh (ví dụ: startup.bat và shutdown.bat cho Windows; startup.sh và shutdown.sh cho Unix và Mac OS X).
    conf: chứa các tệp cấu hình trên toàn hệ thống, chẳng hạn như server.xml, web.xml và bối cảnh.
    webapps: chứa các ứng dụng web sẽ được triển khai. Bạn cũng có thể đặt tệp WAR (Lưu trữ Webapp) để triển khai tại đây.
    lib: chứa các tệp JAR thư viện toàn hệ thống của Tomcat, có thể truy cập được bởi tất cả các ứng dụng web. Bạn cũng có thể đặt tệp JAR bên ngoài (như Trình điều khiển JDBC của MySQL) tại đây.
    Nhật ký: chứa tệp nhật ký của Tomcat. Bạn có thể cần kiểm tra các thông báo lỗi ở đây.
    công việc: Thư mục làm việc của Tomcat được sử dụng bởi JSP, để chuyển đổi JSP-to-Servlet.

2.3 BƯỚC 2: Tạo JAVA_HOME biến môi trường

Trích dẫn

(For Windows)

You need to create an environment variable (system variable available to all applications) called "JAVA_HOME", and set it to your JDK installed directory.

Follow the steps HERE!

(For Mac OS)

Skip this step. No need to do anything.

2.4 BƯỚC 3: Định cấu hình Máy chủ Tomcat

Các tệp cấu hình Tomcat, ở định dạng XML, được đặt trong thư mục con "conf" của thư mục đã cài đặt Tomcat của bạn, ví dụ: "c: \ myWebProject \ tomcat \ conf" (cho Windows) hoặc "~ / myWebProject / tomcat / conf" (cho Mac OS X). Các tập tin cấu hình quan trọng là:

 server.xml
 web.xml
 context.xml


Tạo BACKUP các tệp cấu hình trước khi bạn tiến hành !!!

Bước 3 (a) "conf \ server.xml" - Đặt số cổng TCP

Sử dụng trình soạn thảo văn bản lập trình (ví dụ: Sublime Text, Atom) để mở tệp cấu hình "server.xml".

Số cổng TCP mặc định được định cấu hình trong Tomcat là 8080, bạn có thể chọn bất kỳ số nào trong khoảng từ 1024 đến 65535, không được sử dụng bởi các ứng dụng hiện có. Chúng ta sẽ chọn 9999 trong bài viết này. (Đối với máy chủ sản xuất, bạn nên sử dụng cổng 80, được gán trước cho máy chủ HTTP làm số cổng mặc định.)

Định vị các dòng sau (xung quanh Dòng 69) xác định trình kết nối HTTP và thay đổi port = "8080" thành port = "9999".

Trích dẫn
<!-- A "Connector" represents an endpoint by which requests are received
      and responses are returned. Documentation at :
      Java HTTP Connector: /docs/config/http.html
      Java AJP  Connector: /docs/config/ajp.html
      APR (HTTP/AJP) Connector: /docs/apr.html
      Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port="9999" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

Bước 3 (b) "conf \ web.xml" - Bật danh sách thư mục

Một lần nữa, sử dụng trình soạn thảo văn bản lập trình để mở tệp cấu hình "web.xml".

Chúng tôi sẽ kích hoạt danh sách thư mục bằng cách thay đổi "danh sách" từ "false" thành "true" cho servlet "mặc định". Điều này rất hữu ích cho hệ thống thử nghiệm, nhưng không phải cho hệ thống sản xuất để bảo mật.

Xác định vị trí các dòng sau (xung quanh Dòng 108) xác định servlet "mặc định"; và thay đổi "danh sách" từ "sai" thành "đúng".

Trích dẫn
<servlet>
  <servlet-name>default</servlet-name>
  <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
  <init-param>
    <param-name>debug</param-name>
    <param-value>0</param-value>
  </init-param>
  <init-param>
    <param-name>listings</param-name>
    <param-value>true</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

Bước 3 (c) "conf\context.xml" - Kích hoạt tải lại tự động

Chúng ta sẽ thêm thuộc tính reloadable = "true" vào phần tử <Context> để cho phép tải lại tự động sau khi thay đổi mã. Một lần nữa, điều này rất hữu ích cho hệ thống thử nghiệm nhưng không được khuyến nghị cho sản xuất, do chi phí phát hiện thay đổi.

Xác định vị trí phần tử bắt đầu <Ngữ cảnh> (khoảng Dòng 19) và thay đổi thành <Context reloadable = "true">.

Trích dẫn
<Context reloadable="true">
   ......
   ......
</Context>

2.5 BƯỚC 4: Khởi động máy chủ Tomcat


Các chương trình và tập lệnh thực thi của Tomcat được giữ trong thư mục con "bin" của thư mục đã cài đặt Tomcat.

Bước 4 (a) Khởi động máy chủ

Trích dẫn

For Windows

I shall assume that Tomcat is installed in "c:\myWebProject\tomcat". Launch a CMD shell and issue:

c:                           // Change drive
cd \myWebProject\tomcat\bin  // Change directory to your Tomcat's binary directory
startup                      // Run startup.bat to start tomcat server

For Mac OS

I assume that Tomcat is installed in "~/myWebProject/tomcat". To start the Tomcat server, open a new "Terminal" and issue:

cd ~/myWebProject/tomcat/bin  // Change directory to your Tomcat's binary directory
./catalina.sh run             // Run catalina.sh to start tomcat server


Một cửa sổ bảng điều khiển Tomcat mới xuất hiện (với biểu tượng cốc cà phê của Java là biểu tượng). Nghiên cứu các thông điệp trên bàn điều khiển. Xem ra số cổng của Tomcat. Kiểm tra kỹ xem Tomcat có chạy trên cổng 9999 như cấu hình không.

Thông báo lỗi sẽ được gửi đến bảng điều khiển này. System.out.println () do các máy chủ Java của bạn phát hành cũng sẽ được gửi đến bảng điều khiển này.

Trích dẫn
............
............
xxxxx INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-9999"]
xxxxx INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
xxxxx INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [1325] ms

(Bỏ qua trừ khi ...) Không thể bắt đầu Tomcat: Đọc "Cách gỡ lỗi".
Bước 4 (b) Khởi động Máy khách để Truy cập Máy chủ

Khởi động trình duyệt (Firefox, Chrome) dưới dạng máy khách HTTP. Phát hành URL "http: // localhost: 9999" để truy cập trang chào mừng của máy chủ Tomcat. Tên máy chủ "localhost" (có địa chỉ IP là 127.0.0.1) có nghĩa là để kiểm tra vòng lặp cục bộ trong cùng một máy. Đối với người dùng trên các máy khác qua mạng, họ phải sử dụng địa chỉ IP hoặc tên miền DNS của máy chủ dưới dạng "http: // serverhostnameOrIPAddress: 9999".

Hãy thử phát hành URL http: // localhost: 9999 / ví dụ để xem các ví dụ servlet và JSP. Hãy thử chạy một số ví dụ về servlet.

Step 4(c) Tắt Server

Trích dẫn

For Windows

You can shutdown the tomcat server by either:

    Press Ctrl-C on the Tomcat console; OR
    Run "<TOMCAT_HOME>\bin\shutdown.bat" script. Open a new "cmd" and issue:

    c:                           // Change the current drive
    cd \myWebProject\tomcat\bin  // Change directory to your Tomcat's binary directory
    shutdown                     // Run shutdown.bat to shutdown the server

For Mac OS

To shutdown the Tomcat server:

    Press Control-C (NOT Command-C) on the Tomcat console; OR
    Run the "<TOMCAT_HOME>/bin/shutdown.sh" script. Open a new "Terminal" and issue:

    cd ~/myWebProject/tomcat/bin  // Change current directory to Tomcat's bin directory
    ./shutdown.sh                 // Run shutdown.sh to shutdown the server


CẢNH BÁO: Bạn PHẢI tắt Tomcat đúng cách. KHÔNG giết CAT bằng cách ấn nút "ĐÓNG" của cửa sổ.

2.6 BƯỚC 5: Phát triển và triển khai một ứng dụng web

Bước 5 (a) Tạo cấu trúc thư mục cho ứng dụng web của bạn

Hãy gọi ứng dụng web đầu tiên của chúng tôi là "xin chào". Thư mục con "webapps" của Goto Tomcat và tạo cấu trúc thư mục sau cho ứng dụng web của bạn "xin chào" (như minh họa):

    Trong "webapps" của Tomcat, hãy tạo thư mục gốc của ứng dụng web "xin chào" (tức là, "<TOMCAT_HOME> \ webapps \ hello").
    Trong "xin chào", tạo thư mục con "WEB-INF" (phân biệt chữ hoa chữ thường, "dấu gạch ngang" không phải dấu gạch dưới) (tức là, "<TOMCAT_HOME> \ webapps \ hello \ WEB-INF").
    Trong "WEB-INF", tạo thư mục con "lớp" (phân biệt chữ hoa chữ thường, số nhiều) (nghĩa là, "<TOMCAT_HOME> \ webapps \ hello \ WEB-INF \ class").

Bạn cần giữ tài nguyên web của mình (ví dụ: HTML, CSS, hình ảnh, tập lệnh, servlets, JSP) trong các thư mục thích hợp:

    "xin chào": Được gọi là thư mục gốc (hoặc thư mục cơ sở tài liệu) của ứng dụng web của bạn. Bạn nên giữ tất cả các tệp và tài nguyên HTML của mình hiển thị cho người dùng web (ví dụ: HTML, CSS, hình ảnh, tập lệnh, JSP) dưới gốc ngữ cảnh này.
    "hello / WEB-INF": Thư mục này, mặc dù dưới gốc ngữ cảnh, không hiển thị cho người dùng web. Đây là nơi bạn giữ tệp mô tả web của ứng dụng "web.xml".
    "hello / WEB-INF / class": Đây là nơi bạn giữ tất cả các lớp Java như các tệp lớp servlet.

Bạn nên BẮT ĐẦU máy chủ Tomcat của bạn để chọn ứng dụng web xin chào. Kiểm tra bảng điều khiển của Tomcat để xác nhận rằng ứng dụng "xin chào" đã được triển khai đúng cách:

Trích dẫn
......
xxxxx INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory
Deploying web application directory [xxx\webapps\hello]
xxxxx INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory
Deployment of web application directory [xxx\webapps\hello] has finished in [38] ms
......

Bạn có thể phát hành URL sau để truy cập ứng dụng web "xin chào":

http: // localhost: 9999 / xin chào

Bạn sẽ thấy danh sách thư mục của thư mục "<TOMCAT_HOME> \ webapps \ hello", sẽ trống vào thời điểm này. Hãy lưu ý rằng chúng tôi đã kích hoạt danh sách thư mục trước đó trong "web.xml". Nếu không, bạn sẽ gặp lỗi "Không tìm thấy 404".

Bước 5 (b) Viết trang chào mừng

Tạo trang HTML sau và lưu dưới dạng "HelloHome.html" trong thư mục gốc của ứng dụng web "xin chào".

Trích dẫn
1
<html>
  <head><title>My Home Page</title></head>
  <body>
    <h1>My Name is so and so. This is my HOME.</h1>
  </body>
</html>

Bạn có thể duyệt trang này bằng cách phát hành URL này:

http: // localhost: 9999 / xin chào / HelloHome.html


Ngoài ra, bạn có thể cấp URL cho "xin chào" gốc của ứng dụng web:

http: // localhost: 9999 / xin chào

Máy chủ sẽ trả về danh sách thư mục của thư mục cơ sở của bạn. Sau đó, bạn có thể nhấp vào "HelloHome.html".

Đổi tên "HelloHome.html" thành "index.html" và đưa ra yêu cầu thư mục một lần nữa:

http: // localhost: 9999 / xin chào

Bây giờ, máy chủ sẽ chuyển hướng yêu cầu thư mục đến "index.html", nếu thư mục gốc chứa "index.html", thay vì phục vụ danh sách thư mục.

Bạn có thể kiểm tra trang chủ của các đồng nghiệp của mình bằng cách phát hành:

http: // YourPeerhostnameOrIPAddr: 9999 / xin chào
http: // YourPeerhostnameOrIPAddr: 9999 / xin chào / HelloHome.html

với "YourPeerhostnameOrIPAddr" hợp lệ, với điều kiện là đồng nghiệp của bạn đã khởi động máy chủ tomcat của anh ấy và tường lửa của anh ấy không chặn quyền truy cập của bạn. Bạn có thể sử dụng lệnh như "ipconfig" (Windows), "ifconfig" (Mac OS X và Unix) để tìm địa chỉ IP của bạn.


(Bỏ qua trừ khi ...) Các lỗi có thể là "Không thể kết nối", "Internet Explorer không thể hiển thị trang web" và "Không tìm thấy tệp 404". Đọc phần "Cách gỡ lỗi".

2.7 BƯỚC 6: Viết một Servlet Java "Hello-world"

Một servlet là chương trình Java chạy bên trong Máy chủ HTTP có khả năng Java, chẳng hạn như Apache Tomcat. Một người dùng web gọi một servlet bằng cách phát hành một URL thích hợp từ trình duyệt web (máy khách HTTP).

Trước khi bạn tiếp tục, tôi sẽ giả sử rằng bạn đã quen thuộc với Lập trình Java và đã cài đặt các phần sau:

    JDK (Đọc "Cách cài đặt JDK và bắt đầu").
    Một trình soạn thảo văn bản lập trình, như Sublime Text hoặc Atom.

Bước 6 (a) Viết một Servlet Java "Hello-world"

Một servlet Java là một chương trình Java chạy bên trong máy chủ HTTP. Một người dùng web gọi một servlet bằng cách phát hành URL từ trình duyệt (hoặc máy khách HTTP).

Trong ví dụ này, chúng ta sẽ viết một servlet Java có tên HelloServlet, có nội dung "Xin chào, thế giới!". Chúng tôi sẽ định cấu hình sao cho người dùng web có thể gọi servlet này bằng cách phát hành URL http: // ip_addr: port / hello / sayhello từ trình duyệt của họ, như được minh họa:


Viết mã nguồn sau đây gọi là "HelloServlet.java" và lưu nó trong thư mục "lớp" ứng dụng của bạn (tức là, "<TOMCAT_HOME> \ webapps \ hello \ WEB-INF \ class \ HelloServlet.java"). Servlet này nói "Xin chào", lặp lại một số thông tin yêu cầu và in một số ngẫu nhiên theo mỗi yêu cầu.

Trích dẫn
// To save as "<TOMCAT_HOME>\webapps\hello\WEB-INF\classes\HelloServlet.java"
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
 
@WebServlet("/sayhello")   // Configure the request URL for this servlet (Tomcat 7/Servlet 3.0 upwards)
public class HelloServlet extends HttpServlet {

   // The doGet() runs once per HTTP GET request to this servlet.
   @Override
   public void doGet(HttpServletRequest request, HttpServletResponse response)
         throws IOException, ServletException {
 
      // Set the response MIME type of the response message
      response.setContentType("text/html");
      // Allocate a output writer to write the response message into the network socket
      PrintWriter out = response.getWriter();
 
      // Write the response message, in an HTML page
      out.println("<html>");
      out.println("<head><title>Hello, World</title></head>");
      out.println("<body>");
      out.println("<h1>Hello, world!</h1>");  // says Hello
      // Echo client's request information
      out.println("<p>Request URI: " + request.getRequestURI() + "</p>");
      out.println("<p>Protocol: " + request.getProtocol() + "</p>");
      out.println("<p>PathInfo: " + request.getPathInfo() + "</p>");
      out.println("<p>Remote Address: " + request.getRemoteAddr() + "</p>");
      // Generate a random number upon each request
      out.println("<p>A Random Number: <strong>" + Math.random() + "</strong></p>");
      out.println("</body></html>");
      out.close();  // Always close the output writer
   }
}

Xin lưu ý rằng trong Dòng 7, chúng tôi định cấu hình HelloServlet này thành URL "/ sayhello" thông qua chú thích @WebServlet ("/ sayhello"), áp dụng cho Tomcat 7 trở đi. Nói cách khác, URL đầy đủ sẽ là http: // ip_addr: port / hello / sayhello để kích hoạt HelloServlet này.

Bước 6 (b) Biên dịch Servlet (KHÁC BIỆT)

Chúng ta cần API Java Servlet để biên dịch servlet. API Servlet KHÔNG phải là một phần của JDK. Tomcat cung cấp một bản sao trong <TOMCAT_HOME> /lib/servlet-api.jar. Chúng ta cần đưa tệp JAR này vào phần biên dịch thông qua tùy chọn -cp (classpath) như sau:

Trích dẫn

(For Windows)

// Assume that Tomcat is installed in c:\myWebProject\tomcat
// Change directory to the Java source directory
c:
cd \myWebProject\tomcat\webapps\hello\WEB-INF\classes

// Compile
javac -cp .;c:\myWebProject\tomcat\lib\servlet-api.jar HelloServlet.java

(For Mac OS)

// Assume that Tomcat is installed in ~/myWebProject/tomcat
// Change directory to the Java source directory
cd ~/myWebProject/tomcat/webapps/hello/WEB-INF/classes

// Compile - Need to use $HOME instead of ~ in the "javac" command
javac -cp .:$HOME/myWebProject/tomcat/lib/servlet-api.jar HelloServlet.java


Đầu ra của quá trình biên dịch là "HelloServlet. Class".

Sử dụng "File Explorer" của bạn để kiểm tra thư mục "webapps / hello / WEB-INF / class" để đảm bảo rằng "HelloServlet. Class" đã được tạo ở đúng nơi.

Bước 6 (c) Gọi Servlet

Khởi động lại máy chủ Tomcat của bạn (chỉ trong trường hợp ...).

Để gọi servlet này, hãy khởi động trình duyệt và đưa ra URL yêu cầu được định cấu hình như sau:

http: // localhost: 9999 / xin chào / sayhello

Bạn sẽ thấy đầu ra của servlet được hiển thị trong trình duyệt web của bạn.

Làm mới trình duyệt, bạn sẽ thấy một số ngẫu nhiên mới sau mỗi lần làm mới. Nói cách khác, phương thức doGet () của servlet chạy một lần cho mỗi yêu cầu.
Xem nguồn trang

(Đối với Firefox và Chrome) Nhấp chuột phải vào trang ⇒ "Xem nguồn trang" để xem kết quả đầu ra mà trình duyệt web nhận được (được máy chủ trả về). Hãy lưu ý rằng trình duyệt web chỉ nhận được đầu ra của servlet (được tạo thông qua các câu lệnh out.println ()). Máy khách không có quyền truy cập vào mã nguồn của servlet (có thể chứa thông tin bí mật).

(Đối với trình duyệt Safari của Mac OS) Bạn cần bật "Menu dành cho nhà phát triển" trong "Tùy chọn" để bật menu "Xem nguồn".

Trích dẫn
<html>
<head><title>Hello, World</title></head>
<body>
<h1>Hello, world!</h1>
<p>Request URI: /hello/sayhello</p>
<p>Protocol: HTTP/1.1</p>
<p>PathInfo: null</p>
<p>Remote Address: 127.0.0.1</p>
<p>A Random Number: <strong>0.3523682325749493</strong></p>
</body>
</html>

(Bỏ qua trừ khi ...) Các lỗi có thể xảy ra là "Không tìm thấy tệp 404" và "500 lỗi máy chủ nội bộ". Đọc phần "Cách gỡ lỗi".
(Tùy chọn) Kiểm tra thông báo phản hồi và yêu cầu HTTP

Khi bạn nhập URL (ví dụ: http: // localhost: 9999 / hello / sayhello) trên trình duyệt web, thông báo yêu cầu HTTP GET được gửi đến máy chủ; và máy chủ trả về một thông báo phản hồi để hiển thị trên trình duyệt web. Bạn có thể kiểm tra các thông báo yêu cầu và phản hồi thông qua Công cụ dành cho nhà phát triển của trình duyệt Web.

Đối với Firefox / Chrome, nhấn F12 (được gọi là trình gỡ lỗi F12) để bật "Bảng điều khiển web" hoặc "Công cụ dành cho nhà phát triển". Chọn khung "Bảng điều khiển" hoặc "Mạng". Nhập URL http: // localhost: 9999 / hello / sayhello (hoặc làm mới). Kích hoạt "Net" (không có màu Xám). Mở rộng liên kết http: // localhost: 9999 / hello / sayhello. Một thông điệp HTTP bao gồm một tiêu đề và một cơ thể. Kiểm tra tiêu đề và cơ thể yêu cầu; cũng như tiêu đề phản hồi và cơ thể.

Tiêu đề thư yêu cầu như sau:

Trích dẫn
GET http://localhost:9999/hello/sayhello HTTP/1.1
Host: localhost:9999
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.5
Cache-Control:max-age=0
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0

Đối với yêu cầu này, không có cơ thể tin nhắn yêu cầu.

Tiêu đề thư phản hồi như sau:

Trích dẫn
HTTP/1.1 200 OK
Date: xxx, xx xxx xxxx xx:xx:xx xxx
Content-Length: 286
Content-Type: text/html;charset=ISO-8859-1

Phần thân thông điệp phản hồi như sau:

Trích dẫn
<html>
<head><title>Hello, World</title></head>
<body>
<h1>Hello, world!</h1>
<p>Request URI: /hello/sayhello</p>
<p>Protocol: HTTP/1.1</p>
<p>PathInfo: null</p>
<p>Remote Address: 0:0:0:0:0:0:0:1</p>
<p>A Random Number: <strong>0.4480280769255568</strong></p>
</body></html>

2.8 BƯỚC 7: Viết một Servlet cơ sở dữ liệu

Phần này giả định rằng bạn quen thuộc với "lập trình cơ sở dữ liệu Java" và "máy chủ cơ sở dữ liệu MySQL". Mặt khác, đọc "Chương trình cơ sở dữ liệu Java" và "Cách cài đặt MySQL và bắt đầu", tương ứng.

Bước 7 (a) Thiết lập cơ sở dữ liệu trên MySQL (Đã hoàn thành trong bài tập MySQL)

Bắt đầu máy chủ MySQL của bạn. Lưu ý số cổng của máy chủ. Tôi sẽ giả định rằng máy chủ MySQL đang chạy trên cổng 3306, trong khi Tomcat đang chạy trên cổng 9999.

Trích dẫn
// For Windows: I shall assume that MySQL is installed in "c:\myWebProject\mysql"
c:
cd \myWebProject\mysql\bin
mysqld --console
 
// For Mac OS
// Use graphical control at "System Preferences" -> MySQL

Khởi động một máy khách MySQL. Tôi sẽ giả sử rằng có một người dùng được gọi là "myuser" với mật khẩu "xxxx".

Trích dẫn
// For Windows: I shall assume that MySQL is installed in "c:\myWebProject\mysql"
c:
cd \myWebProject\mysql\bin
mysql -u myuser -p
 
// For Mac OS: I shall assume that MySQL is installed in "/usr/local/mysql"
cd /usr/local/mysql/bin
./mysql -u myuser -p

Chạy các câu lệnh SQL sau để tạo cơ sở dữ liệu có tên là "ebookshop", với một bảng gọi là "sách" với 5 cột: id, title, tác giả, giá, qty.

Trích dẫn
create database if not exists ebookshop;

use ebookshop;

drop table if exists books;
create table books (
   id     int,
   title  varchar(50),
   author varchar(50),
   price  float,
   qty    int,
   primary key (id));

insert into books values (1001, 'Java for dummies', 'Tan Ah Teck', 11.11, 11);
insert into books values (1002, 'More Java for dummies', 'Tan Ah Teck', 22.22, 22);
insert into books values (1003, 'More Java for more dummies', 'Mohammad Ali', 33.33, 33);
insert into books values (1004, 'A Cup of Java', 'Kumar', 55.55, 55);
insert into books values (1005, 'A Teaspoon of Java', 'Kevin Jones', 66.66, 66);

select * from books;

Bước 7 (b) Cài đặt Trình điều khiển JDBC của MySQL (Đã được thực hiện trong các bài tập JDBC trước đó)

Bạn cần tải xuống trình điều khiển JDBC của MySQL nếu bạn chưa làm như vậy. Đọc "Cài đặt trình điều khiển JDBC MySQL".

Bước 7 (c) Sao chép Ổ đĩa JDBC của MySQL sang "lib" của Tomcat (QUAN TRỌNG !!!)

Sao chép tệp JAR Trình điều khiển JDBC của MySQL "mysql-Connector-java-8.0. \ lib "(Hệ điều hành Mac).

Bước 7 (d) Viết biểu mẫu HTML phía máy khách

Hãy viết một tập lệnh HTML để tạo một biểu mẫu truy vấn với 3 hộp kiểm và nút gửi, như minh họa bên dưới. Lưu tệp HTML dưới dạng Truy vấn trực tuyến.html trong thư mục gốc của ứng dụng của bạn. <TOMCAT_HOME> \ webapps \ xin chào.

Trích dẫn
<html>
<head>
  <title>Yet Another Bookshop</title>
</head>
<body>
  <h2>Yet Another Bookshop</h2>
  <form method="get" action="http://localhost:9999/hello/query">
    Choose an author:
    <input type="checkbox" name="author" value="Tan Ah Teck">Ah Teck
    <input type="checkbox" name="author" value="Mohammad Ali">Ali
    <input type="checkbox" name="author" value="Kumar">Kumar
    <input type="submit" value="Search">
  </form>
</body>
</html>

Bạn có thể duyệt trang HTML bằng cách phát hành URL sau:

http: // localhost: 9999 / xin chào / querybook.html

Chọn một hộp (ví dụ: "Tan Ah Teck") và nhấp vào nút "Tìm kiếm". Bạn sẽ gặp lỗi "Không tìm thấy tệp 404", vì bạn vẫn chưa viết chương trình phía máy chủ.

Nhưng hãy quan sát URL trong thanh điều hướng của trình duyệt, được sao chép như sau:

http: // localhost: 9999 / xin chào / truy vấn? tác giả = Tan + Ah + Teck

Yêu cầu URL bao gồm hai phần: một URL tương ứng với thuộc tính "hành động" của thẻ <form> và cặp "name = value" được trích xuất từ ​​thẻ <input>, được phân tách bằng dấu '?'. Lưu ý rằng các khoảng trống được thay thế bằng '+' (hoặc% 20), vì các khoảng trống không được phép trong URL.

Nếu bạn chọn hai hộp (ví dụ: "Tan Ah Teck" và "Mohammad Ali"), bạn sẽ nhận được URL này, có hai cặp "name = value" được phân tách bằng dấu '&'.

http: // localhost: 9999 / xin chào / truy vấn? tác giả = Tan + Ah + Teck & tác giả = Mohammad + Ali

Bước 7 (e) Viết Servlet truy vấn cơ sở dữ liệu phía máy chủ


Bước tiếp theo là viết một servlet Java, đáp ứng yêu cầu của máy khách bằng cách truy vấn cơ sở dữ liệu và trả về kết quả truy vấn.

Trích dẫn
// To save as "<TOMCAT_HOME>\webapps\hello\WEB-INF\classes\QueryServlet.java".
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet("/query")   // Configure the request URL for this servlet (Tomcat 7/Servlet 3.0 upwards)
public class QueryServlet extends HttpServlet {

   // The doGet() runs once per HTTP GET request to this servlet.
   @Override
   public void doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
      // Set the MIME type for the response message
      response.setContentType("text/html");
      // Get a output writer to write the response message into the network socket
      PrintWriter out = response.getWriter();

      // Print an HTML page as the output of the query
      out.println("<html>");
      out.println("<head><title>Query Response</title></head>");
      out.println("<body>");

      try (
         // Step 1: Allocate a database 'Connection' object
         Connection conn = DriverManager.getConnection(
               "jdbc:mysql://localhost:3306/ebookshop?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC",
               "myuser", "xxxx");   // For MySQL
               // The format is: "jdbc:mysql://hostname:port/databaseName", "username", "password"

         // Step 2: Allocate a 'Statement' object in the Connection
         Statement stmt = conn.createStatement();
      ) {
         // Step 3: Execute a SQL SELECT query
         String sqlStr = "select * from books where author = "
               + "'" + request.getParameter("author") + "'"   // Single-quote SQL string
               + " and qty > 0 order by price desc";

         out.println("<h3>Thank you for your query.</h3>");
         out.println("<p>Your SQL statement is: " + sqlStr + "</p>"); // Echo for debugging
         ResultSet rset = stmt.executeQuery(sqlStr);  // Send the query to the server

         // Step 4: Process the query result set
         int count = 0;
         while(rset.next()) {
            // Print a paragraph <p>...</p> for each record
            out.println("<p>" + rset.getString("author")
                  + ", " + rset.getString("title")
                  + ", $" + rset.getDouble("price") + "</p>");
            count++;
         }
         out.println("<p>==== " + count + " records found =====</p>");
      } catch(Exception ex) {
         out.println("<p>Error: " + ex.getMessage() + "</p>");
         out.println("<p>Check Tomcat console for details.</p>");
         ex.printStackTrace();
      }  // Step 5: Close conn and stmt - Done automatically by try-with-resources (JDK 7)
 
      out.println("</body></html>");
      out.close();
   }
}

Xin lưu ý rằng trong Dòng 8, chúng tôi định cấu hình QueryServlet này thành URL "/ truy vấn" thông qua chú thích @WebServlet ("/ truy vấn"). Nói cách khác, URL đầy đủ để kích hoạt QueryServlet này là http: // ip_addr: port / hello / query, tương ứng với thuộc tính "hành động" của thẻ <form> của "querybook.html" được viết trước đó.


Biên dịch "QueryServlet.java" như sau:

Trích dẫn
// Windows
c:                                                     // Change drive
cd \myWebProject\tomcat\webapps\hello\WEB-INF\classes  // Change directory to Java Source directory
javac -cp .;c:\myWebProject\tomcat\lib\servlet-api.jar QueryServlet.java   // Compile

// Mac OS X
cd ~/myWebProject/tomcat/webapps/hello/WEB-INF/classes  // Change directory to Java Source directory
javac -cp .:$HOME/myWebProject/tomcat/lib/servlet-api.jar QueryServlet.java    // Compile

Sử dụng "File Explorer", xác minh rằng "QueryServlet. Class" đã được tạo trong thư mục "class".
Bước 7 (f) Gọi Servlet từ Biểu mẫu phía máy khách

Phát hành URL sau để duyệt biểu mẫu "querybook.html" của HMTL mà bạn đã tạo trước đó:

http: // localhost: 9999 / xin chào / querybook.html

Chọn một tác giả (ví dụ: "Tan Ah Teck") và nhấp vào nút gửi, kích hoạt URL sau được mã hóa trong thuộc tính "hành động" của <form>, cùng với cặp name = value:

http: // localhost: 9999 / xin chào / truy vấn? tác giả = Tan + Ah + Teck

URL "/ truy vấn" này kích hoạt QueryServlet. QueryServlet lấy ra cặp tên = value của "tác giả = Tan + Ah + Teck". Bên trong QueryServlet, phương thức request.getParameter ("tác giả") trả về "Tan Ah Teck", được chèn vào lệnh SQL SELECT để truy vấn cơ sở dữ liệu. Kết quả truy vấn được xử lý sau đó được ghi cho máy khách dưới dạng tài liệu HTML.

(Bỏ qua trừ khi ...) Nếu bạn thấy màn hình trống hoặc đầu ra không chính xác, hãy tìm thông báo lỗi từ bảng điều khiển Tomcat !!! Kiểm tra "Cách gỡ lỗi" Lỗi Servlet cơ sở dữ liệu.

2.9 (Lưu trữ) (Trước Tomcat 7) Triển khai các Servlets bằng web.xml

Hãy bỏ qua phần này. Tôi giữ nó ở đây chỉ trong trường hợp ...

Chú thích @WebServlet ("url") để triển khai servlet được hỗ trợ từ Tomcat 7 / Servlet 3.0. Trước Tomcat 7, bạn cần triển khai các servlet thông qua các mô tả triển khai trong tệp cấu hình web.xml.

Tạo tệp cấu hình sau có tên là "web.xml" và lưu tệp đó dưới "webapps \ hello \ WEB-INF" (tức là, "<TOMCAT_HOME> \ webapps \ hello \ WEB-INF \ web.xml").

Trích dẫn
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="3.0"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 
   <!-- To save as "hello\WEB-INF\web.xml" -->
 
   <servlet>
      <servlet-name>HelloWorld</servlet-name>
      <servlet-class>HelloServlet</servlet-class>
   </servlet>
 
   <!-- Note: All <servlet> elements MUST be grouped together and
     placed IN FRONT of the <servlet-mapping> elements -->
 
   <servlet-mapping>
      <servlet-name>HelloWorld</servlet-name>
      <url-pattern>/sayhello</url-pattern>
   </servlet-mapping>
</web-app>

Trong cấu hình trên, một servlet có tệp lớp "HelloServlet. Class" được ánh xạ tới URL yêu cầu "/ sayhello" (thông qua tên dịch vụ tùy ý "HelloWorld"), trong ứng dụng web này "xin chào". Nói cách khác, URL yêu cầu đầy đủ cho servlet này là "http: // hostname: port / hello / sayhello".

Tệp cấu hình này, được lưu trong ứng dụng web "xin chào" của bạn, chỉ áp dụng cho ứng dụng web cụ thể này "xin chào".

Khởi động lại máy chủ Tomcat của bạn để làm mới tệp "web.xml".

Lưu ý: Đối với MACHI servlet, bạn cần viết một cặp phần tử <servlet> và <servlet-maps> với một tên <servlet-name> phổ biến nhưng tùy ý. Xin lưu ý rằng tất cả các phần tử <servlet> PHẢI được nhóm lại với nhau và được đặt trong FRONT của các phần tử <servlet-maps>.

3. (Bỏ qua trừ khi ...) Làm thế nào để gỡ lỗi?

"Tất cả mọi thứ có thể có thể đi sai sẽ đi sai." Điều quan trọng nhất cần làm là tìm các TIN NHẮN LRI !!!
Luôn luôn...

    Làm mới trình duyệt của bạn bằng Cntl-F5 (thay vì nút refresh hoặc đơn giản là F5) để có bản sao mới, thay vì từ bộ đệm.
    Bạn có thể khởi động lại máy chủ Tomcat của bạn. Bạn cũng có thể khởi động lại trình duyệt của mình để xóa bộ nhớ cache.
    Kiểm tra chính tả của bạn! Luôn luôn cho rằng tất cả các chương trình là trường hợp nhạy cảm. Đừng gõ, sao chép và dán nếu có thể!
    và QUAN TRỌNG NHẤT - Tìm THÔNG ĐIỆP LRI !!!
        Kiểm tra các thông báo lỗi trên bảng điều khiển của Tomcat. Hầu hết các thông báo lỗi có một vài màn hình của dòng. Bạn cần cuộn lên từ từ dòng cuối cùng để tìm LINE ĐẦU TIÊN của các thông báo lỗi.

Trích dẫn
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure  <== First line
The last packet sent successfully to the server was 0 milliseconds ago.
The driver has not received any packets from the server.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        ......
        ......
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
        at java.sql.DriverManager.getConnection(DriverManager.java:579)
        at java.sql.DriverManager.getConnection(DriverManager.java:221)
        at MySQLJdbcTestJDK7.main(MySQLJdbcTestJDK7.java:7)         <== Your program's line number here (line 7)

Kiểm tra tệp nhật ký của Tomcat, được đặt tại "<TOMCAT_HOME> \ log". "Catalina.yyyy-mm-dd.log" hiển thị thông báo khởi động của Tomcat. Đồng thời kiểm tra "localhost.yyyy-mm-dd.log".
     Nếu mọi thứ đang chạy tốt cho đến khi sét đánh, hãy tự hỏi mình "Tôi đã thay đổi điều gì?"

3.1 Không thể khởi động Tomcat sau khi cài đặt


Trích dẫn
SYMPTOM: Cannot start Tomcat after installation. The Tomcat console flashed and disappeared.
POSSIBLE SOLUTIONS:
  1. Run the script "configtest.bat" (for Windows) or "./configtest.sh" (for Mac/Linux) to check
     configuration files ("server.xml", "web.xml", "content.xml").
  2. Check the Tomcat's log files, located at "<TOMCAT_HOME>\logs".
     The "catalina.{yyyy-mm-dd}.log" shows the Tomcat's startup messages.
  3. Start the tomcat in the debugging mode by running "catalina debug" (or ./catalina.sh debug) and
     type "run" in the "jdb" prompt. Look for the error messages.
  4. If the error messages indicate that another Tomcat instance is running
     (java.net.BindException: Address already in use: JVM_Bind), kill the Tomcat process (See below).
  5. If the error messages indicate that another application is running on the Tomcat's port numbers,
     then you need to change the Tomcat's port number in "server.xml".
     You can issue command "netstat -an" to check the status of all the ports.


SYMPTOM: Cannot start Tomcat
ERROR MESSAGE:
  SEVERE: StandardServer.await: create[localhost:8005]
  java.net.BindException: Address already in use: JVM_Bind
POSSIBLE SOLUTIONS:
  1. Another Tomcat instance has been started. Kill it (see below).
  2. Another application is running on the Tomcat's port number.
     Change the Tomcat's port number in "server.xml".
     You can issue command "netstat -an" to check the status of all the ports.


SYMPTOM: Cannot start Tomcat after installation
ERROR MESSAGE:
  1. Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
  2. JRE_HOME environment variable is not defined
POSSIBLE SOLUTIONS:
  1. Check if JAVA_HOME is properly defined, via command "set JAVA_HOME" (for Windows)
     or "echo $JAVA_HOME" (for Mac/Linux). Check the spelling carefully.
  2. Define environment variable JAVA_HOME according to "Step 2: Create an Environment Variable JAVA_HOME".

Xác định vị trí / giết chết quá trình của Tomcat

     Trong các cửa sổ, bắt đầu "Trình quản lý tác vụ", Tomcat chạy dưới dạng "quy trình" có tên "java.exe". Bạn có thể cần phải giết quá trình.
     Trong Mac OS, bắt đầu "Trình giám sát hoạt động". Chọn "Tất cả quy trình" và tìm "java.exe".
     Trong Linux / Mac OS, bạn có thể phát hành "ps aux | grep tomcat" để xác định quy trình Tomcat. Lưu ý xuống ID quá trình (pid). Bạn có thể giết tiến trình Tomcat thông qua "kill -9 pid".

3.2 Không thể truy cập máy chủ Tomcat từ trình duyệt

Trích dẫn
ERROR MESSAGE:
  (Firefox) Unable to Connect
  (IE) Internet Explorer cannot display the webpage
  (Chrome) Oops! Google Chrome could not connect to ...
  (Safari) Safari can't connect to the server
PROBABLE CAUSES: You are simply not connecting to your Tomcat.
POSSIBLE SOLUTION:
  1. Check if your Tomcat server has been started?
  2. Check the hostname and port number of your URL (http://localhost:9999/...)

ERROR MESSAGE: Error 404 File Not Found
PROBABLE CAUSES: You have connected to your Tomcat.
  But Tomcat server cannot find the HTML file or Servlet that your requested.
POSSIBLE SOLUTION:
  1. Check your spelling! The path is case-sensitive!
  2. For HTML file request with URL http://localhost:9999/xxxx/filename.html:
     a. Open Tomcat's "webapps" directory, check if sub-directory "xxxx" exists. It is case-sensitive.
     b. Open the "xxxx" directory, check if "filename.html" exists.
  3. For servlet request with URL http://localhost:9999/xxxx/servletURL:
     a. Check the Tomcat's console for error message.
     b. Check the Tomcat console to make sure that your application "xxxx" has been deployed.
     c. Open Tomcat's "webapps" directory, check if sub-directory "xxxx" exists.
     d. Open the "xxxx" directory, check if sub-directory "WEB-INF" (uppercase with a dash) exists.
     e. Open the "WEB-INF", check if sub-directory "classes" (lowercase, plural) exists.
     f. Open your servlet, check if the servlet is mapped to servletURL
     g. Check if you have compiled the servlet. That is, the .class exisits (NOT .java).

ERROR MESSAGE: Error 500 Internal Server Error
POSSIBLE SOLUTION:
  Error 500 should have triggered many error message in the Tomcat's console.
  Go to the Tomcat's console, find the error message.

ERROR MESSAGE: Error 505: GET (or POST) method not supported
POSSIBLE SOLUTION:
  Check you servlet to make sure that you have defined a doGet() (or doPost()) method.

3.3 Lỗi Java Servlet

Trích dẫn
SYMPTOM: Cannot compile Java Servlet
ERROR MESSAGE: class xxxx is public, should be declared in a file named xxxx.java
CAUSES/SOLUTION:
  In Java, the filename must be the same as the classname with extension of ".java".


SYMPTOM: Cannot compile Java Servlet
ERROR MESSAGE: package javax.servlet does not exist
CAUSES/SOLUTION:
  The Java Servlet library is missing. Read "Step 6(b) Compiling the Servlet"
  again, again and again....

3.4 Lỗi cơ sở dữ liệu Java Servlet

Trích dẫn
ERROR MESSAGE: No suitable driver found
POSSIBLE SOLUTION:
  Check if you have done Step 7(c) Copy the MySQL JDBC Drive to Tomcat's "lib".

ERROR MESSAGE: Communications link failure
POSSIBLE SOLUTION:
  Check if you have started MySQL server.

ERROR MESSAGE: Access denied for user 'myuser'@'localhost' (using password: YES)
POSSIBLE SOLUTION:
  Wrong username or password in your servlet's getConnection()

ERROR MESSAGE: Public Key Retrieval is not allowed
POSSIBLE SOLUTION:
  Add jdbc:mysql://localhost:3306/ebookshop?allowPublicKeyRetrieval=true&useSSL=false to databaseURL.

ERROR MESSAGE: The server time zone value '...' is unrecognized or represents more than one time zone
POSSIBLE SOLUTION:
  Add jdbc:mysql://localhost:3306/ebookshop?serverTimezone=UTC to databaseURL.

ERROR MESSAGE: You have an error in your SQL syntax ...
POSSIBLE SOLUTION:
  SQL syntax error. Check you SQL statement.

Chúc các bạn thành công.   Tom_and_Jerry 1.gif
« Sửa lần cuối: Tháng Sáu 20, 2019, 03:57:26 PM gửi bởi NetworkEngineer »


Ngủ rồi CCIEInternetworkExpert

  • Sr. Member
  • ****
  • Bài viết: 444
  • Số Lần: +1/-0
Cài đặt và cấu hình Apache Tomcat 9 trên Windows, Mac OS X, Ubuntu Unix
« Trả lời #1 vào: Tháng Tư 17, 2019, 04:57:14 PM »
 Tom_and_Jerry 13.gif
« Sửa lần cuối: Tháng Sáu 20, 2019, 03:57:39 PM gửi bởi NetworkEngineer »

Đang duyệt NetworkEngineer

  • Administrator
  • Full Member
  • *****
  • Bài viết: 150
  • Số Lần: +0/-0
Re: Cài đặt và cấu hình Apache Tomcat 9 trên Windows, Mac OS X, Ubuntu Unix
« Trả lời #2 vào: Tháng Sáu 20, 2019, 03:57:47 PM »
 Tom_and_Jerry 1.gif


 

Related Topics

  Tiêu đề / Tác giả Trả lời Bài mới
0 Trả lời
272 Lượt xem
Bài mới Tháng Tư 07, 2018, 02:16:07 PM
gửi bởi CCNACCNP
1 Trả lời
356 Lượt xem
Bài mới Tháng Sáu 20, 2019, 03:59:23 PM
gửi bởi NetworkEngineer
5 Trả lời
1238 Lượt xem
Bài mới Tháng Sáu 20, 2019, 03:58:27 PM
gửi bởi NetworkEngineer
0 Trả lời
277 Lượt xem
Bài mới Tháng Tư 13, 2018, 10:48:51 AM
gửi bởi CCNACCNP
2 Trả lời
152 Lượt xem
Bài mới Tháng Sáu 20, 2019, 02:58:55 PM
gửi bởi NetworkEngineer