Встроенный Tomcat 10, обслуживающий статические ресурсы из толстой банкиJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Встроенный Tomcat 10, обслуживающий статические ресурсы из толстой банки

Сообщение Anonymous »

Следующий код работает правильно при запуске из IDE (Eclipse); то есть документы в src/main/resources/static передаются браузеру:
import org.apache.catalina.Context;
import org.apache.catalina.servlets.DefaultServlet;
import org.apache.catalina.startup.Tomcat;

public class MainTomcat {

public static void main(String[] args) throws Exception {
Tomcat tomcat = new Tomcat();
tomcat.getConnector(); // silly needed call
tomcat.setPort(8080);
String rootPath = MainTomcat.class.getClassLoader().getResource("static").getFile();
System.out.println("root path=" + rootPath);
Context context = tomcat.addContext("/", rootPath);
tomcat.addServlet("/", "default", new DefaultServlet());
context.addServletMappingDecoded("/", "default");
tomcat.start();
tomcat.getServer().await();
}
}

Консоль показывает при запуске:
root path=/home/user/eclipse-workspace/tom1/target/classes/static
18:04:02.950 WARN o.a.catalina.core.StandardContext - A context path must either be an empty string or start with a '/' and do not end with a '/'. The path [/] does not meet these criteria and has been changed to []
class org.apache.catalina.core.StandardContext
18:04:03.415 INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
18:04:03.416 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.0.27]

Пока все хорошо. Затем я создаю толстый jar-файл, используя следующую конфигурацию:

4.0.0
com.americati
tom1
0.0.1-SNAPSHOT

UTF-8
1.8
1.8



junit
junit
4.11
test



jakarta.servlet
jakarta.servlet-api
5.0.0



ch.qos.logback
logback-classic
1.3.14



org.apache.tomcat.embed
tomcat-embed-core
10.0.27





org.apache.maven.plugins
maven-assembly-plugin


build-a

com.americati.awfemb.MainTomcat
jar-with-dependencies
false
awfemb

package
single







После очистки пакета mvn я копирую файл fatjar в другой каталог (/tmp/abc) и запустите java -jar awfemb.jar
root path=file:/tmp/abc/awfemb.jar!/static
20:11:02.466 WARN o.a.catalina.core.StandardContext - A context path must either be an empty string or start with a '/' and do not end with a '/'. The path [/] does not meet these criteria and has been changed to []
class org.apache.catalina.core.StandardContext
20:11:03.179 INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
20:11:03.179 INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.0.27]
20:11:03.219 ERROR o.apache.catalina.core.ContainerBase - A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@53fe15ff]
at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:926)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:886)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:265)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:432)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486)
at com.americati.awfemb.MainTomcat.main(MainTomcat.java:39)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@53fe15ff]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4835)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4973)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919)
... 16 common frames omitted
Caused by: java.lang.IllegalArgumentException: The main resource set specified [/tmp/abc/tomcat.8080/webapps/file:/tmp/abc/awfemb.jar!/static] is not valid
at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:762)
at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:719)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 25 common frames omitted

Это повторяется три раза (я подозреваю, один раз для каждой темы). Соответствующее сообщение:
The main resource set specified [/tmp/abc/tomcat.8080/webapps/file:/tmp/abc/awfemb.jar!/static] is not valid

Похоже, Tomcat присоединяет несуществующий каталог /tmp/abc/tomcat.8080/webapps к указанному файлу ресурсов:/tmp/abc/awfemb.jar! /static и создание недопустимого ресурса. Есть идеи, как это исправить? Я видел несколько (более сложных) примеров с использованием класса WebResourceRoot, но не уверен, нужен ли он вообще.
Кстати, следующая структура действительно создается автоматически. внутри /tmp/abc, что соответствует документации метода Tomcat.setBaseDir().
$ pwd
/tmp/abc
$ find tomcat.8080/
tomcat.8080/
tomcat.8080/work
tomcat.8080/work/Tomcat
tomcat.8080/work/Tomcat/localhost
tomcat.8080/work/Tomcat/localhost/ROOT


Подробнее здесь: https://stackoverflow.com/questions/785 ... om-fat-jar
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Spring boot webflux, обслуживающий статические ресурсы из зависимости
    Гость » » в форуме JAVA
    0 Ответы
    45 Просмотры
    Последнее сообщение Гость
  • Spring boot webflux, обслуживающий статические ресурсы из зависимости
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Spring boot webflux, обслуживающий статические ресурсы из зависимости
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Spring boot webflux, обслуживающий статические ресурсы из зависимости
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • В Sprint Boot 3.2.x пакет Spring-boot-configuration-processor исключается maven при создании толстой банки.
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»