Cách triển khai tệp WAR tới Tomcat

1. Khái quát chung

Apache Tomcat là một trong những máy chủ web phổ biến nhất trong cộng đồng Java. Nó được vận chuyển dưới dạng một thùng chứa servlet có khả năng phục vụ Web ARchives với phần mở rộng WAR.

Nó cung cấp một bảng điều khiển quản lý mà từ đó bạn có thể triển khai một ứng dụng web mới hoặc hủy triển khai một ứng dụng hiện có mà không cần phải khởi động lại vùng chứa. Điều này đặc biệt hữu ích trong môi trường sản xuất.

Trong bài viết này, chúng tôi sẽ giới thiệu tổng quan nhanh về Tomcat và sau đó trình bày các cách tiếp cận khác nhau để triển khai tệp WAR.

2. Cấu trúc Tomcat

Trước khi bắt đầu, chúng ta nên tự làm quen với một số thuật ngữ và biến môi trường.

2.1. Các biến môi trường

Nếu bạn đã làm việc với Tomcat trước đây, những điều này sẽ rất quen thuộc với bạn:

$ CATALINA_HOME

Biến này trỏ đến thư mục nơi máy chủ của chúng tôi được cài đặt.

$ CATALINA_BASE

Biến này trỏ đến thư mục của một phiên bản cụ thể của Tomcat, bạn có thể cài đặt nhiều phiên bản. Nếu biến này không được đặt rõ ràng, thì nó sẽ được gán giá trị giống như $ CATALINA_HOME .

Các ứng dụng web được triển khai trong thư mục $ CATALINA_HOME \ webapps .

2.2. Thuật ngữ

Gốc tài liệu . Đề cập đến thư mục cấp cao nhất của ứng dụng web, nơi chứa tất cả tài nguyên ứng dụng như tệp JSP, trang HTML, lớp Java và hình ảnh.

Đường dẫn ngữ cảnh . Đề cập đến vị trí liên quan đến địa chỉ của máy chủ và đại diện cho tên của ứng dụng web.

Ví dụ: nếu ứng dụng web của chúng tôi được đặt trong thư mục $ CATALINA_HOME \ webapps \ myapp , nó sẽ được truy cập bằng URL // localhost / myapp và đường dẫn ngữ cảnh của nó sẽ là / myapp .

CHIẾN TRANH . Là phần mở rộng của tệp đóng gói hệ thống phân cấp thư mục ứng dụng web ở định dạng ZIP và viết tắt của Web Archive. Các ứng dụng web Java thường được đóng gói dưới dạng tệp WAR để triển khai. Các tệp này có thể được tạo trên dòng lệnh hoặc bằng IDE như Eclipse.

Sau khi triển khai tệp WAR của chúng tôi, Tomcat giải nén nó và lưu trữ tất cả các tệp dự án trong thư mục ứng dụng web trong một thư mục mới được đặt tên theo dự án.

3. Thiết lập Tomcat

Máy chủ web Tomcat Apache là phần mềm miễn phí có thể được tải xuống từ trang web của họ. Bắt buộc phải có sẵn JDK trên máy của người dùng và biến môi trường JAVA_HOME được đặt chính xác.

3.1. Khởi động Tomcat

Chúng tôi có thể khởi động máy chủ Tomcat bằng cách chỉ cần chạy tập lệnh khởi động tại $ CATALINA_HOME \ bin \ startup . Có .bat.sh trong mọi cài đặt.

Chọn tùy chọn thích hợp tùy thuộc vào việc bạn đang sử dụng hệ điều hành dựa trên Windows hay Unix.

3.2. Định cấu hình vai trò

Trong giai đoạn triển khai, chúng tôi sẽ có một số tùy chọn, một trong số đó là sử dụng bảng điều khiển quản lý của Tomcat. Để truy cập trang tổng quan này, chúng tôi phải có người dùng quản trị được định cấu hình với các vai trò thích hợp.

