2011-01-01 4 views
0

ну, так как я делаю небольшой проект кодирования http-сервера. код наhttp server implentation, страница не отображается должным образом

http://code.google.com/p/reactor/

тока головоломка, когда их просят разобрать страницу с Java Script и CSS. В качестве http-сервера он просто отправляет страницу (скопированную с другого сайта), и она анализируется inproperly. когда простой HTML страницы был разбор, мой светлячок, он показывает ок, однако при разборе более сложной страницы (CSS + JavaScript) страница все проводной так:

ראשי חדשות если (getCookie ('pais999') == NULL) {varisToplayerDouble = "True"; isToplayerDouble = (isToplayerDouble == "True") верно: falsevarToplayerCookieName = 'pais999'; varTopLayerCookieExpiredDays = 1; varToplayerLink = "HTTP: //xads.zedo.com /ads2/c?a=239671;g=0;c=455000000;i=0;x=7168;n=455;s=0;k=http://www.pais.co.il/Pais/Games /Lotto/';varToplayerImpression='http://l4.zedo.com/log/p.gif?a=239671;c=455000000;x=7168;n=455;e=i;i=0;s= 0; г = '+ Math.random(); varToplayerBigPath =' Паиш/January2007/98one_toplayer.swf '; varToplayerSmallPath =' Паиш/January2007/98one_reminder.swf '; varToplayerBigWidth = 1005; varToplayerBigHeight = 500; varToplayerSmallWid е = 100; varToplayerSmallHeight = 100; varToplayerBigLeft = (0 == 0) resWidth/2-ToplayerBigWidth/2: resWidth/2-ToplayerBigWidth/2 + 0varToplayerBigTop = 0; varToplayerSmallLeft = resWidth-ToplayerSmallWidth-0; varToplayerSmallTop = 0; varSecondsToChangeBigToSmall ? = 15;} ElseIf (getCookie ('NF999') == NULL) {varisToplayerDouble = "True"; isToplayerDouble = (isToplayerDouble == "True") верно: falsevarToplayerCookieName = 'NF999'; varTopLayerCookieExpiredDays = 1; varToplayerLink = 'HTTP : //xads.zedo.com/ads2/c а = 238663; г = 0; с = 455000000; = 0; х = 7168; п = 455; s = 0; к = HTTP: //www.new -pharm.co.il/SkiGame/?ToolID=OLJD8O';varToplayerImpression='http://l4.zedo.com/log/p.gif?a=238663;c=455000000;x=7168;n=455; е = я; г = 0; s = 0; г = '+ Math.random(); varToplayerBigPath =' NewFarm/лыжи/995ONE_TopLayer_550x360.swf '; varToplayerSmallPath =' NewFarm/лыжи/995ONE_Reminder_100x100.swf '; varToplayerBigWidth = 550; varToplayerBigHeight = 360; varToplayerSmallWidth = 100; varToplayerSmallHeight = 100; varToplayerBigLeft = (0 == 0) resWidth/2-ToplayerBigWidth/2: resWidth/2-ToplayerBigWidth/2 + 0varTo? playerBigTop = 0; varToplayerSmallLeft = resWidth-ToplayerSmallWidth-0; varToplayerSmallTop = 0; varSecondsToChangeBigToSmall = 15;} ElseIf (1 == 0) {} $ ("divToplayerBig") style.width = ToplayerBigWidth;. $ ("divToplayerBig"). style.height = ToplayerBigHeight; $ ("divToplayerBig") style.left = resWidth/2-ToplayerBigWidth/2;. $ ("divToplayerSmall") style.width = ToplayerSmallWidth;.. $ ("divToplayerSmall") style.height = ToplayerSmallHeight ; $ ("divToplayerSmall") style.right = ToplayerSmallWidthvartopOff = 0; если (ToplayerBigTop> 0) topOff = resHeight-ToplayerBigHeight + ToplayerBigTop; varisMain = FALSE; #divToplayerBig. {положение: абсолютный, справа: 20px; внизу: 1px;} body> div # divToplayerBig {position: fixed;} # divToplayerSmall {position: absolute; right: 20px; bottom: 10px;} body> div # divToplayerSmall {position: fixed;} ראשי | תוצאות LIVE | הימוריספורט | ONE בסלולרי | ONETV | גליצ «ים | BigOne | טוטוווינר | CrazyONE |

, где исходный код HTML является:

ONE: פאר: לאהייתימוכנהלראותאותהמחייכת   ראשי     חדשות   если (getCookie ('pais999') == NULL) {varisToplayerDouble = "True" ; isToplayerDouble = (isToplayerDouble == "True",) верно: falsevarToplayerCookieName = 'pais999'; varTopLayerCookieExpiredDays = 1; varToplayerLink = 'HTTP:? //xads.zedo.com/ads2/c а = 239671; г = 0; C = 455000000; = 0; х = 7168; п = 455; s = 0; к = HTTP: //www.pais.co.il/Pais/Games/Lotto/ '; varToplayerImpression =' HTTP: // l4. zedo.com/log/p.gif?a=239671;c=455000000;x=7168;n=455;e=i;i=0;s=0 ; Г = '+ Math.random(); varToplayerBigPath =' Паиш/January2007/98one_toplayer.swf '; varToplayerSmallPath =' Паиш/January2007/98one_reminder.swf '; varToplayerBigWidth = 1005; varToplayerBigHeight = 500; varToplayerSmallWidth = 100; varToplayerSmallHeight = 100 ; varToplayerBigLeft = (0 == 0)?resWidth/2-ToplayerBigWidth/2: resWidth/2-ToplayerBigWidth/2 + 0varToplayerBigTop = 0; varToplayerSmallLeft = resWidth-ToplayerSmallWidth-0; varToplayerSmallTop = 0; varSecondsToChangeBigToSmall = 15;} ElseIf (getCookie ('NF999') == NULL) { varisToplayerDouble = "True"; isToplayerDouble = (isToplayerDouble == "True") верно: falsevarToplayerCookieName = 'NF999'; varTopLayerCookieExpiredDays = 1; varToplayerLink = "HTTP: //xads.zedo.com/ads2/c а = 238663; г = 0; с = +455000000; = 0; х = 7168; п = 455; s = 0; к = HTTP: //www.new-pharm.co.il/SkiGame/ Toolid = OLJD8O '; varToplayerImpression = «http://l4.zedo.com/log/p.gif?a=238663;c=455000000;x=7168;n=455;e=i;i=0;s=0;z='+Math .random(); varToplayerBigPath = 'NewFarm/лыжи/995ONE_TopLayer_550x360.swf'; varToplayerSmallPath = 'NewFarm/лыжи/995ONE_Reminder_100x100.swf'; varToplayerBigWidth = 550; varToplayerBigHeight = 360; varToplayerSmallWidth = 100; varToplayerSmallHeight = 100; varToplayerBigLeft = (0 = ? = 0) resWidth/2-ToplayerBigWidth/2: resWidth/2-ToplayerBigWidth/2 + 0varToplayerBigTop = 0; varToplayerSmallLeft = resWidth-ToplayerSmallWi DTH-0; varToplayerSmallTop = 0; varSecondsToChangeBigToSmall = 15;.} ElseIf (1 == 0) {} $ ("divToplayerBig") style.width = ToplayerBigWidth; $ ("divToplayerBig") style.height = ToplayerBigHeight;. $ ("divToplayerBig") style.left = resWidth/2-ToplayerBigWidth/2;. $ ("divToplayerSmall") style.width = ToplayerSmallWidth;. $ ("divToplayerSmall") style.height = ToplayerSmallHeight;. $ ("divToplayerSmall"). style.right = ToplayerSmallWidthvartopOff = 0; если (ToplayerBigTop> 0) topOff = resHeight-ToplayerBigHeight + ToplayerBigTop; varisMain = ложь; #divToplayerBig {позицию: абсолютная; справа: 20px; нижний: 1px;} тела> DIV # divToplayerBig {положение: фиксировано;} DIV # divToplayerBig {право: авто; снизу: автоматический; слева: выражение ((- 20-divToplayerBig.offsetWidth + (document.documentElement.clientWidth document.documentElement.clientWidth: document.body.clientWidth) + (ignoreMe2 = документ? ? .documentElement.scrollLeft document.documentElement.scrollLeft: document.body.scrollLeft)) + 'точек'); сверху: выражение ((0-divToplayerBig.offsetHeight-topOff + (document.documentElement.clientHeight документ. documentElement.clientHeight: document.body.clientHeight) + (ignoreMe = document.documentElement.scrollTop document.documentElement.scrollTop: document.body.scrollTop)) + 'точек');} # divToplayerSmall {позицию: абсолютная; справа: 20px ; внизу: 10px;} тела> DIV # divToplayerSmall {позиция: фиксированная;} DIV # divToplayerSmall {право: авто; внизу: авто; слева: выражение ((- 20-divToplayerSmall.offsetWidth + (document.documentElement.clientWidth document.documentElement .clientWidth: document.body.clientWidth) + (ignoreMe2 = document.documentElement.scrollLeft document.documentElement.scrollLeft: document.body.scrollLeft)) + 'точек'); сверху: выражение ((0-divToplayerSmall.offsetHeight + (документ ? .documentElement.clientHeight document.documentElement.clientHeight: document.body.clientHeight) + (ignoreMe = document.documentElement.scrollTop document.documentElement.scrollTop: document.body.scrollTop)) + 'ПВ');} varisTopTrans = (ToplayerBigPath.indexOf ("прозрачный")> - 1) ложно: истинно; varisRemTrans = (ToplayerSmallPath.indexOf ("прозрачный")> - 1) ложно: истинно; vartop1ses sion = 3; vartop2session = 5; InitToplayer (isTopTrans, isRemTrans); window.onload = StartToplayer; ראשי | תוצאות LIVE | הימוריספורט | ONE בסלולרי | ONETV   | גליצ'ים | BigONE | טוטוווינר |     CrazyONE   |

כותרותאחרונותצפובמייקללואיסמנצחבתחרותההטבעותבגמרהתיכונים
19/01/07     19:30

אליכהןלשחקניולקראתבני-יהודה: תיראומהאסוליןעשהלמכביחיפה
19/01/07     18:43

ליגתהעלבכדורסל: המשחקיםחוזריםליוםראשון
19/01/07     17:41

דעה: שחרפארכבריכולהלהתמודדעםשחקניותצמרת
19/01/07     16:49
ארצית: הפועלר"גניצחהאתהשקמה/רמתחן 1: 2, גםראשל"צניצחה
19/01/07     16:45

יובנטוסמעוניינתבכריסטוףמצלדר, שדורש 2.5 Miliondolrlaonh
01/19/07     16:37

Ligthal: Бит "riroslimttarhmhrb -19: 30 Atzlmcbihrtzlih
01/19/07     14:32

Mcbif" ttarhmhrb -18: 30 Athfoalcf "sbaorooh, Llag'obnini
1/19/07     14:45

Hgrlhklhlhfoaliroslimbsminithiol "б: и Ntsfilshltbit
01/19/07     14:37

Lighlaomit: Hfoaliroslimoahintzrtnf Rdobtiko 0: 0
19/01/07     13:46



varswfPeleSmall = newSWFObject ("http://images.one.co.il/images/PeleEmulator/emulator_pelephone_01a.swf", "peleSmall", 160470, "6", "# FFFFFF"); swfPeleSmall.addParam ("качество", "высокий"); swfPeleSmall.addParam ("Режим окна", "прозрачный"); swfPeleSmall.write ("divPeleSmall"); varswfPeleBig = newSWFObject (" Http://images.one.co.il/images/PeleEmulator/emulator_pelephone_02d.swf","peleBig",400,470,"6","#FFFFFF");swfPeleBig.addParam("quality","high «); swfPeleBig.addParam ("Режим окна", "прозрачный"); swfPeleBig.write ("divWithBig");


слава: Lahiitimocnhlraotaothmhiict
Shrfarsifrhl- ОДИН Mhabrbmohhbrgaimsbhmcmathfsidhlttianhgolobin.hisralit, Snitzhhlbsof 1: 2, Idahlmilhodot: "Hkhlhihnfla"

DisplayFlash ("W_S_round_border_pic.swf", "156", "201", "1", «стиль = положение: абсолютное «); Shrfarhozrtmhkbrmoliribth (Reuters)



Matsialon                                                     19/01/20077: 26
Shrfarrsmhhbokr (пятница) Atahdhhisgimhgdolimslhcsgbrh 6: 3,5: 7 и 5: 7 Alttianhgolobinhtzrftiih, занимает 23 в мире.

игра, Shihamorlhiarclfnotbokrbaostrlih, Ndhhakbhgsmofarshfsidhbglltnaimzghaooirbabr, Hslimhkambkscoloaofi.

Ahrishfsidhathmarchhrasonh, Hihnrahsfarbdrchbtohhhhotzh.lftafarhtaorrhohtzlihhlhsootl -1: 1 Athmarcot.bsahhahronhhianitzlhfamiimmmatz'fointcsnabkhnoasotmolhtzrftiih.bsofzhhstlmlh.

Farhbtihhathhaflhlslbsminithgmr (шестнадцатого по величине), Smtfgosbsbtblilhatsbtlnhkozntzobhhmdorgt 3 турнира, Sgbrhhbokralmrihkrilnko.

Faramrhl-

(только часть презентации страницы в Firefox и исходный код страницы HTML)

почему это происходит? что midding в ответ HTTP?

StringBuffer tResponse = new StringBuffer(); 
     tResponse.append("HTTP/1.1 200 OK\n"); 
    tResponse.append("Date: "+new Date().toString() +'\n'); 
    tResponse.append("server: http-reactor/0.1-dev\n"); 
    tResponse.append("last-Modified:"+ d.toString() +'\n'); 
    tResponse.append("Content-Type: text/html; charset=windows-1255\n"); 
    tResponse.append("Accept-Language: he; q=1.0, en; q=0.5:); 
    tResponse.append("Content-Length: "+tFileContent.length()+'\n'); 
    tResponse.append('\n'); 
    tResponse.append(tFileContent); 

    public StringBuffer FetchData(String FileName) throws FileNotFoundException{ 
    StringBuffer tFileContent = new StringBuffer(); 
    if (FileName.contains("../")) 
     throw new SecurityException(); 
    if (FileName.equals("/")) 
     FileName = "\\index.html"; 
    FileName.replace('/', '\\'); 
    File f = new File(_root + FileName); 
    Scanner scanner = new Scanner(f); 
    while(scanner.hasNext()) 
     tFileContent.append(scanner.next()); 
    return generateResponse(tFileContent,f.lastModified()); 
} 

private StringBuffer generateResponse(StringBuffer tFileContent, long l) { 
    StringBuffer tResponse = new StringBuffer(); 
    Date d = new Date(l); 
    tResponse.append("HTTP/1.1 200 OK\n"); 
    tResponse.append("Date: "+new Date().toString() +'\n'); 
    tResponse.append("server: http-reactor/0.1-dev\n"); 
    tResponse.append("last-Modified:"+ d.toString() +'\n'); 
    tResponse.append("Content-Type: text/html; charset=windows-1255\n"); 
    tResponse.append("Accept-Language: he; q=1.0, en; q=0.5:); 
    tResponse.append("Content-Length: "+tFileContent.length()+'\n'); 
    tResponse.append('\n'); 
    tResponse.append(tFileContent); 
    return tResponse; 
} 
+1

Вы, кажется, используете форматирование «цитата» вместо форматирования «кода», что для вашего примера не так велико, но опять же, ваши примеры слишком велики. Попробуйте найти минимальный случай, который показывает проблему, с которой вы сталкиваетесь. Вы говорите, что это связано с смешиванием JS и CSS в вашем HTML, поэтому сделайте * короткую * HTML-страницу, на которой есть строка или около того. Кроме того, есть хорошая вероятность, что ваша проблема связана с настройкой 'tFileContent', но вы не указали нам ни одного из кода, который ее устанавливает, или даже того, что его тип. –

+0

Есть ссылка на источник управления – none

ответ

1

Почему вы должны проверить файл первым. Просто откройте входной поток в правильное кодирование (Windows-1255 в вашем примере) и стекают содержимое.

BTW. Если вы пишете сервер HTTP, вы должны знать, что вы не иметь дело со строками. Так StringBuffer не хороший выбор в любом случае

+0

recomandation для альтернативных обработчиков потоков? – none

+0

Что вы подразумеваете под альтернативным обработчиком потока. Я предполагаю, что вы хотите передать содержимое файла. Откройте FileInputStream и скопируйте каждый отдельный байт в OutputStream – mtraut

0

Может быть вам нужно правильно установить заголовок типа содержимого? Кроме того, StringBuffer даст вам неприятности при загрузке изображений.

1

Попробуйте настроить тип содержимого ответа на UTF-8 на странице jsp и метатеги содержимого.

response.setContentType ('utf-8');

tResponse.append («Content-Type: text/html; charset = utf-8 \ n»);

 Смежные вопросы

  • Нет связанных вопросов^_^