1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.http;
21
22 import java.util.ArrayList;
23 import java.util.HashMap;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.regex.Matcher;
27 import java.util.regex.Pattern;
28
29 import org.apache.mina.http.api.HttpMethod;
30 import org.apache.mina.http.api.HttpRequest;
31 import org.apache.mina.http.api.HttpVersion;
32
33
34
35
36
37
38 public class HttpRequestImpl implements HttpRequest {
39
40 private final HttpVersion version;
41
42
43 private final HttpMethod method;
44
45
46 private final String requestedPath;
47
48
49 private final String queryString;
50
51
52 private final Map<String, String> headers;
53
54
55
56
57
58
59
60
61
62
63 public HttpRequestImpl(HttpVersion version, HttpMethod method, String requestedPath, String queryString, Map<String, String> headers) {
64 this.version = version;
65 this.method = method;
66 this.requestedPath = requestedPath;
67 this.queryString = queryString;
68 this.headers = headers;
69 }
70
71
72
73
74 @Override
75 public HttpVersion getProtocolVersion() {
76 return version;
77 }
78
79
80
81
82 @Override
83 public String getContentType() {
84 return headers.get("content-type");
85 }
86
87
88
89
90 @Override
91 public boolean isKeepAlive() {
92 return false;
93 }
94
95
96
97
98 @Override
99 public String getHeader(String name) {
100 return headers.get(name);
101 }
102
103
104
105
106 @Override
107 public boolean containsHeader(String name) {
108 return headers.containsKey(name);
109 }
110
111
112
113
114 @Override
115 public Map<String, String> getHeaders() {
116 return headers;
117 }
118
119
120
121
122 @Override
123 public boolean containsParameter(String name) {
124 Matcher m = parameterPattern(name);
125 return m.find();
126 }
127
128
129
130
131 @Override
132 public String getParameter(String name) {
133 Matcher m = parameterPattern(name);
134 if (m.find()) {
135 return m.group(1);
136 } else {
137 return null;
138 }
139 }
140
141 protected Matcher parameterPattern(String name) {
142 return Pattern.compile("[&]"+name+"=([^&]*)").matcher("&"+queryString);
143 }
144
145
146
147
148 @Override
149 public Map<String, List<String>> getParameters() {
150 Map<String, List<String>> parameters = new HashMap<>();
151 String[] params = queryString.split("&");
152
153 if (params.length == 1) {
154 return parameters;
155 }
156
157 for (String parameter:params) {
158 String[] param = parameter.split("=");
159 String name = param[0];
160 String value = param.length == 2 ? param[1] : "";
161
162 if (!parameters.containsKey(name)) {
163 parameters.put(name, new ArrayList<String>());
164 }
165
166 parameters.get(name).add(value);
167 }
168
169 return parameters;
170 }
171
172
173
174
175 @Override
176 public String getQueryString() {
177 return queryString;
178 }
179
180
181
182
183 @Override
184 public HttpMethod getMethod() {
185 return method;
186 }
187
188
189
190
191 @Override
192 public String getRequestPath() {
193 return requestedPath;
194 }
195
196
197
198
199 @Override
200 public String toString() {
201 StringBuilder sb = new StringBuilder();
202 sb.append("HTTP REQUEST METHOD: ").append(method).append('\n');
203 sb.append("VERSION: ").append(version).append('\n');
204 sb.append("PATH: ").append(requestedPath).append('\n');
205 sb.append("QUERY:").append(queryString).append('\n');
206
207 sb.append("--- HEADER --- \n");
208
209 for (Map.Entry<String, String> entry : headers.entrySet()) {
210 sb.append(entry.getKey()).append(':').append(entry.getValue()).append('\n');
211 }
212
213 sb.append("--- PARAMETERS --- \n");
214 Map<String, List<String>> parameters = getParameters();
215
216 for (Map.Entry<String, List<String>> entry : parameters.entrySet()) {
217 String key = entry.getKey();
218
219 for (String value : entry.getValue()) {
220 sb.append(key).append(':').append(value).append('\n');
221 }
222 }
223
224 return sb.toString();
225 }
226 }