Để có quyền truy cập vào trang tổng quan, người dùng quản trị cần vai trò người quản lý-gui . Sau đó, chúng tôi sẽ cần triển khai tệp WAR bằng Maven, vì điều này, chúng tôi cũng cần vai trò quản lý kịch bản .

Hãy thực hiện những thay đổi này trong $ CATALINA_HOME \ conf \ tomcat-users :

Bạn có thể tìm thêm thông tin chi tiết về các vai trò Tomcat khác nhau bằng cách theo liên kết chính thức này.

3.3. Đặt quyền thư mục

Cuối cùng, đảm bảo rằng có quyền đọc / ghi trên thư mục cài đặt Tomcat.

3.4. Cài đặt thử nghiệm

Để kiểm tra xem Tomcat được thiết lập đúng cách, hãy chạy tập lệnh khởi động ( startup.bat / startup.sh ), nếu không có lỗi nào hiển thị trên bảng điều khiển, chúng ta có thể kiểm tra kỹ bằng cách truy cập // localhost: 8080 .

Nếu bạn thấy trang đích Tomcat, thì chúng tôi đã cài đặt máy chủ đúng cách.

3.5. Giải quyết xung đột cổng

Theo mặc định, Tomcat được đặt để lắng nghe các kết nối trên cổng 8080 . Nếu có một ứng dụng khác đã được liên kết với cổng này, bảng điều khiển khởi động sẽ cho chúng tôi biết.

Để thay đổi cổng, chúng ta có thể chỉnh sửa tệp cấu hình máy chủ server.xml tại $ CATALINA_HOME \ conf \ server.xml. Theo mặc định, cấu hình trình kết nối như sau:

Ví dụ: nếu chúng ta muốn thay đổi cổng của mình thành 8081 , thì chúng ta sẽ phải thay đổi thuộc tính cổng của trình kết nối như sau:

Đôi khi, cổng chúng tôi đã chọn không được mở theo mặc định, trong trường hợp này, chúng tôi sẽ cần mở cổng này bằng các lệnh thích hợp trong nhân Unix hoặc tạo các quy tắc tường lửa thích hợp trong Windows, cách thực hiện điều này nằm ngoài phạm vi của bài viết này.

4. Triển khai từ Maven

Nếu chúng ta muốn sử dụng Maven để triển khai các kho lưu trữ web của mình, chúng ta phải định cấu hình Tomcat làm máy chủ trong tệp settings.xml của Maven .

Có hai vị trí có thể tìm thấy tệp settings.xml :

  • Cài đặt Maven: $ {maven.home} /conf/settings.xml
  • Lượt cài đặt của người dùng: $ {user.home} /. M2 / settings.xml

Khi bạn đã tìm thấy nó, hãy thêm Tomcat như sau:

 TomcatServer admin password 

We will now need to create a basic web application from Maven to test the deployment. Let's navigate to where we would like to create the application.

Run this command on the console to create a new Java web application:

mvn archetype:generate -DgroupId=com.baeldung -DartifactId=tomcat-war-deployment -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

This will create a complete web application in the directory tomcat-war-deployment which, if we deploy now and access via the browser, prints hello world!.

But before we do that we need to make one change to enable Maven deployment. So head over to the pom.xml and add this plugin:

 org.apache.tomcat.maven tomcat7-maven-plugin 2.2  //localhost:8080/manager/text TomcatServer /myapp  

Note that we are using the Tomcat 7 plugin because it works for both versions 7 and 8 without any special changes.

The configuration url is the url to which we are sending our deployment, Tomcat will know what to do with it. The server element is the name of the server instance that Maven recognizes. Finally, the path element defines the context path of our deployment.

This means that if our deployment succeeds, we will access the web application by hitting //localhost:8080/myapp.

Now we can run the following commands from Maven.

To deploy the web app:

mvn tomcat7:deploy

To undeploy it:

mvn tomcat7:undeploy

To redeploy after making changes:

