Troubleshooting
Tomcat service is started, but page is not loaded
First check for any syntax error. If everything is fine and is correctly running, run as root to check the logs for any exception thrown (see ). If you read anything like , this is due to some other service listening on the same port. For instance, it is possible that Apache HTTP Server and Tomcat are listening on the same port (if for example you have Apache running on port 8080 with Nginx serving it as a proxy on port 80). If this is the case, edit the file and change the Connector port to something else under :
/etc/tomcat7/server.xml
<?xml version='1.0' encoding='utf-8'?> ... ... <Service name="Catalina"> <Connector executor="tomcatThreadPool" port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ... ... </Service>
Finally restart and services.
rm /dev/random mknod -m 644 /dev/random c 1 9
Пропустите
Команда ps может просмотреть состояние процесса, например, выполнить следующую команду:
1 |
Результаты следующие:
Как видите, выводится информация только об одном процессе: 27989 — это идентификатор потока, а java — выполненная команда java. Это связано с тем, что при запуске tomcat вся внутренняя работа в этом процессе завершается, включая основной поток, поток сбора мусора, поток акцептора, поток обработки запросов и т. Д.
Вы можете увидеть, сколько потоков находится в процессе, с помощью следующей команды, где nlwp означает количество легких процессов.
1 |
Можно видеть, что в этом процессе 73 потока, однако 73 не исключают потоки в состоянии ожидания. Чтобы получить количество фактически запущенных потоков, вы можете использовать следующую инструкцию:
1 |
Среди них ps -eLo pid, stat может найти все потоки и вывести номер процесса и текущий статус потока, две команды grep для фильтрации номера процесса и статуса потока соответственно, wc считает число. Среди них вывод ps -eLo pid, stat | grep 27989 выглядит следующим образом:
На рисунке фиксируется только часть результатов; Sl указывает, что большинство потоков простаивают.
Activate headless mode
If you’re operating XWiki on a Linux server with no X11 libraries installed you have to enable headless mode for your Tomcat installation. Sometimes this is also needed on Windows platforms. Typical exceptions are:
- Exception: Could not initialize class sun.awt.X11.XToolkit
- java.lang.InternalError: Can’t connect to X11 window server using ‘localhost:10.0’ as the value of the DISPLAY variable
-
On Linux create a file /TOMCAT_HOME/bin/setenv.sh and insert the following code:
#!/bin/shexport JAVA_OPTS=»${JAVA_OPTS} -Djava.awt.headless=true» -
On Windows create a file /TOMCAT_HOME/bin/setenv.bat and insert the following code:
set JAVA_OPTS=%JAVA_OPTS% -Djava.awt.headless=true - When running as a Windows service the setenv.bat is not working. See registry HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\FOOBAR\Parameters\Java for similar settings.
5.2 Configuring SSL Client Authentication
EDQ can support authentication using SSL client certificates.
There are three stages to configuring SSL client certificates:
-
Configure the server to request client certificates.
-
Assign a personal certificate and associated private key to each user.
-
Associate each certificate with an internal EDQ user or an entry in an external LDAP server.
5.2.1 Configuring Tomcat to Support Client Certificates
-
Locate the HTTPS connector and add the following settings:
clientAuth="true" truststoreFile="pathtotruststore" truststorePass="truststorepassword" truststoreType="truststoretype"
-
Set the attribute to (valid client certificate required for a connection to succeed) or want (use a certificate if available, but still connect if no certificate is available).
-
Add the location of the trust file containing the certificate issuers for trusted client certificates.
-
Set to or .
-
-
If the Tomcat installation includes Apache Portable Runtime (APR), then the equivalent settings are used:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" SSLCertificateFile="pathtocrtfile" SSLCertificateKeyFile="pathtokeyfile" SSLCACertificateFile="pathtocabundlefile" SSLVerifyClient="require" />
-
Locate the EDQ file in the subdirectory of the directory. If the file does not exist, create it by copying the file from oedg.home.
-
Add the following line to the file to enable authentication for all realms using X.509 certificates:
x509 = true
Note:
To enable X.509 certificate for specific realms, add a line of code for each realm, including the realm name as a prefix. For example, for the dn realm, add the following line:
dn.x509 = true
-
If required, enable certificate authentication for web pages in all contexts by adding the following setting:
http.x509 = true
Alternatively, to enable selectively for different contexts, add the context as a suffix to the setting; for example:
http.x509.admin = true http.x509.formws = true http.x509.ws = true http.x509.dashboard = true
5.2.2 Assigning Personal Certificates and Key Combinations
When SSL client authentication is enabled on a server, each user must have a certificate and associated private key available on the client. The certificate is not sensitive and can be distributed freely, but the private key must be stored and distributed securely.
Each certificate and key combination user can be stored in a number of ways:
-
In the operating system certificate store. For example, Internet Options, Content, and Certificates on a Windows platform.
-
A smart card.
-
A USB dongle.
Certificate and key combinations can either be generated and distributed to users or created by a certificate authority website, allowing users to apply for one as required. The latter approach is preferable, because the private key is generated on the system of the user and therefore is not transmitted.
On Windows platforms, Java Web Start uses the operating system certificate store in addition to the internal Java store. If a certificate has been created in Internet Explorer (or Google Chrome), it is stored in the system store and will be used by Web Start. Mozilla Firefox has an internal certificate store; certificates generated in Firefox must be added manually to the system or Java store before use with Java Web Start.
Настройка автозапуска
Мы выполнили разовый запуск нашего веб-сервера, но, когда будет перезагружен компьютер, он не запустится. Чтобы это исправить, мы создадим юнит в systemd.
Для начала, остановим работу Tomcat:
/opt/tomcat/bin/shutdown.sh
Поменяем владельца для всех файлов в каталоге /opt/tomcat:
chown -R tomcat:tomcat /opt/tomcat
Создадим конфигурационный файл для нового юнита:
vi /etc/systemd/system/tomcat.service
Description=Apache Tomcat Server
After=network.target
Type=forking
User=tomcat
Group=tomcat
Environment=»JAVA_HOME=/usr/lib/jvm/default-java»
Environment=»JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true»
Environment=»CATALINA_BASE=/opt/tomcat»
Environment=»CATALINA_HOME=/opt/tomcat»
Environment=»CATALINA_PID=/opt/tomcat/temp/tomcat.pid»
Environment=»CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC»
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure
RestartSec=10
WantedBy=multi-user.target
* где обращаем внимание на:
- User/Group — пользователь и группа пользователя, от чьего имени будет работать сервис.
- Environment — переменные окружения. В нашем примере задается несколько для нормальной работы Java и Tomcat.
- ExecStart/ExecStop — пути к скриптам, которые запускают или останавливают работу службы веб-сервера.
- Restart/RestartSec — задают поведение сервиса при необходимости выполнить перезапуск. В нашем примере выполнять при сбое с интервалом в 10 секунд.
Из данных опций, возможно вам захочется поменять CATALINA_OPTS, например, задать другие значения для выделения памяти или указать определенный порт. Остальные опции можно оставить.
Перечитываем новый конфигурационный файл в systemd:
systemctl daemon-reload
Стартуем наш сервис:
systemctl start tomcat
Проверяем, что он запустился и работает:
systemctl status tomcat
Мы должны увидеть что-то на подобие:
• tomcat.service — Apache Tomcat Server
Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2021-02-09 10:30:25 UTC; 22h ago
Main PID: 14645 (java)
При необходимости перезапуска сервиса, можно будет использовать команду:
systemctl restart tomcat
Теперь открываем нашу страницу по IP-адресу сервера — мы снова должны увидеть стартовую страницу Tomcat.
Configuring Apache Tomcat (no authentication) for Network Address Translation (NAT)
- On your Tomcat host, open the start menu and click on Tomcat Configuration (alternatively, edit the catalina.bat or catalina.sh)
-
Click on the Java tab, then add an additional Java Option (in red below)
-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=8008-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false-Djava.rmi.server.hostname=TomcatHostName ** Where TomcatHostName is the hostname of your Tomcat server
- Save the changes and restart Tomcat
-
On your BIPST client, edit your hosts file in the location: C:\Windows\System32\drivers\etc. Add an entry for your Tomcat host with the resolvable IP Address of the Tomcat host. For example:
10.165.10.120 TomcatHostName TomcatHostName.domain.com
Configuring JMX for Apache Tomcat with Firewall Support
-
Tomcat Version Download Link Apache Tomcat 7.0.x Apache Tomcat 8.0.x -
Logon to your Unix/Linux host as the user which Apache Tomcat runs under (in this example: boeuser) and copy the file catalina-jmx-remote.jar to CATALINA_BASE/lib
-
Browse to CATALINA_BASE/conf and edit the file server.xml with a text editor such as VI
-
Enable the new JMX Remote Lifecycle listener by adding the following tag to server.xml (where TomcatHostName is the host name of the server where Apache Tomcat is running)
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" rmiBindAddress="TomcatHostName"/>
- Save the changes to server.xml
-
Browse to CATALINA_BASE/bin and make a backup of setenv.sh and then edit the file setenv.sh. Add the below property: (where /install/path/to/tomcat is the path to your Apache Tomcat installation) No Authentication Option
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.access.file=/install/path/to/tomcat/conf/jmxremote.access -Dcom.sun.management.jmxremote.password.file=/install/path/to/tomcat/conf/tomcat/conf/jmxremote.password"
- Save the changes to setenv.sh. Finally, restart the Apache Tomcat server and confirm that Apache Tomcat is now listening on ports 10001 and 10002
How a connector works
Each Connector element represents a port that Tomcat will listen to for requests. By arranging these Connector elements within hierarchies of Services and Engines, a Tomcat administrator is able to create a logical infrastructure for data to flow in and out of their site.
In addition to routing user-generated requests to the appropriate Services, connectors can also be used to link Tomcat to other supporting web technologies, such as an Apache web server, to efficiently balance the load of work across the network.
The Connector element only has one job — listening for requests, passing them on to an Engine, and returning the results to its specified port.
On its own, the Connector can’t function — the only information this element contains is a port to listen on and talk to, and some attributes that tell it exactly how to listen and talk.
Information about what Server the specified port is located on, what Service the connector is a part of, and what Engine connections should be passed to is provided to the Connector by its location Tomcat’s nested element hierarchy.
Tip: Tcat’s live diagnostic feeds gives you fast, centralized insight into Connector performance across your entire Tomcat infrastructure. Download Tcat now.
В чем разница между БИО / НИО
Будь то BIO или NIO, общий процесс обработки запроса соединителем одинаков:
ПринятьПолучать соединение в очереди (когда клиент отправляет запрос на сервер, если клиент и ОСПосле завершения трехстороннего рукопожатия для установления соединения ОСПоместите соединение в принятьОчередь); получить запрашиваемые данные в соединении и сформировать запросВызов сервлетаКонтейнер обрабатывает запрос, возвращает ответ。Чтобы облегчить последующее описание, сначала проясните взаимосвязь между соединением и запросом: соединение находится на уровне TCP (транспортный уровень) и соответствует сокету; запрос находится на уровне HTTP (прикладной уровень) и должен зависеть от реализации соединения TCP; Может быть передано несколько HTTP-запросов.
В соединителе, реализованном BIO, основным объектом, который обрабатывает запрос, является объект JIoEndpoint. JIoEndpoint поддерживает Acceptor и Worker: Acceptor получает сокеты, а затем находит свободные потоки из пула рабочих потоков для обработки сокетов.Если в пуле рабочих потоков нет свободных потоков, Acceptor блокирует. Worker — это пул потоков, который поставляется с Tomcat. Если другие пулы потоков настраиваются через <Executor>, принцип аналогичен Worker.
В соединителе, реализованном NIO, основным объектом, который обрабатывает запрос, является объект NIoEndpoint. В дополнение к Acceptor и Worker, включенным в NIoEndpoint, используется Poller.Процесс обработки показан на следующем рисунке (Источник изображения: http://gearever.iteye.com/blog/1844203).
После принятия сокета, Acceptor не использует напрямую потоки в Worker для обработки запроса, но сначала отправляет запрос Poller, который является ключом для NIO. Acceptor отправляет запросы в Poller через очереди, используя типичную модель «производитель-потребитель». В Poller поддерживается объект Selector: когда Poller выбирает сокет из очереди, он регистрируется в Selector, затем перебирает Selector, чтобы узнать, какой сокет может быть прочитан, и использует потоки в Worker для обработки соответствующего запроса. Как и в BIO, рабочие также могут быть заменены пользовательскими пулами потоков.
Посредством вышеописанного процесса можно видеть, что в процессе обработки запроса NIoEndpoint независимо от того, получает ли Acceptor сокет или поток обрабатывает запрос, метод блокировки все еще используется, но в процессе «чтения сокета и передачи его потоку в Worker» В реализации используется неблокирующая реализация NIO, которая является основным отличием между режимом NIO и режимом BIO (другие различия оказывают небольшое влияние на производительность и пока не будут упомянуты). Эта разница может принести значительное улучшение эффективности Tomcat в случае большого параллелизма:
В настоящее время большинство HTTP-запросов используют длинные соединения (по умолчанию для HTTP / 1.1 поддерживается true-keep), а длинные соединения означают, что сокет TCP не будет освобожден немедленно, если новый запрос не будет получен после завершения текущего запроса. , Но дождитесь тайм-аута перед выпуском. Если используется BIO, процесс «чтения сокета и передачи его рабочему потоку» блокируется, что означает, что, пока сокет ожидает следующий запрос или ожидает освобождения, рабочий поток, который обрабатывает сокет, всегда будет занят. Он не может быть освобожден, поэтому количество сокетов, которые Tomcat может обрабатывать одновременно, не может превышать максимальное количество потоков, а производительность сильно ограничена. В NIO процесс «чтения сокета и передачи его рабочему потоку» не является блокирующим: когда сокет ожидает следующего запроса или ожидает освобождения, он не занимает рабочий поток, поэтому Tomcat может обрабатывать большое количество сокетов одновременно. Благодаря максимальному количеству потоков производительность параллелизма значительно улучшена.
Два или три параметра: acceptCount, maxConnections, maxThreads
Просмотрите процесс обработки запроса Tomcat: ВacceptПолучать соединение в очереди (когда клиент отправляет запрос на сервер, если клиент и ОСПосле завершения трехстороннего рукопожатия для установления соединения ОСПоместите соединение в принятьОчередь); получить запрашиваемые данные в соединении и сформировать запросВызов сервлетаКонтейнер обрабатывает запрос, возвращает ответ。
Соответственно, некоторые функции параметров в Соединителе следующие:
2、maxConnections
Максимальное количество соединений, полученных и обработанных Tomcat в любое время. Когда число соединений, полученных Tomcat, достигает значения maxConnections, поток Acceptor не будет читать соединения в очереди приема, в это время потоки в очереди приема будут блокироваться, пока число соединений, полученных Tomcat, не станет меньше значения maxConnections. Если установлено значение -1, количество подключений не ограничено.
Значение по умолчанию связано с протоколом, используемым соединителем: значение по умолчанию NIO — 10000, значение по умолчанию APR / native — 8192, а значение по умолчанию BIO — maxThreads (если настроен Executor, значением по умолчанию является maxThreads для Executor).
В окнах значение maxConnections APR / native будет автоматически настроено на максимальное кратное 1024 ниже установленного значения, а если оно установлено на 2000, максимальное значение фактически составляет 1024.
5.1 Configuring SSL During Installation
When installing Tomcat on Windows or any other platform, the HTTPS connector must be configured using the following procedure:
-
Locate the file for the Tomcat installation. Typically it contains the following:
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 This connector uses the NIO implementation that requires the JSSE style configuration. When using the APR/native implementation, the OpenSSL style configuration is required as described in the APR/native documentation --> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> -->
-
Enable the Connector element by removing the comment characters around it.
-
Set the port value for HTTPS. The default is 8443, so if a different value is used also change the value in the HTTP connector to match.
-
Generate the server certificate.
Note:
The certificate is stored either in a Java keystore (JKS format) or as a PKCS#12 file. The latter may be preferred in certain instances, as there are many tools available for working with PKCS#12 files.
-
Update the connector element as follows:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="pathtokeystorefile" keystorePass="keystorepassword" keystoreType="keystoretype" />
-
Set the value to or as required. If the key store contains multiple certificates, use the attribute to set the alias.
-
Some Tomcat distributions include the Apache Portable Runtime (APR) native library. If this is the case, the certificate must be configured using style attributes. For example:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" SSLCertificateFile="pathtocrtfile" SSLCertificateKeyFile="pathtokeyfile" />
For additional Tomcat information, see Apache Tomcat Configuration Reference at
For additional information, see Apache Module mod_ssl at
Настройка автоматической переадресации на https
Для настройки автоматической переадресации со старого порта 8080(http) на новый 8443(https) необходимо добавить следующую запись в файл web.xml внутри тега <web-app>:
<security-constraint> <web-resource-collection> <web-resource-name>Protected Context</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
При этом возможно введение переадресации как для всех проектов сразу (если добавить запись в web.xml, расположенный в корне томката ../Tomcat/conf/web.xml), так и отдельно для каждого приложения (если добавить запись в соответствующий проекту web.xml, расположенный в конкретном вебаппс ../Tomcat/webapps/<нужный проект>/WEB-INF/web.xml).
Для того, чтобы изменения вступили в силу, необходимо перезапустить Tomcat.
Как запросить метрики Tomcat с MBeans
Если вы используете bean-компоненты JMX для мониторинга Tomcat, вы будете использовать прокси-серверы JMX для запроса метрик. Однако для этого вам необходимо настроить Tomcat и назначить пользователей и роли. Вам нужно будет настроить следующие роли: менеджер-JMX и менеджер-графический интерфейс.
Первый позволит пользователю получить доступ к сервлету прокси JMX и состоянию Tomcat; последний позволяет пользователю получить доступ к диспетчеру приложений, где вы можете отслеживать проблемы с производительностью.
Чтобы назначить роль пользователю, необходимо обновить файл конфигурации conf / tomcat-users.xml и ввести следующее. (Команда создаст нового пользователя tomcat-jmx, назначит пользователю перечисленные выше роли и создаст пароль для учетной записи):
Роли = «менеджер-JMX, менеджер-GUI» />
Для запроса метрик Tomcat вам потребуется доступ к сервлету прокси JMX, где вы можете запрашивать метрики производительности через веб-браузер. Через веб-браузер вы можете запрашивать данные Mbeans или управляемых объектов Java для просмотра информации о вашем сервере. Вы можете просмотреть список MBean-компонентов, доступных для мониторинга, введя следующее:
HTTP: // локальный: 8080 / менеджер / jmxproxy
При поиске MBean вы можете добавить параметры, которые помогут вам в поиске. Параметры, которые вы можете добавить в командную строку, включают домен, тип, имя и атрибут. В приглашении это выглядит следующим образом:
http: // localhost: 8080 / manager / jmxproxy /? get =: type =, name = «»&Att =
Если вы хотите просмотреть максимальное время обработки запроса соединителем HTTP, введите следующее:
HTTP: // локальный: 8080 / менеджер / jmxproxy / прибудете = Catalina: тип = GlobalRequestProcessor, имя =»HTTP-NiO-8080″&Att = maxTime
Результат будет следующим:
ОК — Атрибут get ‘Catalina: type = GlobalRequestProcessor, name =»HTTP-NiO-8080″‘- maxTime = 189
Ограничение использования Tomcat для запроса метрик заключается в том, что вы можете одновременно искать только одну вещь. Именно по этой причине мы рекомендуем использовать сторонний инструмент мониторинга сервера для одновременного отслеживания нескольких показателей..
3. Запустите JMX при запуске.
Необходимо перезапустить Tomcat
3.1 Без режима аутентификации
редактироватьTOMCAT_HOME/bin/catalina.sh, Если переменная определенаJAVA_OPTS, Затем измените на этой основе; если не определеноJAVA_OPTS, Добавьте эту переменную. Чтобы добавить в качестве примера, добавьте следующий контент после второй строки catalina.sh:
После завершения добавления перезапустите Tomcat.
3.2 В режиме аутентификации
Следующие четыре шага и2.2 подразделыТочно так же, см.Конфигурация
- Создайте файл разрешений /root/jmxremote.access
- Создайте файл паролей /root/jmxremote.password
- Изменить права доступа к файлам
- Создайте файл конфигурации /root/management.properties
Отредактируйте $ TOMCAT_HOME / bin / catalina.sh
Предполагая, что здесь undefinedПеременные, добавьте следующий контент после второй строки catalina.sh:
После завершения добавления перезапустите Tomcat.
Двойной кликЗапустите Java VisualVM. Если jvisualvm не установлен по умолчанию в вашем JDK, вы можете загрузить его с http://visualvm.github.io/.Нажмите на, затем щелкните Введите IP-адрес удаленного хоста во всплывающем окне, здесь удаленный хост — 192.168.1.14, а затем нажмитеКнопка, как показано ниже на вновь добавленном удаленном хостеНажмите наИ выберите За IP-адресом хоста введите порт JMX, который мы открыли, в данном случае 9999, а затем щелкните Если вы включили аутентификацию учетной записи, добавьте учетную запись и пароль во всплывающем окне и нажмите кнопку ОК. Здесь мы не включаем SSL, поэтому будет отображаться сообщение об ошибке подключения SSL (конечно, при вводе порта установите флажок «Не включать SSL»), нажмите Наконец, дважды щелкните наше недавно добавленное соединение JMX, чтобы иметь возможность удаленно контролировать
3、maxThreads
Максимальное количество потоков обработки запросов. Значением по умолчанию является 200 (Tomcat 7 и 8). Если Соединитель связан с Исполнителем, это значение будет игнорироваться, поскольку Соединитель будет использовать Связанного Исполнителя вместо встроенного пула потоков для выполнения задач.
maxThreads задает максимальное количество потоков, а не фактическое количество запущенных процессоров, фактически размер maxThreads намного больше, чем количество ядер процессора. Это связано с тем, что время обработки запрашивающего потока может быть очень маленьким и большую часть времени может быть заблокировано, например, ожидание возврата данных из базы данных, ожидание чтения и записи данных на жестком диске и т. Д. Следовательно, в определенный момент только несколько потоков фактически используют физический процессор, и большинство потоков ожидает, поэтому разумно, чтобы число потоков было намного больше, чем количество физических ядер.
Другими словами, используя большее количество потоков, чем количество ядер ЦП, Tomcat может поддерживать занятость ЦП и значительно увеличить загрузку ЦП.
Руководство по настройке Tomcat IDEA Community Edition
http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>yle=»margin-bottom:5px;»>Теги: idea tomcat smart tomcat
Я видел много сообщений в блогах, в которых рассказывалось о tomcat с использованием maven. Я не пробовал этот метод, но в версии сообщества действительно есть tomcat -> Smart Tomcat.
Откройте настройку IDEA, Crtl + Alt + S или File-> в плагинах в настройках, найдите tomcat, чтобы увидеть его, нажмите «Установить», чтобы установить его. После завершения установки перезапустите инструмент IDEA, затем щелкните «Добавить конфигурации» в правом верхнем углу IDEA, щелкните «Шаблоны», чтобы увидеть Smart Tomcat, а затем щелкните «Конфигурация», чтобы настроить tomcat. На этом этапе при добавлении кота впервые появилось нулевое значение, и добавление было неудачным. Моя проблема в том, что мне нравится устанавливать программное обеспечение в Program Files, а мой Tomcat находится в D: \ Program Files, возможно, в пути есть пробел, поэтому конфигурация была Нулевое значение, этот путь подходит для затмения. Итак, я скопировал tomcat в корневой каталог диска D, и он был успешно добавлен.
Имя: название проекта. Tomcat: путь к Tomcat Развертывание: путь к веб-приложениям Контекстный путь: контекстный путь, он будет автоматически идентифицирован, как правило, нет необходимости изменять Порт сервера: порт прослушивания сервера 8080 (обычно изменяется самостоятельно) Параметры виртуальной машины: настройки параметров виртуальной машины Java (необязательно)
После завершения настройки нажмите треугольную кнопку запуска в правом верхнем углу, чтобы запустить Tomcat в обычном режиме.
Интеллектуальная рекомендация
1. Для реальных сигналов (для понимания): A (ω) является соотношением амплитуды выходного сигнала и амплитуды входного сигнала, называемого частотой амплитуды. Φ (ω) — это разница межд…
Один. вести Многие люди задавали некоторые вопросы о создании проекта Flex + LCDS (FDS) в сообщениях и группах. Из-за операции ее трудно четко объяснить, поэтому я написал простой учебник (я обещал эт…
package com.example.phonehttp; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.widget.ScrollView; import android.widget.TextView; public class MainActi…
Он предназначен для реализации подкласса того же родительского класса с родительским классом. Полиморфизм Один и тот же ссылочный тип использует разные экземпляры для выполнения разных операций; Идея …
тема: Объедините два упорядоченных слоя в новый заказанный список и возврат. Новый список состоит из всех узлов двух связанных списков, данных сплавным. Пример: Анализ: два связанных списка состоит в …
Вам также может понравиться
D. Самая ценная строка Пример ввода 2 2 aa aaa 2 b c Образец вывода aaa c На самом деле, будучи задетым этим вопросом, вы должны быть осторожны. После инвертирования строки, если две строки имеют один…
Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother to make the gray scale of each cell becomes the average gray scale (rounding down) of all the 8 surro…
calc () может быть очень незнакомым для всех, и трудно поверить, что calc () является частью CSS. Поскольку он выглядит как функция, почему он появляется в CSS, поскольку это функция? Этот момент такж…
Основываясь на дереве регрессии, сформированном CART, а также на предварительной и последующей обрезке дерева, код выглядит следующим образом:…
Откат Обновление в режиме онлайн с версии Centos (CentOS Linux версии 7.3.1611 (Core) до CentOS Linux версии 7.5.1804 (Core)) # ошибка соединения yum-ssh после обновления yexpected key exchange group …