otarza / serv-cst

CST web III porject
6 stars 0 forks source link

config.properties - დამატებით კონფიგურაციის პარამეტრები #24

Closed ioseb closed 11 years ago

ioseb commented 11 years ago

config.properties ფაილში დაამატე შემდეგი კონფიგურაციის პარამეტრი:

directory.allowListing = true პარამეტრის შესაძლო მნიშვნელობები true და false. გამოიყენება იმის მისათითებლად ვუჩვენოთ თუ არა მომთხოვნს დირექტორიაში შემავალი ფაილების ჩამონათვალი.

directory.defaultFiles = index.html, index.htm ე.წ. welcome ფაილების მისათითებლად. მაგალითად თუ მოთხოვნილი რესურსი არის დირექტორია და დირექტორია შეიცავს ჩამოთვლილი ფაილებიდან ერთერთს მაშინ მოთხოვნას ვამისამართებთ მაგ ფაილზე.

დამატებითი შენიშვნები ServerConfig კლასთან დაკავშირებით:

private String supportedMethods;
private String supportedMimeTypes;
private String supportedHttpVersion;

არაფერში არ არის ეს ობიექტის ცვლადები, მეთოდის ლოკალურ ცვლადებად გადააკეთე ან გადააგდე როგორც ქვემოთ მაქვს ნაჩვენები.

კოდის ეს ნაწილი ამაზრზენია. რამდენი ეგეთი ჩამონათვალის ტიპის პარამეტრები დაემატება იმდენი copy/paste არაფერს გვარგებს.

String[] methodTokens = supportedMethods.split("\\s*,\\s*");
methods = new HashSet<String>();
Collections.addAll(methods, methodTokens);

String[] mimeTokens = supportedMimeTypes.split("\\s*,\\s*");
mimes = new HashSet<String>();
Collections.addAll(mimes, mimeTokens);

String[] httpTokens = supportedHttpVersion.split("\\s*,\\s*");
https = new HashSet<String>();
Collections.addAll(https, httpTokens);

ასე გადააკეთე:

private void init() {
    this.methods = commaSeparatedStringToSet(properties.getProperty("http.methods"));
    // do same thing with other list properties.
}

private HashSet<String> commaSeparatedStringToSet(String input) {
    String[] tokens = input.split("\\s*,\\s*");
    HashSet<String> result = new HashSet<String>();
    Collections.addAll(result, tokens);
    return result;
}
ioseb commented 11 years ago

@demonno @revazi @vaxop @reflooding ზოგადად, საკუთარ ნამუშევართან უკან მიბრუნებას და გადახედვას თუ ისწავლით კარგი იქნება. მასე არ ხდება ერთხელ დაწერ, ტესკს დახურავ და ჩათვალო რომ საქმე იდეალურად არის.

demonno commented 11 years ago

გუშინ როგორ დამძინა, გამიტყდა დილით რო გავიღვიძე:((

ioseb commented 11 years ago

ხდება ხოლმე... მთავარია საქმე წავწიოთ წინ. პირველი მაილსტოუნი ზეგ ღამე მთავრდება და ჯერ კიდევ ბევრი საქმე გვაქვს დარჩენილი.

demonno commented 11 years ago

@ioseb დავუშვათ კონფიგურაციის ფაილში შეცდომა დაუშვა და directory.allowListing = true ს მაგივრად დაწერა ture ან რამე სხვა , მოკლედ სინტაქსური შეცდომა დაუშვა .

ამის შესახებ არ უნდა ვაცნობოთ შეცდომის დამშვებს ?

ioseb commented 11 years ago

@demonno ცალსახად false უნდა იყოს მასეთ შემთხვევაში. ეს წაიკითხე(თ) რომ ისწავლო სტრიქონი როგორ გარდაქმნა ბულის მნიშვნელობად: http://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html#getBoolean(java.lang.String)

demonno commented 11 years ago

@ioseb :ოკ:

მარა

System.out.println(Boolean.getBoolean("true")); // რატომ გადაყავს false ში ვერ გავიგე 
System.out.println(Boolean.getBoolean(System.getProperty("true"))); // ესეც ვცადე

`false`` დაბრუნდება მხოლოდ

If there is no property with the specified name, or if the specified name is empty or null, then false is returned

ხელით ჩავუწერე true არც ცარიელია არც null მაინც false ში გადაყავს

ioseb commented 11 years ago

დემურ, მე მომიტევეთ შემეშალა: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Boolean.html#valueOf(java.lang.String)

On Friday, March 8, 2013 at 4:00 PM, Demur Nodia wrote:

Boolean.getBoolean("true")

ioseb commented 11 years ago

@demonno

ტესტის კოდში შევიხედე და ეს არ არის საკმარისი:

@Test
    public void testWellcomeFile(){
        Assert.assertTrue(config.isWelcomeFile("index.html"));
        Assert.assertTrue(config.isWelcomeFile("index.htm"));
    }

ასევე დაამატე: public void testIsNotWelcomeFile() სიმეტრიული რომ იყოს პოზიტიური და ნეგატიური ტესტები. იქნება და ბაგი გაქვს და შენი მეთოდი ყველაფერზე უბრალოდ true - ს აბრუნებს? ამიტომ assertFalse საჭიროა საპირისპიროს გადასამოწმებულად.

demonno commented 11 years ago

:o: :key:

@ioseb კიდევ ერთი რამ #15 დავალებაში დამჭირდა მაგალითად

getSupportedHttpVersion(); // რომელიც კონფიგ ფაილიდან წაიკიტხავს და დააბრუნებს : HTTP/1.1

getSupportedMimeTypes(); // დააბრუნებს ტიპების სეტს 

ServerConfig.java აქ რომ ჩავამატო ეს მეთოდები წინააღმდეგი ხო არხარ ?

ioseb commented 11 years ago

@demonno არ არის პრობლემა: