Basisklassen zum Modul jdk.httpserver
ulrich
2024-01-24 9d3717abd59e1672f5d8d7888ce613afdc7fb3c5
commit | author | age
caa4d1 1 /*
U 2   http-base - Extensions to jdk.httpserver
3   Copyright (C) 2021  Ulrich Hilger
4
5   This program is free software: you can redistribute it and/or modify
6   it under the terms of the GNU Affero General Public License as
7   published by the Free Software Foundation, either version 3 of the
8   License, or (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU Affero General Public License for more details.
14
15   You should have received a copy of the GNU Affero General Public License
16   along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  */
18 package de.uhilger.httpserver.base.handler;
19
20 import com.sun.net.httpserver.HttpExchange;
23abc6 21 import de.uhilger.httpserver.base.actor.DelegateActor;
caa4d1 22 import java.io.IOException;
U 23 import java.util.HashMap;
24 import java.util.Map;
25
26 /**
27  * Der PatternDelegator delegiert HTTP-Aufrufe an HttpHandler, indem 
28  * der URL des Aufrufs mit einem Muster verglichen wird. Zu einem bestimmten 
29  * Muster passende URLs werden an den zum Muster hinterlegten HttpHandler 
30  * weitergegeben.
31  * 
32  * Wird kein passendes Muster gefunden, reicht der PatternDelegator 
33  * die Anfrage an den FileHandler weiter, wodurch - sofern vorhanden - die 
34  * vom URL bezeichnete Ressource ausgeliefert wird.
35  * 
36  * @author Ulrich Hilger
37  * @version 1, 29.06.2021
38  */
39 public class PatternDelegator extends FileHandler {
40   
41   /** die HttpHandler, an die dieser Delegator passende Anfragen weitergibt */
42   //private Map<String, HttpHandler> handlers;
43   private Map<String, HandlerDescriptor> handlers;
44
45   /**
46    * Ein neues Objekt der Klasse PatternDelegator erzeugen
47    */
48   public PatternDelegator() {
49     //super(absoluteDirectoryPathAndName);
50     handlers = new HashMap();
51   }
52   
53   /**
54    * Diesem Delegator einen HttpHandler hinzufuegen
55    * 
56    * @param pattern  das Muster, das ein URL treffen muss, damit der hier 
57    * hinzugefuegte Handler aufgerufen wird
58    * @param handler  der Handler, an den dieser Delegator eine Anfrage 
59    * delegiert, wenn das Muster passt
60    */
61   public void addHandler(String pattern, HandlerDescriptor handler) {
62     handlers.put(pattern, handler);
63   }
64
65   /**
66    * Einen HttpHandler von diesem Delegator entfernen
67    * 
68    * @param pattern  das Muster, das dem HttpHandler zugeordnet ist, der 
69    * entfernt werden soll
70    */
71   public void removeHandler(String pattern) {
72     handlers.remove(pattern);
73   }
74   
75   /**
76    * Eine HTTP-Anfrage ausfuehren, indem das Muster des URL mit den 
77    * Mustern verglichen wird, die fuer diesen Delegator hinterlegt wurden 
78    * und die Anfrage an den HttpHandler delegiert wird, dessen Aufrufmuster 
79    * passt
80    * 
81    * @param exchange  das Objekt mit allen Infos zu Anfrage und Antwort
82    * @throws IOException wenn etwas nicht geklappt hat
83    */
84   @Override
85   public void handle(HttpExchange exchange) throws IOException {
23abc6 86     boolean noMatch = new DelegateActor().handle(exchange, handlers);
caa4d1 87     if(noMatch) {
U 88       super.handle(exchange);
89     }
90   }
91   
92 }