mvn tomcat7:redeploy

5. Deploy With Cargo Plugin

Cargo is a versatile library that allows us to manipulate the various type of application containers in a standard way.

5.1. Cargo Deployment Setup

In this section, we will look at how to use Cargo's Maven plugin to deploy a WAR to Tomcat, in this case, we will deploy it to a version 7 instance.

To get a firm grip on the whole process, we will start from scratch by creating a new Java web application from the command line:

mvn archetype:generate -DgroupId=com.baeldung -DartifactId=cargo-deploy -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

This will create a complete Java web application in the cargo-deploy directory. If we build, deploy and load this application as is, it will print Hello World! in the browser.

Unlike the Tomcat7 Maven plugin, the Cargo Maven plugin requires that this file is present.

Since our web application does not contain any servlets, our web.xml file will be very basic. So navigate to the WEB-INF folder of our newly created project and create a web.xml file with the following content:

  cargo-deploy  index.jsp  

To enable Maven to recognize Cargo's commands without typing the fully qualified name, we need to add the Cargo Maven plugin to a plugin group in Maven's settings.xml.

As an immediate child of the root element, add this:

 org.codehaus.cargo 

5.2. Local Deploy

In this subsection, we will edit our pom.xml to suit our new deployment requirements.

Add the plugin as follows:

   org.codehaus.cargo cargo-maven2-plugin 1.5.0   tomcat7x installed Insert absolute path to tomcat 7 installation   existing Insert absolute path to tomcat 7 installation      

The latest version, at the time of writing, is 1.5.0. However, the latest version can always be found here.

Notice that we explicitly define the packaging as a WAR, without this, our build will fail. In the plugins section, we then add the cargo maven2 plugin. Additionally, we add a configuration section where we tell Maven that we are using a Tomcat container and also an existing installation.

By setting the container type to installed, we tell Maven that we have an instance installed on the machine and we provide the absolute URL to this installation.

By setting the configuration type to existing, we tell Tomcat that we have an existing setup that we are using and no further configuration is required.

The alternative would be to tell cargo to download and setup the version specified by providing a URL. However, our focus is on WAR deployment.

It's worth noting that whether we are using Maven 2.x or Maven 3.x, the cargo maven2 plugin works for both.

We can now install our application by executing:

mvn install

and deploying it by doing:

mvn cargo:deploy

If all goes well we should be able to run our web application by loading //localhost:8080/cargo-deploy.

5.3. Remote Deploy

To do a remote deploy, we only need to change the configuration section of our pom.xml. Remote deploy means that we do not have a local installation of Tomcat but have access to the manager dashboard on a remote server.

So let's change the pom.xml so that the configuration section looks like this:

  tomcat8x remote   runtime  admin admin //localhost:8080/manager/text    

This time, we change the container type from installed to remote and the configuration type from existing to runtime. Finally, we add authentication and remote URL properties to the configuration.

Ensure that the roles and users are already present in $CATALINA_HOME/conf/tomcat-users.xml just as before.

If you are editing the same project for remote deployment, first un-deploy the existing WAR:

mvn cargo:undeploy

clean the project:

mvn clean

install it:

mvn install

finally, deploy it:

mvn cargo:deploy

That's it.

6. Deploy From Eclipse

Eclipse allows us to embed servers to add web project deployment in the normal workflow without navigating away from the IDE.

6.1. Embed Tomcat in Eclipse

We can embed an installation into eclipse by selecting the window menu item from taskbar and then preferences from the drop down.

We will find a tree grid of preference items on the left panel of the window that appears. We can then navigate to eclipse -> servers or just type servers in the search bar.

We then select the installation directory, if not already open for us, and choose the Tomcat version we downloaded.

On the right-hand-side of the panel, a configuration page will appear where we select the Enable option to activate this server version and browse to the installation folder.

We apply changes, and the next time we open the servers view from Eclipse's windows -> show view submenu, the newly configured server will be present and we can start, stop and deploy applications to it.

6.2. Deploy Web Application in Embedded Tomcat

To deploy a web application to Tomcat, it must exist in our workspace.

Open the servers view from window -> show view and look for servers. When open, we can just right click on the server we configured and select add deployment from the context menu that appears.

From the New Deployment dialog box that appears, open the project drop down and select the web project.

There is a Deploy Type section beneath the Project combo box when we select Exploded Archive(development mode), our changes in the application will be synced live without having to redeploy, this is the best option during development as it is very efficient.

Selecting Packaged Archive(production mode) will require us to redeploy every time we make changes and see them in the browser. This is best only for production, but still, Eclipse makes it equally easy.

6.3. Deploy Web Application in External Location

We usually choose to deploy a WAR through Eclipse to make debugging easier. There may come a time when we want it deployed to a location other than those used by Eclipse's embedded servers. The most common instance is where our production server is online, and we want to update the web application.

We can bypass this procedure by deploying in production mode and noting the Deploy Location in the New Deployment dialog box and picking the WAR from there.

During deployment, instead of selecting an embedded server, we can select the option from the servers view alongside the list of embedded servers. We navigate to the webapps directory of an external Tomcat installation.

7. Deploy From IntelliJ IDEA

To deploy a web application to Tomcat, it must exist and have already been downloaded and installed.

7.1. Local Configuration

Open the Run menu and click the Edit Configurations options.

In the panel on the left search for Tomcat Server, if it is not there click the + sign in the menu, search for Tomcat and select Local. In the name field put Tomcat 7/8 (depending on your version).

Click the Configure… button and in Tomcat Home field navigate to the home location of your installation and select it.

Optionally, set the Startup page to be //localhost:8080/ and HTTP port: 8080, change the port as appropriate.

Go to the Deployment tab and click on the + symbol, select artifact you want to add to the server and click OK

7.2. Remote Configuration

Follow the same instructions as for local Tomcat configurations, but in the server tab, you must enter the remote location of the installation.

8. Deploy by Copying Archive

We have seen how to export a WAR from Eclipse. One of the things we can do is to deploy it by simply dropping it into the $CATALINA_HOME\webapps directory of any Tomcat instance. If the instance is running, the deployment will start instantly as Tomcat unpacks the archive and configures its context path.

If the instance is not running, then the server will deploy the project the next time it is started.

9. Deploy From Tomcat Manager

Assuming we already have our WAR file to hand and would like to deploy it using the management dashboard. You can access the manager dashboard by visiting: //localhost:8080/manager.

The dashboard has five different sections: Manager, Applications, Deploy, Diagnostics, and Server Information. If you go to the Deploy section, you will find two subsections.

9.1. Deploy Directory or WAR File Located on Server

If the WAR file is located on the server where the Tomcat instance is running, then we can fill the required Context Path field preceded by a forward slash “/”.

Let's say we would like our web application to be accessed from the browser with the URL //localhost:8080/myapp, then our context path field will have /myapp.

We skip the XML Configuration file URL field and head over to the WAR or Directory URL field. Here we enter the absolute URL to the Web ARchive file as it appears on our server. Let's say our file's location is C:/apps/myapp.war, then we enter this location. Don't forget the WAR extension.

After that, we can click deploy button. The page will reload, and we should see the message:

OK - Deployed application at context path /myapp

at the top of the page.

Additionally, our application should also appear in the Applications section of the page.

9.2. WAR File to Deploy

Just click the choose file button, navigate to the location of the WAR file and select it, then click the deploy button.

Trong cả hai trường hợp, nếu mọi việc suôn sẻ, bảng điều khiển Tomcat sẽ thông báo cho chúng tôi rằng việc triển khai đã thành công với một thông báo như sau:

INFO: Deployment of web application archive \path\to\deployed_war has finished in 4,833 ms

10. Kết luận

Trong bài viết này, chúng tôi tập trung vào việc triển khai WAR vào máy chủ Tomcat.