1, Tomcat overview
Since November 2017, Java accounted for 13% of the programming language ranking, ranking first in the list, Tomcat has also become the first choice for Java developers. Its open source, less system resources, cross platform and other characteristics are deeply loved. This chapter mainly studies how to deploy Tomcat service and realize the configuration of multiple virtual hosts according to the production environment. The final focus is on the pressure test, how to optimize Tomcat service according to the pressure test results and how to deal with common memory overflow.
Tomcat server is a free open source Web application server. It is a lightweight application server. It is widely used in small and medium-sized systems and when there are not many concurrent access users. It is the first choice for developing and debugging JSP programs. Generally speaking, Tomcat, like Apache or Nginx Web servers, has the function of processing HTML pages. However, because its ability to process static html is far less than Apache or Nginx, Tomcat usually runs on the back end as a Servlet and JSP container.
Official website address: https://tomcat.apache.org/
2, Introduction to Tomcat configuration file and its core components
2.1. Configuration file
Introduction to files in the installation directory
Directory name | function |
bin | Save the script files for starting and closing Tomcat. catalina.sh, startup.sh and shutdown.sh are commonly used |
conf | Various configuration files of Tomcat server are stored, including server.xml, context.xml, Tomcat users.xml and web.xml. |
lib | The jar package for storing the Tomcat server is generally unchanged. Unless a third-party service, such as redis, is connected, the corresponding jar package needs to be added |
logs | Store Tomcat logs |
temp | Store the files generated by Tomcat runtime |
webapps | Directory where project resources are stored |
work | Tomcat working directory is generally used when clearing Tomcat cache |
conf subdirectory
file name | explain |
server.xml | Master profile |
web.xml | Each webapp can only be accessed after "deployment". Its deployment mode is usually defined by web.xml and stored in the WEB-INF / directory. This file provides default deployment related configuration for all webapps. Each web application can also use a special configuration file to overwrite the global file |
context.xml | It is used to define the Context configuration that all web applications need to load. This file provides the default configuration for all webapps. Each web application can also use its own special configuration. It is usually defined by the special configuration file context.xml, which is stored in the WEB-INF / directory, overwriting the global file |
tomcat-users.xml | User authentication account and password file |
catalina.policy | Used to set the security policy for tomcat when using the security option to start omcat |
catalina.properties | The configuration of Tomcat environment variables is used to set classloader paths and some parameters related to JVM tuning |
logging.properties | Tomcat log system related configuration, you can modify the log level and log path |
Note that configuration files are case sensitive |
2.2 core components
Tomcat consists of a series of components, including three core components:
- Web container: complete the functions of the web server.
- Servlet container: named catalina, used to process servlet code.
- JSP container: used to translate JSP dynamic web pages into Servlet code
Multi instance: multi instance is to open multiple different service ports on one server and run multiple service processes at the same time. These service processes listen to different service ports through different socket s to provide services.
Engine: Generally speaking, engine is the supporting part of a program or a set of system. Common program engines include game engine, search engine, anti-virus engine, etc
name | explain |
server | Server, the process instance running Tomcat. There can be multiple service s in a server, but usually only one |
service | Service is used to organize the correspondence between Engine and Connector. There is only one Engine in a service |
connector | Connector, which is responsible for the HTTP, HTTPS, AJP and other protocol connections of the client. A connector belongs to only one Engine |
Engine | The Engine is used to respond to and process user requests. Multiple connectors can be bound to an Engine |
Host | That is, virtual hosts can realize multiple virtual hosts, for example, using different host headers to distinguish |
Context | Configure the mapping relationship between specific URL path mapping and directory according to the application context: url = > directory |
<?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"> <Context > <Context /> </Host> </Engine> </Service> </Server>
tomcat processing request process
- Tomcat starts a Server process. You can start multiple servers, that is, multiple instances of tomcat, but generally only one Server is started
- Create a Service to provide services. You can create multiple services, but generally only one
- In each Service, is the associated configuration of the Engine and its Connector
- You can provide multiple connectors for this Service. These connectors use different protocols and bind different ports. Their role is to process different connection requests or responses from clients
- The Engine is also defined inside the Service. The Engine is the real entry to process requests. Multiple virtual hosts are defined inside
- The Engine analyzes the request header and sends the request to the corresponding virtual host
- If there is no match, the data is sent to the defaultHost default virtual host on the Engine
- The default virtual host on the Engine can be modified
- Host defines the virtual host. The virtual host has a name, which is matched by the name
- Context defines the application's individual path mapping and configuration
3, Tomcat service deployment
3.1. Close the firewall
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
3.2. Install JDK package
[root@localhost ~]#rpm -ivh jdk-8u201-linux-x64.rpm
Will install Tomcat Required software package to/opt Directory apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm Switch to/opt Remove and install JDK cd /opt rpm -ivh jdk-8u201-linux-x64.rpm
3.3. Setting JDK environment variables
1. Modify profile vim /etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export PATH=$JAVA_HOME/bin:$PATH 2. Refresh profile [root@localhost jdk1.8.0_201-amd64]#source /etc/profile
3.4. Installing tomcat
1. #Switch to / opt and unzip the tomcat package cd /opt tar -zxf apache-tomcat-9.0.16.tar.gz 2. #Copy the extracted package to / usr/local / and rename it cp -r apache-tomcat-9.0.16 /usr/local/tomcat 3. #Switch to the copied directory and start tomcat cd /usr/local/tomcat/ /usr/local/tomcat/bin/startup.sh 4. #See if it starts successfully ss -natp |grep 8080 5. #Test whether you can log in successfully on the web page http://192.168.32.98:8080/
3.5. Add tomcat to the service
1. #Shut down the service first /usr/local/tomcat/bin/shutdown.sh 2. #Add user set primary group useradd -s /sbin/nologin tomcat chown tomcat:tomcat tomcat/ -R 3. #New service file vim /etc/systemd/system/tomcat.service [Unit] Description=Tomcat #After=syslog.target network.target remote-fs.target nss-lookup.target After=syslog.target network.target [Service] Type=forking ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh RestartSec=3 PrivateTmp=true User=tomcat Group=tomcat [Install] WantedBy=multi-user.target 4. #Reload the service and start it to see if it starts successfully systemctl daemon-reload systemctl start tomcat ss -ntap |grep 8080
4, Virtual host configuration
Sometimes the company may have multiple projects to run, so it is certainly impossible to run multiple Tomcat services on one server, which will consume too many system resources. At this time, the Tomcat virtual host needs to be used. For example, two new domain names www.why.com and www.accp.com hope to access different project contents through these two domain names.
[root@localhost webapps]#mkdir why accp [root@localhost webapps]#echo "this is kgc web !" > why/index.jsp [root@localhost webapps]#echo "this is accp web !" > accp/index.jsp [root@localhost webapps]#cat accp/index.jsp kgc/index.jsp this is accp web ls this is why web ls #http://tomcat.apache.org/tomcat-8.5-doc/index.html #Detailed explanation of configuration file [root@localhost ~]# vim /usr/local/tomcat/conf/server.xml <Host name="www.why.com" appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" /> </Host> <Host name="www.accp.com" appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/usr/local/tomcat/webapps/accp" path="" reloadable="true" /> </Host> [root@localhost ~]#systemctl restart tomcat ##change hosts file## C:\Windows\System32\drivers\etc change the hosts file 192.168.32.101 www.why.com www.accp.com http://www.why.com:8080/why/ http://www.why.com:8080/accp/