http сервер implentation, страница не отображается должным образом - PullRequest
0 голосов
/ 01 января 2011

хорошо, так как я делаю небольшой проект по кодированию http-сервера. код на

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

текущая головоломка, когда ее просят проанализировать страницу с помощью java-скрипта и css. Как http-сервер он просто отправляет страницу (скопированную с другого сайта) и обрабатывает ее неправильно. Когда мой Firefox анализирует простую 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;z='+Math.random();varToplayerBigPath='pais/January2007/98one_toplayer.swf';varToplayerSmallPath='pais/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")?true:falsevarToplayerCookieName='NF999';varTopLayerCookieExpiredDays=1;varToplayerLink='http://xads.zedo.com/ads2/c?a=238663;g=0;c=455000000;i=0;x=7168;n=455;s=0;k=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/Ski/995ONE_TopLayer_550x360.swf';varToplayerSmallPath='NewFarm/Ski/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-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;if(ToplayerBigTop>0)topOff=resHeight-ToplayerBigHeight+ToplayerBigTop;varisMain=false;#divToplayerBig{position:absolute;right:20px;bottom: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: פאר: לאהייתימוכנהלראותאותהמחייכת ראשי חדשות if (getCookie ('pais999') == null) {varisToplayerDouble = "True"; isToplayerDouble = (isToplay'Play_Player_Player_Player_Player_Player9_Player_DB) =DW_Player_D_Direct_Date_Date_Date_Date_Date_D_W_D_W_W_W_W_C_W_T_W_P_W_T_W_T_W_C_E_S_W_R {0 {0) 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;z='+Math.random();varToplayerBigPath='pais/January2007/98one_toplayer.swf';varToplayerSmallPath='pais/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")?true:falsevarToplayerCookieName='NF999';varTopLayerCookieExpiredDays=1;varToplayerLink='http://xads.zedo.com/ads2/c?a=238663;g=0;c=455000000;i=0;x=7168;n=455;s=0;k=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/Ski/995ONE_TopLayer_550x360.swf';varToplayerSmallPath='NewFarm/Ski/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-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;if(ToplayerBigTop>0)topOff=resHeight-ToplayerBigHeight+ToplayerBigTop;varisMain=false;#divToplayerBig{position:absolute;right:20px;bottom:1px;}body>div#divToplayerBig{position:fixed;}div#divToplayerBig{right:auto;bottom:auto;left:expression((-20-divToplayerBig.offsetWidth+(document.documentElement.clientWidth?document.documentElement.clientWidth:document.body.clientWidth)+(ignoreMe2=document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft))+'px');top:expression((0-divToplayerBig.offsetHeight-topOff+(document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight)+(ignoreMe=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop))+'px');}#divToplayerSmall{position:absolute;right:20px;bottom:10px;}body>div#divToplayerSmall{position:fixed;}div#divToplayerSmall{right:auto;bottom:auto;left:expression((-20-divToplayerSmall.offsetWidth+(document.documentElement.clientWidth?document.documentElement.clientWidth:document.body.clientWidth)+(ignoreMe2=document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft))+'px');top:expression((0-divToplayerSmall.offsetHeight+(document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight)+(ignoreMe=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop))+'px');}varisTopTrans=(ToplayerBigPath.indexOf("transparent")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("transparent")>-1)?false:true;vartop1session=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/2007 17: 41

צניצחה
19/01/07 16: 45

יובנטוסמעוניינתבכריסטוףמצלדר, שדורש 2.5 מיליוןדולרלעונה
19/01/07 16: 37
* 36 19 19 19 19 19 ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג ג 1037 * 19/01/07 14: 32

מכביפ"תתארחמחרב -18: 30 אתהפועלכפ"סבאורווה, ללאג'ובניני
19/01/0 -14: 45 * 1 041 *
הגרלהקלהלהפועלירושליםבשמיניתהיול"ב: ונטספילסהלטבית
19/01/07 14: 37

ליגהלאומית: הפועלירושליםואחינצרתנפרדובתיקו 0: 0
19/01/07 13: 46 * тысяча сорок семь *


varswfPeleSmall = newSWFObject ("http://images.one.co.il/images/PeleEmulator/emulator_pelephone_01a.swf","peleSmall",160,470,"6","#FFFFFF");swfPeleSmall.addParam("quality","high");swfPeleSmall.addParam("wmode","transparent");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("wmode","transparent");swfPeleBig.write("divWithBig");


פאר:לאהייתימוכנהלראותאותהמחייכת
שחרפארסיפרהל-ONEמהעברבמוחהברגעיםשבהםכמעטהפסידהלטטיאנהגולובין.הישראלית,שניצחהלבסוף1:2,ידעהלמילהודות:"הקהלהיהנפלא"

DisplayFlash("W_S_round_border_pic.swf","156","201","1","style=position:absolute");שחרפארחוזרתמהקברמוליריבתה(רויטרס)



מאתשיאלון 19/01/20077: 26
שחרפאררשמההבוקר (שישי) אתאחדההישגיםהגדוליםשלהכשגברה 6: 3,5: ה צ צ 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 1054 * המשחק, שהיהאמורלהיערךלפנותבוקרבאוסטרליה, נדחהעקבהגשםופארשהפסידהבגללתנאימזגהאווירבעבר, השלימהקאמבקשכולואופי

אחרישהפסידהאתהמערכההראשונה, היהנראהשפארבדרךהבטוחההחוצה.לפתעפארהתעוררהוהצליחהלהשוותל -1:. 1 אתהמערכות.בשעההאחרונההיאניצלהפעמ ייםממאצ'פוינטכשנאבקהנואשותמולהצרפתייה.בסוףזההשתלםלה.

פארהבטיחהאתההעפלהלשלבשמיניתהגמר (16 הגדולות), שםתפגושבשבתבלילהאתסבטלנהקוזנצובההמדורגת 3 בטורניר, שגברההבוקרעלמריהקרילנקו.

פאראמרהל-

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

почему это происходит? что в середине ответа 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;
}

Ответы [ 3 ]

1 голос
/ 02 января 2011

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

response.setContentType ( 'UTF-8');

tResponse.append ("Тип содержимого: text / html; charset = utf-8 \ n");

1 голос
/ 01 января 2011

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

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

0 голосов
/ 01 января 2011

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

...