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 }