Basisklassen zum Modul jdk.httpserver
ulrich
2024-01-24 9d3717abd59e1672f5d8d7888ce613afdc7fb3c5
commit | author | age
069fd4 1 /*
90f2d3 2   http-base - Extensions to jdk.httpserver
U 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/>.
069fd4 17  */
786e8c 18 package de.uhilger.httpserver.base;
069fd4 19
U 20 import com.sun.net.httpserver.HttpExchange;
73b5b8 21 import de.uhilger.httpserver.base.handler.FileHandler;
069fd4 22 import java.io.BufferedReader;
73b5b8 23 import java.io.File;
069fd4 24 import java.io.IOException;
U 25 import java.io.InputStream;
26 import java.io.InputStreamReader;
582410 27 import java.util.HashMap;
f9b15d 28 import java.util.Map;
069fd4 29
U 30 /**
90f2d3 31  * Helfer fuer HTTP-Methoden
U 32  * 
069fd4 33  * @author Ulrich Hilger
U 34  * @version 1, 01.06.2021
35  */
36 public class HttpHelper {
37
38   /* HTTP Methoden */
39   public static final String HTTP_GET = "GET";
e81655 40   public static final String HTTP_POST = "POST";
U 41   public static final String HTTP_PUT = "PUT";
42   public static final String HTTP_DELETE = "DELETE";
069fd4 43   
582410 44   public static final String STR_AMP = "&";
U 45   public static final String STR_EQUAL = "=";
069fd4 46   
U 47   public static final String CONTENT_TYPE = "Content-Type";
48
49   public static final String CT_JSON = "application/json; charset=UTF-8";
50   public static final String CT_TEXT_HTML = "text/html";
51   
52   /**
53    * Den Namen der gew&uuml;nschten Datei aus der HTTP-Anfrage ermitteln
54    * 
55    * @param e das Objekt mit Methoden zur Untersuchung der Anfrage sowie zum
56    * Anfertigen und Senden der Antwort
57    * @return Name der gew&uuml;nschten Datei
58    */
59   public String getFileName(HttpExchange e) {
60     String ctxPath = e.getHttpContext().getPath();
61     String uriPath = e.getRequestURI().getPath();
62     return uriPath.substring(ctxPath.length());
63   }
64   
65   public String bodyLesen(HttpExchange exchange) throws IOException {
66     StringBuilder sb = new StringBuilder();
67     InputStream is = exchange.getRequestBody();
68     BufferedReader in = new BufferedReader(new InputStreamReader(is));
69     String line = in.readLine();
70     while (line != null) {
71       sb.append(line);
72       line = in.readLine();
73     }
74     return sb.toString();
75   }
76   
f9b15d 77   public String getAttrStr(Map attributes, String key, String defaultValue) {
U 78     Object value = attributes.get(key);
79     if(value instanceof String) {
80       return value.toString();
81     } else {
82       return defaultValue;
83     }
84   } 
85   
582410 86   public Map<String, String> getQueryMap(String query) {  
U 87     String[] params = query.split(STR_AMP);  
88     Map<String, String> map = new HashMap<String, String>();
89     for (String param : params) {  
90       String name = param.split(STR_EQUAL)[0];  
91       String value = param.split(STR_EQUAL)[1];  
92       map.put(name, value);  
93     }  
94     return map;  
95   }  
96   
73b5b8 97   public File tryWelcomeFiles(HttpExchange e, String fName) {
U 98     boolean notFound = true;
99     File file = null;
f9b15d 100     String fileBase = e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString();
U 101     Object welcomeFiles = e.getHttpContext().getAttributes().get(FileHandler.ATTR_WELCOME_FILES);
102     if(welcomeFiles instanceof String) {
103       String[] fileNames = welcomeFiles.toString().split(FileHandler.STR_COMMA);
104       int i = -1;
105       while(notFound && ++i < fileNames.length) {
106         file = new File(fileBase, fName + fileNames[i]);
107         if(file.exists()) {
108           notFound = false;
109         }
73b5b8 110       }
U 111     }
112     if(notFound) {
113       file = new File(fileBase, fName + FileHandler.WELCOME_FILE);
114     }
115     return file;
116   }
069fd4 117   
U 118 }