0

好吧,因为我正在做一个编码 http 服务器的小项目。代码在

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

当前的难题是当被要求用 java 脚本和 css 解析页面时。作为一个 http 服务器,它只发送一个页面(从另一个网站复制)并且解析不正确。当一个简单的html页面被我的firefox解析时,它显示正常,但是当解析一个更复杂的页面(css + javascript)时,页面都是这样连接的:

bottom:10px;}body>div#divToplayerSmall{position:fixed;}ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE |

html的源代码是:

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("透明")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("透明")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer(isTopTrans,isRemTrans) ;window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE | 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 | 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 | offsetHeight+(document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight)+(ignoreMe=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop))+'px');} varisTopTrans=(ToplayerBigPath.indexOf("透明")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("透明")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer( isTopTrans,isRemTrans);window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE | offsetHeight+(document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight)+(ignoreMe=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop))+'px');} varisTopTrans=(ToplayerBigPath.indexOf("透明")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("透明")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer( isTopTrans,isRemTrans);window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE | indexOf("透明")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("透明")>-1)?false:true;vartop1session=3;vartop2session=5;InitToplayer(isTopTrans,isRemTrans); window.onload=StartToplayer;ראשי|תוצאותLIVE|הימוריספורט|ONEבסלולרי|ONETV |גליצ'ים|BigONE|טוטוווינר| CrazyONE | indexOf("透明")>-1)?false:true;varisRemTrans=(ToplayerSmallPath.indexOf("透明")>-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/07 17:41

דעה:שחרפארכבריכולהלהתמודדעםשחקניותצמרת
19/01/07 16:49

ארצית:הפועלר"גניצחהאתהשקמה/ רמתחן1:2,גםראשלגםראשלצנצנצחצחצחצחצחצנצנצניייי


注2.5מיבנטבנטבנטסמעסמענ极2.52.5ממממממממל集原19/01/07 16:37
16

: 37
ללללגתגת

:30אתאתפעלכפQuling,ללאגללאגסבאבנננננננ
集19/01/07 14

: 45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("质量","高");swfPeleSmall.addParam("wmode","透明");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");


פאר:לאלאלא
极תכנכנלראמח集





20077年19/01/20077:26
שחרפאררשמשחרפאררשמבבששששהה荷集原激גדשגשגשגשג集原6:3,5:7ועלטטעלטטעלטטעלטטאנאנאנגבבבבןןצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפתצרפת原荷集。

משחק,שששאמרלרלרל极ה车,集集集

אחראחראחרשפסדאת荷兰,

פארבטבטחאתעפלעפללשלבשמ集原集原(16גדגדללתתתתת集),שםתפגשםתפגשבשבתבלשבשבתבלשבשבתבללאתסבטלנאתסבטלנק集4集3בטבטרנרנרנ极,שגברשגברשגברבבבקרעלמרקרקר极4集。

פאראמרהל-

(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;
}
4

3 回答 3

1

为什么要先扫描文件。只需以正确的编码(在您的示例中为 windows-1255)打开一个输入流并向下传输内容。

顺便提一句。如果您正在编写 HTTP 服务器,您应该知道您不处理字符串。所以 StringBuffer 无论如何都不是一个好的选择

于 2011-01-01T18:00:05.877 回答
1

尝试在 jsp 页面中将响应内容类型设置为 UTF-8,元内容标签会有所帮助。

response.setContentType('utf-8');

tResponse.append("内容类型: text/html; charset=utf-8\n");

于 2011-01-02T04:18:00.720 回答
0

您可能需要正确设置内容类型标头吗?此外,当您加载图像时,StringBuffer 会给您带来麻烦。

于 2011-01-01T18:28:22.923 回答