Closed ioseb closed 11 years ago
HttpResponse
შედგება
მაგალითები :
HTTP/1.1 200 OK
Content-Type: text/plain
Hello World
HTTP/1.1 302 Found
Location: http://www.iana.org/domains/example/
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Etag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: none
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8
კითხვები :
@ioseb ტესტების დაწერას ვცდილობ მარა არ გამომდის რაღაც არ მესმის ბოლომდე როგორ უნდა გაკეტდეს
შეგიძლია ტესტები გაგვიზიარო? რის მიღწევას ცდილობ ზუსტად?
Sent from my iPhone
On Mar 6, 2013, at 11:12 PM, Demur Nodia notifications@github.com wrote:
HttpResponse შედგება
სტატუსის სტრიქონისგან სტრიქონის სტრუქტურა : [HTTP ვერსია] [კოდი] 1 ან რამდენიმე ჰედერისგან ცარიელი ხაზისგან საჭიროების შემთხვვევაში მესიჯ ბოდისგან მაგალითები :
HTTP/1.1 200 OK Content-Type: text/plain
Hello World HTTP/1.1 302 Found Location: http://www.iana.org/domains/example/ HTTP/1.1 200 OK Date: Mon, 23 May 2005 22:38:34 GMT Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux) Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT Etag: "3f80f-1b6-3e1cb03b" Accept-Ranges: none Content-Length: 438 Connection: close Content-Type: text/html; charset=UTF-8 კითხვები :
იმპლემენტაციის კლასში უნდა მოწმდებოდეს რომ მიღებული პარამეტრები ვალიდურია და მხარდაჭერილია სერვერის მიერ იმპლემენტაციის კლასს უნდა შეეძლოს სტრიქონის დაბრუნება რომელსაც ექნება ზემოთ აღწერილი ფორმატი ? @ioseb ტესტების დაწერას ვცდილობ მარა არ გამომდის რაღაც არ მესმის ბოლომდე როგორ უნდა გაკეტდეს
— Reply to this email directly or view it on GitHub.
@demonno
იმპლემენტაციის კლასში უნდა მოწმდებოდეს რომ მიღებული პარამეტრები ვალიდურია და მხარდაჭერილია სერვერის მიერ
რომელ პარამეტრებზე ლაპარაკობ? თუ თავსართის სახელებზე ლაპარაკობ მაშინ მაგაზე ერთადერთი შეზღუდვა შეიძლება დაწესდეს - დასაშვები სიმბოლოები. უშუალოდ სახელი რომ აიღო ნებისმიერი ახალი ჰიდერი რომ მოიგონო სიტყვაზე: X-Demur-Nodia
ესეც კი დასაშვებია.
იმპლემენტაციის კლასს უნდა შეეძლოს სტრიქონის დაბრუნება რომელსაც ექნება ზემოთ აღწერილი ფორმატი ?
იმპლემენტაციის კლასმა რომ დააბრუნოს ეგ სტრიქონი რისთვის გამოვიყენებთ? ეგ ობიექტი ესაჭიროება იმას ვინც შექმნა ეგ ობიექტი(დისპეჩერი ჩვენს შემთხვევაში), რომ შემდეგ მოთხოვნა/პასუხის ციკლის დასრულების შემდეგ გამოაძროს ეგ ინფორმაცია და დააგენერიროს(ან სხვას, გენერატორს დააგენერირებინოს) ეგ სტრიქონი.
@ioseb ინფორმაციის გამოძრობა გეთერებით მოხდება.
სტატუს კოდი 1 ზე მეტი ხო ვერ იქნება ერთ რესფონსში ?
setStatus(HttpStatus.Code.OK);
error(HttpStatus.Code.NOT_FOUND);
ესეთი რამე რო ცადოს ვინმემ მე რავქნა ექსეფშენი ვისროლო? სხვანაირად როგორ გავაგებინო რო არ შეიძლება
@demonno
error(...)
მეთოდის გამოძახების შემთხვევაში მომენტალურად უნდა მოხდეს პასუხის დამუშავების შეწყვეტა და კლიენტისთვის შესაბამისი HTTP
პასუხის დაბრუნება. აქ იგულისხმება HttpResponse
ობიექტის მიმდინარე მდგომარეობის სრული იგნორირება, ანუ რადგან შეცდომაა უბრალოდ ვაბრუნებთ სიტყვაზე:
HTTP/1.1 400 Bad Request
Content-Type: text/plain
Content-Length: ...
Something wrong happened!
ცხადია სტატუსის კოდი და შეტყობინება შეცდომის კოდიდან გამომდინარეა.
@ioseb
უნდა მოხდეს პასუხის დამუშავების მომენტალური შეწყვეტა
როგორ გავაკეთო ეგ ?
HttpResponseWrapper
ს მხოლოდ ინფორმაციის მატარებელია რომელსაც შემდეგ დისპეჩერი
გამოიყენებს და დააბრუნებს ან დააბრუნებინებს ვინმეს კლიენტთან http
პასუხს (error)ს
ესე მოხდებოდა მეგონა
@demonno რამდენიმე ვარიანტია
private boolean error
ცვლადი რომელიც გახდება true
იმ შემთხვევაში თუ ვინმე გამოიძახებს error(...)
მეთოდს;throw new IllegalStateException()
ან შეიძლება მეორე გზით წავიდეთ:
HttpResponseWrapper
კლასის ობიექტს გავუკეთოთ ხდომილების მხარდაჭერა;response.setErrorHandler(new MyErrorHandler())
error(...)
მეთოდის გამოძახების შემთხვევაში გამოვიწვიოთ შეცდომის ხდომილება და შევასრულოთ ჩვენი ერორ ჰენდლერის რომელიმე წინასწარ განსაზღვრული მეთოდი რომელიც მოაგვარებს იმ საკითხებს რასაც შენ კითხულობ.დაახლოვებით ასეთი რამე რომ წარმოიდგინო:
interface HttpResponseErrorHandler {
public void handle(HttpStatus.Code statusCode, HttpResponse response);
}
public class HttpResponseWrapper {
private HttpResponseErrorHandler errorHandler;
public void setErrorHandler(HttpResponseErrorHandler errorHandler) {
this.errorHandler = errorHandler;
}
public void error(HttpStatus.Code statusCode) {
errorHandler.handle(HttpStatus.Code statusCode, this);
}
}
P.S. მიხარია ლოგიკური შეკითხვები რომ გებადება!!
მაგალითად ამ მეორე მიდგმოით უამრავ რამეს მივაღწევთ:
რას იტყვი?
და ამ თემის მცირე განვრცობა:
public class HttpRequestDispatcher implements HttpResponseErrorHandler {
@Override
public void handle(Code statusCode, HttpResponse response) {
// do some actual redirecting code here
}
public void dispatch() {
HttpResponseWrapper response = new HttpResponseWrapper();
response.setErrorHandler(this);
}
}
thoughts?
აა მგონი მივხვდი , მარა კიდე გავიაზრებ , იმპლემენტაციას გავაკეთებ თან
ოკეი, ეთამაშე პროექტს მიღმა. ეს რაც დაგიწერე ადვილად ამუშავებადია სათამაშო მიზნებისთვის რომ გაერკვევი კარგად მერე შემოვზიდოთ ნელნელა შიგნით და შეკითხვები რაც გექნება გავიაროთ უფრო მეტ დეტალებში.
@ioseb ანუ მე როგორც გავიგე HttpResponseWrapper
კლასს ეყოლება ორი დამხმარე Dispatcher და Error Handler interface სადაც HttpResponseWrapper
აკეთებს ყველა იმ მეთოდის იმპლემენტაციას რომელიც HttpResponse
ინტერფეისშია აღწერილი. error მეთოდის შესასრულებლად ვიყენებთ
interface HttpResponseErrorHandler { public void handle(HttpStatus.Code statusCode, HttpResponse response); }
რომლის handle
მეთოდსაც override - ს უკეთებს HttpRequestDispatcher
რომელიც თავის მხრივ dispatch - მეთოდით ქმნის HttpResponseWrapper
ტიპის ობიექტს და ამავე კლასის response.setErrorHandler(this);
მეთოდის გამოყენებით აბრუნებს დამუშავებულ შეცდომას.
სწორად გავიგე? :yum:
კითხვა: public void error(HttpStatus.Code errorStatus, String body);
ამ მეთოდისთვის იგივე სვლები უნდა გავაკეთოთ :question: (იმედია მნიშვნელოვანი არ გამომრჩა რამე)
@revazi
კითხვა: public void error(HttpStatus.Code errorStatus, String body); ამ მეთოდისთვის იგივე სვლები უნდა გავაკეთოთ (იმედია მნიშვნელოვანი არ გამომრჩა რამე)
აბსოლუტურად
@demonno არის რამე პროგრესი?
@ioseb error handler
ები გავაკეთე , და HTTP
პასუხებიც უნდა გავამზადო ამ თასქის ფარგლებში ?
@demonno თუ ამ კლასებს HttpResponse
და HttpResponseWrapper
თუ გულისხმობ, კი უნდა გააკეთო.
@ioseb
HTTP
პასუხების გამზადებაში ვგულისხმობ ამ სტრიქონების გამზადებას..
HTTP/1.1 400 Bad Request
Content-Type: text/plain
Content-Length: ...
Something wrong happened!
როგორც ზემოთ კომენტარში მომწერე ეს დავალება შეიძლება დაეკისროს დისპაჩერს
დააგენერიროს(ან სხვას, გენერატორს დააგენერირებინოს) ეგ სტრიქონი.
HttpResponseWrapper
გაამზადებს
map
ს ამ ყველაფერს სხვა კლასი მოითხოვს და საბოლოო პასუხს დააგენერირებს ...
@demonno საწყისი იმპლემენტაცია არ იქნება ურიგო!
აა პანიკაშივარ :boom:
წავედი ლექციაზე
@demonno პანიკაში რის გამო ხარ?
@ioseb დავწყნარდი უკვე, არ გამომდიოდა და ვერც ვხვდებოდი რატო, ეხლა რაღაც სახე მივეცი სახლში რო მივალ პირველ ვერსიას დავაკომიტებ თქვენის ნებართვით ..
ველოდებით!
@ioseb ვითხოვ ნებართვას HttpResponse
ინტერფეისში შემდეგი მეთოდების ჩამატებაზე
public HttpStatus.Code getStatusCode();
public Map<String, String> getHeaders();
public String getMessageBody();
აღარ მინდა ბოდიში ...
ოკ :D
On Friday, March 8, 2013 at 11:39 PM, Demur Nodia wrote:
აღარ მინდა ბოდიში ...
— Reply to this email directly or view it on GitHub (https://github.com/reflooding/serv-cst/issues/15#issuecomment-14640017).
@demonno არ არის პრობლემა თუ ჩამატებაა საჭირო უნდა ჩაამატო.
კაი ვამატებ :D
@ioseb
write(String content);
ზე გადავედი,
LinkedList
აქ იდეაში html ი შეიძლება გადაეცეს რომელსაც მერე ბრაუზერი წაიკითხავს და ჩატვირთავს ..
@demonno და StringBuilder
რომ გააკეთო არა? http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html და კერძოდ ეს მეთოდი:
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#append(java.lang.CharSequence)
Java - ში String
ტიპი ასევე არის CharSequence
რადგან მისი მემკვიდრეა.
კი როგორარა :)
fush();
ზე რა უნდა გავაკეთო ,
ფაილი ხო არ მაქ სადმე და ამ ფაილში ხო არ ვწერ ....
ჯერ არაფერი არ გააკეთო flush() - ზე. სერვერის ნაწილს რომ გავაკეთებთ მაგას სოკეტიდან OutputStream - ს გადავცემთ გარედან და იმაში ჩაიწერება.
On Saturday, March 9, 2013 at 1:15 AM, Demur Nodia wrote:
კი როგორარა :) fush(); ზე რა უნდა გავაკეთო , ფაილი ხო არ მაქ სადმე და ამ ფაილში ხო არ ვწერ ....
— Reply to this email directly or view it on GitHub (https://github.com/reflooding/serv-cst/issues/15#issuecomment-14645884).
ოკ , ტესტებს ჩავამატებ და დავაკომიტებ
ოკ, მომწონს ტესტები რომ არ გავიწყდება.
HttpResponseWrapper
კლასის იმპლემენტაცია შემდეგ ინტერფეისზე დაყრდნობით: