Mercurial Hosting > luan
comparison src/luan/webserver/Response.java @ 1146:2dda3c92a473
webserver - implement cookies
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 01 Feb 2018 03:08:21 -0700 |
parents | c123ee15f99b |
children | 49fb4e83484f |
comparison
equal
deleted
inserted
replaced
1145:12ececf30597 | 1146:2dda3c92a473 |
---|---|
2 | 2 |
3 import java.io.InputStream; | 3 import java.io.InputStream; |
4 import java.util.Map; | 4 import java.util.Map; |
5 import java.util.LinkedHashMap; | 5 import java.util.LinkedHashMap; |
6 import java.util.Collections; | 6 import java.util.Collections; |
7 import java.util.List; | |
7 | 8 |
8 | 9 |
9 public class Response { | 10 public class Response { |
10 public final String protocol = "HTTP/1.1"; | 11 public final String protocol = "HTTP/1.1"; |
11 public volatile Status status = Status.OK; | 12 public volatile Status status = Status.OK; |
12 public final Map<String,String> headers = Collections.synchronizedMap(new LinkedHashMap<String,String>()); | 13 public final Map<String,Object> headers = Collections.synchronizedMap(new LinkedHashMap<String,Object>()); |
13 { | 14 { |
14 headers.put("Server","ThreeBody"); | 15 headers.put("Server","ThreeBody"); |
15 } | 16 } |
16 public volatile Body body; | 17 public volatile Body body; |
17 | 18 |
24 this.content = content; | 25 this.content = content; |
25 } | 26 } |
26 } | 27 } |
27 | 28 |
28 | 29 |
30 public void addHeader(String name,String value) { | |
31 Util.add(headers,name,value); | |
32 } | |
33 | |
34 public void setCookie(String name,String value,Map<String,String> attributes) { | |
35 StringBuilder buf = new StringBuilder(); | |
36 buf.append( Util.urlEncode(name) ); | |
37 buf.append( '=' ); | |
38 buf.append( Util.urlEncode(value) ); | |
39 for( Map.Entry<String,String> entry : attributes.entrySet() ) { | |
40 buf.append( "; " ); | |
41 buf.append( entry.getKey() ); | |
42 buf.append( '=' ); | |
43 buf.append( entry.getValue() ); | |
44 } | |
45 addHeader( "Set-Cookie", buf.toString() ); | |
46 } | |
47 | |
48 | |
29 public String toHeaderString() { | 49 public String toHeaderString() { |
30 StringBuilder sb = new StringBuilder(); | 50 StringBuilder sb = new StringBuilder(); |
31 sb.append( protocol ) | 51 sb.append( protocol ) |
32 .append( ' ' ).append( status.code ) | 52 .append( ' ' ).append( status.code ) |
33 .append( ' ' ).append( status.reason ) | 53 .append( ' ' ).append( status.reason ) |
34 .append( "\r\n" ) | 54 .append( "\r\n" ) |
35 ; | 55 ; |
36 for( Map.Entry<String,String> entry : headers.entrySet() ) { | 56 for( Map.Entry<String,Object> entry : headers.entrySet() ) { |
37 String name = entry.getKey(); | 57 String name = entry.getKey(); |
38 String value = entry.getValue(); | 58 Object value = entry.getValue(); |
39 sb.append( name ).append( ": " ).append( value ).append( "\r\n" ); | 59 if( value instanceof List ) { |
60 for( Object v : (List)value ) { | |
61 sb.append( name ).append( ": " ).append( v ).append( "\r\n" ); | |
62 } | |
63 } else { | |
64 sb.append( name ).append( ": " ).append( value ).append( "\r\n" ); | |
65 } | |
40 } | 66 } |
41 sb.append( "\r\n" ); | 67 sb.append( "\r\n" ); |
42 return sb.toString(); | 68 return sb.toString(); |
43 } | 69 } |
44 } | 70 } |