Jak się robi folder w adresie "example.com/folder" w Tomcat 9

0

Jestem początkujący w javie i w sumie to głównie przerabiam tutoriale i trochę je zmieniam. Pytanie dotyczy Tomcata 9. W sumie zaispirował mnie Intellij, gdyż domyślnie tworzy linki typu localhost/projekt_war w Run/Configuration, czyli z folderem po domenie.

Jak się tworzy taki adres w Tomcat 9? Moja próba była taka:

$ cat /home/u/opt/tomcat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="default.local"  appBase="default"
            unpackWARs="true" autoDeploy="true">
        <Context path="/default_war" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>


    </Engine>
  </Service>
</Server>
u@i3 ~/opt/tomcat

$ cat conf/Catalina/default.local/ROOT.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="${catalina.base}/deploy/default_war.war">
</Context>
u@i3 ~/opt/tomcat
$ 
1

Ale, że ... co?

0

@NeutrinoSpinZero: mam stronę pod adresem przykładowo http://example.com, a chcę mieć pod adresem http://example.com/folder

0

No to wystaw kontroler na takim URI.

0

Najprościej:

  • zbuduj war-a Mavenem lub Gradlem, można też ręcznie ale to dodatkowa robota (i nauka)
  • zmień mu nazwę na ROOT.war
  • wyrzuć wszystko z [katalog Tomcata]/webapps i umieść w nim ROOT.war albo lepiej - zrobić link symboliczny ln -s [ścieżka do WARa] [katalog Tomcata]/webapps/ROOT.war
  • uruchom Tomcata

Tym sposobem bez zmiany czegokolwiek w [katalog Tomcata]/conf będziesz mieć dostępną swoją aplikację pod adresem example.com/

0

@mjskr: Jeśli idzie o http://example.com to mam ogarnięte. Buduję ręcznie w Intellij archiwum war i robię deploy do tomcata. Ale mi chodzi o uzyskanie adresu z folderem po slashu, czyli czegoś takiego http://example.com/folder Takie tylko przerzucenie tej strony pod taki adres.

0

@NeutrinoSpinZero: Dzięki jest to jakieś wyjście. Tyle że jest to strona bez kontrolera. Zrobiłem ją, opierając się o ten tutorial: https://www.codejava.net/java-ee/servlet/java-servlet-quick-start-tomcat-xml-config

Wiem, że można przy pomocy Springa uzyskać kontroler, a czy jakaś lżejsza metoda jest możliwa? Uwzględniwszy, że strona jest niewielka. Może tak, czy bez frameworka się da łątwo to zrobić?

1

Abstrahując od tematu...

Jestem początkujący w javie

Czemu więc zaczynasz za przeproszeniem od d**y strony?

0

@Emdzej93: Bo strony internetowe to coś co na wczesnym etapie nauki można robić. Coś pożytecznego a nie tylko ćwiczenia.

0

@trzczy: jak nie chcesz marnować czasu, to poczytaj więcej, zorientuj się i naucz podstaw programowania i Javy. Przez te xmle czy jsp to tylko się zapłaczesz i zniechecisz.

0

@NeutrinoSpinZero: To na jakim forum dowiem się o tego tomcata?

1

Spróbuj przez managera - http://localhost:8080/manager/html. W sekcji WAR file to deploy wskazujesz plik war, którego nazwa będzie contextem czyli jeśli chcesz mieć apkę dostępną pod adresem example.com/tentego to musisz zdeployować plik o nazwie tentego.war.

1

@mjskr: dzięki. rzeczywiście działa. Moim błędem było opieranie się na sposobie, którego celem było właśnie utworzenie adresu typu ROOT.

Przy okazji ogarnąłem, jak sprawę załatwić bez menegera. Oto metoda:

.
├── conf
│   ├── Catalina
│   │   └── default.local
│   │       └── default_war.xml
│   └── server.xml
├── default
└── deploy
    └── default_war.war

##conf/Catalina/default.local/default_war.xml

<Context docBase="${catalina.base}/deploy/default_war.war">
</Context>

##/conf/server.xml

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="default.local"  appBase="default"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

0

To że jest to wykonalne

0

@AnyKtokolwiek:
W pliku default_war.xml za wiele się nie dzieje, więc to oczywiste, która linia. Po prostu konfiguracja danego hosta virtualnego albo ma ten plik albo nie ma. Natomiast w server.xml istotna jest ta linia name="default.local" appBase="default"

Wrzuciłem całość, bo dla mnie to oczywiste, że chodzi tylko o te elementy, ale prawda, mogłem skrócić i wytłumaczyć. Dziękuję ci za słuszną uwagę.

Co do springa, to mogę oczywiście wymyślić teorię tłumaczenia, co ma piernik do wiatraka, ale prawda jest taka, że to pytanie dotyczyło wyłącznie tomcata. Więc trochę zdemaskowałeś pewne trollowe cechy, że interesujesz się mną, moim rozwojem, a nie podchodzisz do wątku tak po prostu. Ja nie muszę zawsze zdrawdzać wszystkiego po co, dlaczego, a czemu.

Jakieś pytania o php, mamrotania, ogólniki byle by kogoś na czymś przyłapać to istne kuriozum. Zajmij się może gościu programowaniem.

0

@AntyKtokolwiek:
To pisz od razu jak człowiek, "czemu tu jest tag spring". A poza tym tagu spring tu nie było i go nie zdejmowałem. Ja w sprawach nauki nie kłamię. Nie chcę się kreować na jakiegoś mistrza forum czy super gawędziarza, tylko interesuje mie sam temat i wiedza. Hmm może za dużo komputerów, biedaku?

1 użytkowników online, w tym zalogowanych: 0, gości: 1