# Servlet Mapping



## Encera (11. Nov 2022)

Hallo zusammen,
ich habe gerade angefangen mich mit WebAnwendungen in Java zu beschäftigen. Leider sind mir trotz langen googelns ein paar Begriffe noch unklar und zwar beispielsweise das "Mapping". ich habe noch nicht genau verstanden worum es sich dabei handelt bzw. was "Mapping/ Servlet Mapping" genau macht.
Hiermal die Startklasse meines Tomcats:

```
ublic static void main(String[] args) {
        try {
            Tomcat tomcat = new Tomcat();
            String webappDirectory = "C:\\Users\\49160\\eclipse-workspace\\BCAH1\\src\\main\\webapp";
            tomcat.setPort(8080);
            Context context = tomcat.addWebapp("", webappDirectory);
            Tomcat.addServlet(context, "blockchain", new ServletContainer(new Application()));
         ----->>>   context.addServletMappingDecoded("/blockchain/api/*", "blockchain");
            tomcat.start();
            tomcat.getServer().await();
        } catch (Exception e) {
            e.printStackTrace();
        }
```
Villeicht kann mir das jemand mit einfachen Worten erklären, dafür wäre ich sehr dankbar


----------



## Oneixee5 (11. Nov 2022)

Willst du den Tomcat aus deinem Programm heraus starten? Der Tomcat ist ja schon ein eigenständiges Programm. 


			https://tomcat.apache.org/tomcat-10.0-doc/RUNNING.txt
		


```
(4) Start Up Tomcat

(4.1) Tomcat can be started by executing one of the following commands:

  On Windows:

      %CATALINA_HOME%\bin\startup.bat
```
Normalerweise würde man den laufenden Tomcat in seine IDE integrieren und diese übernimmt dann das Starten und Stoppen. In der IDE erzeugt man eine Webanwendung, welche nach Fertigstellung als WAR-File exportiert und in die produktive Tomcat Instanz eingestellt wird. Das Servlet Mapping ist dann bestenfalls eine Annotation für den Pfad des Servlets im Client/Browser.
Etwas anders verhält es sich, wenn du eine Webanwendung mit SpringBoot erstellen willst, dort wäre dann z.B. ein Tomcat integriert. Aber man würde da ganz anders herangehen.
Benötigst du einfach nur einen eingebetten Server für kleine Aufgaben, kannst du dass ohne viel Overhead (Tomcat) mit dem neuen module jdk.httpserver im JDK 19 lösen.


----------



## Encera (11. Nov 2022)

Oneixee5 hat gesagt.:


> Willst du den Tomcat aus deinem Programm heraus starten? Der Tomcat ist ja schon ein eigenständiges Programm.
> 
> 
> https://tomcat.apache.org/tomcat-10.0-doc/RUNNING.txt
> ...


Hi, ja der Tomcat soll aus dem Programm heraus gestartet werden und ein kleines WebInterface laden


----------



## Encera (11. Nov 2022)

Oneixee5 hat gesagt.:


> Willst du den Tomcat aus deinem Programm heraus starten? Der Tomcat ist ja schon ein eigenständiges Programm.
> 
> 
> https://tomcat.apache.org/tomcat-10.0-doc/RUNNING.txt
> ...


Hab mir deine Antwort nochmals durchgelesen und glaub jetzt isses mir klar. Mapping bedeutet im Endeffekt quasi nur das ich den Pfad Konfiguriere unter welchem mein Servlet zu finde ist, richtig?


----------



## stg (13. Nov 2022)

Fast, aber für den Anfang richtig genug 

Ein Servlet-Mapping, mappt ein URL Pattern auf einen (logischen) Servlet-Namen. 

Es gibt also nicht nur DEN Pfad, sondern immer eine ganze Gruppe (die natürlich auch mal nur einen einzigen Pfad umfassen kann). Früher hat man z.B. in JSF Anwendungen häufig gesehen, dass alle Aufrufe auf Pfade, die mit *.xhtml enden,  an das FacesServlet weitergereicht werden.
Du kannst nun z.B. aber auch mehrere Mappings für die selbe Servlet-Instanz haben und/oder verschiedenene Instanzen deines Servlets unter unterschiedlichen logischen Namen registrieren.
Die Frage unter welchem Pfad dein Servlet zu finden ist, ist also streng genommen "von der falschen Seite aus betrachtet".


----------



## Encera (13. Nov 2022)

stg hat gesagt.:


> Fast, aber für den Anfang richtig genug
> 
> Ein Servlet-Mapping, mappt ein URL Pattern auf einen (logischen) Servlet-Namen.
> 
> ...


Ahh ich glaube ich verstehe was du meinst, dankedir!


----------

