亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用Java編寫HTML文件分析程序

2019-11-18 13:27:45
字體:
來源:轉載
供稿:網友

  一、概述
    
    Web服務器的核心是對Html文件中的各標記(Tag)作出正確的分析,一種編程語言的解釋程序也是對源文件中的保留字進行分析再做解釋的。實際應用中,我們也經常會碰到需要對某一特定類型文件進行要害字分析的情況,比如,需要將某個HTML文件下載并同時下載與之相關的.gif、.class等文件,此時就要求對HTML文件中的標記進行分離,找出所需的文件名及目錄。在java出現以前,類似工作需要對文件中的每個字符進行分析,從中找出所需部分,不僅編程量大,且易出錯。筆者在近期的項目中利用Java的輸入流類StreamTokenizer進行HTML文件的分析,效果較好。在此,我們要實現從已知的Web頁面下載HTML文件,對其進行分析后,下載該頁面中包含的HTML文件(假如在Frame中)、圖像文件和Class(Java Applet)文件。
    
    二、StreamTokenizer類
    
    StreamTokenizer即令牌化輸入流的作用是將一個輸入流中變成令牌流。令牌流中的令牌實體有三類:單詞(即多字符令牌)、單字符令牌和空白(包括Java和C/C++中的說明語句)。
    
    StreamTokenizer類的構造器為: StreamTokenizer(InputStream in)
    
    該類有一些公有實例變量:ttype、sval和nval ,分別表示令牌類型、當前字符串值和當前數字值。當我們需要取得令牌(即HTML中的標記)之間的字符時,應訪問變量sval。而讀向下一個令牌的方法是調用nextToken()。方法nextToken()的返回值是int型,共有四種可能的返回:
    
    StreamTokenizer.TT_NUMBER: 表示讀到的令牌是數字,數字的值是double型,可以從實例變量nval中讀取。
    
    StreamTokenizer.TT_Word: 表示讀到的令牌是非數字的單詞(其他字符也在其中),單詞可以從實例變量sval中讀取。
    
    StreamTokenizer.TT_EOL: 表示讀到的令牌是行結束符。
    
    假如已讀到流的盡頭,則nextToken()返回TT_EOF。
    
    開始調用nextToken()之前,要設置輸入流的語法表,以便使分析器辨識不同的字符。WhitespaceChars(int low, int hi)方法定義沒有意義的字符的范圍。WordChars(int low, int hi)方法定義構造單詞的字符范圍。
    
    三、程序實現
    
    1、HtmlTokenizer類的實現
    
    對某個令牌流進行分析之前,首先應對該令牌流的語法表進行設置,在本例中,即是讓程序分出哪個單詞是HTML的標記。下面給出針對我們需要的HTML標記的令牌流類定義,它是StreamTokenizer的子類:
    
    
    import java.io.*;
    import java.lang.String;
    class HtmlTokenizer extends
    StreamTokenizer {
    //定義各標記,這里的標記僅是本例中必須的,
    可根據需要自行擴充
     static int HTML_TEXT=-1;
     static int HTML_UNKNOWN=-2;
     static int HTML_EOF=-3;
     static int HTML_IMAGE=-4;
     static int HTML_FRAME=-5;
     static int HTML_BACKGROUND=-6;
     static int HTML_APPLET=-7;
    
    boolean outsideTag=true; //判定是否在標記之中
    
     //構造器,定義該令牌流的語法表。
     public HtmlTokenizer(BufferedReader r) {
    super(r);
    this.resetSyntax(); //重置語法表
    this.wordChars(0,255); //令牌范圍為全部字符
    this.ordinaryChar('< '); //HTML標記兩邊的分割符
    this.ordinaryChar('>');
     } //end of constrUCtor
    
     public int nextHtml(){
    int token; //令牌
    try{
    switch(token=this.nextToken()){
    case StreamTokenizer.TT_EOF:
    //假如已讀到流的盡頭,則返回TT_EOF
    return HTML_EOF;
    case '< ': //進入標記字段
    outsideTag=false;
    return nextHtml();
    case '>': //出標記字段
    outsideTag=true;
    return nextHtml();
    case StreamTokenizer.TT_WORD:
    //若當前令牌為單詞,判定是哪個標記
    if (allWhite(sval))
     return nextHtml(); //過濾其中空格
    else if(sval.toUpperCase().indexOf("FRAME")
    !=-1 && !outsideTag) //標記FRAME
     return HTML_FRAME;
    else if(sval.toUpperCase().indexOf("IMG")
    !=-1 && !outsideTag) //標記IMG
     return HTML_IMAGE;
    else if(sval.toUpperCase().indexOf("BACKGROUND")
    !=-1 && !outsideTag) //標記BACKGROUND
     return HTML_BACKGROUND;
    else if(sval.toUpperCase().indexOf("APPLET")
    !=-1 && !outsideTag) //標記APPLET
     return HTML_APPLET;
    default:
    System.out.PRintln ("Unknown tag: "+token);
    return HTML_UNKNOWN;
     } //end of case
    }catch(IOException e){
    System.out.println("Error:"+e.getMessage());}
    return HTML_UNKNOWN;
     } //end of nextHtml
    
    protected boolean allWhite(String s){//過濾所有空格
    //實現略
     }// end of allWhite
    
    } //end of class
    
    以上方法在近期項目中測試通過,操作系統為Windows NT4,編程工具使用Inprise Jbuilder3。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久大大胆人体| 黑人巨大精品欧美一区二区| 国内精品视频久久| 亚洲人在线视频| 国模吧一区二区| 欧美另类在线播放| 亚洲成人av在线播放| 亚洲成人亚洲激情| 欧美国产日韩一区二区在线观看| 久久夜色精品国产亚洲aⅴ| 国产视频一区在线| 色妞色视频一区二区三区四区| 国产亚洲人成a一在线v站| 91精品在线观看视频| 亚洲福利视频网站| 亚洲高清一二三区| 2018中文字幕一区二区三区| 97香蕉久久超级碰碰高清版| 亚洲国产日韩欧美在线图片| 91免费国产视频| 欧美在线影院在线视频| 亚洲精品日韩久久久| 亚洲xxxxx电影| 69视频在线免费观看| 欧美亚洲成人xxx| 中文字幕日韩在线视频| 亚洲天堂日韩电影| 国产视频久久久| 中文字幕亚洲一区二区三区五十路| 成人免费观看a| 精品国产乱码久久久久酒店| 2019中文字幕在线| 国产成人精品国内自产拍免费看| 欧美性做爰毛片| 久久久久久久久国产| 日本免费一区二区三区视频观看| 91精品中国老女人| 国产欧美精品一区二区三区-老狼| 成人夜晚看av| 精品女厕一区二区三区| 欧美高清不卡在线| 久久影视三级福利片| 亚洲精品永久免费| 国产精品揄拍一区二区| 欧美裸体xxxx极品少妇软件| 精品国产91乱高清在线观看| 亚洲资源在线看| 一区二区三区视频在线| 亚洲欧洲美洲在线综合| 久久久久五月天| 97国产精品久久| 日韩欧美在线第一页| 色综合91久久精品中文字幕| 亚洲欧洲午夜一线一品| 亚洲综合社区网| 亚洲国产欧美一区| 国产视频精品免费播放| 亚洲一区二区三区香蕉| 精品国产999| 久久久久久久久国产| 亚洲精品欧美日韩专区| 亚洲欧美在线一区二区| 欧美激情精品久久久久久久变态| 国产精品第一第二| 国产精品成人观看视频国产奇米| 亚洲一区二区三区毛片| 亚洲人成网在线播放| 一区二区三区无码高清视频| 北条麻妃在线一区二区| 中日韩午夜理伦电影免费| 在线电影中文日韩| 国内精品久久久久影院 日本资源| 成人国产精品免费视频| 亚洲第一av在线| 日韩精品极品视频免费观看| 粉嫩av一区二区三区免费野| 亚洲成人精品在线| 国内精品久久久久伊人av| 国产+成+人+亚洲欧洲| 在线视频日本亚洲性| 国模吧一区二区三区| 宅男66日本亚洲欧美视频| 一本大道亚洲视频| 色播久久人人爽人人爽人人片视av| 亚洲精品wwww| 疯狂做受xxxx欧美肥白少妇| 精品一区二区三区四区在线| 亚洲成人av资源网| 国产女同一区二区| 欧美综合国产精品久久丁香| 97超碰国产精品女人人人爽| 国产丝袜一区二区三区| 欧美一级bbbbb性bbbb喷潮片| 91久久久久久久久久久| 久久精品99国产精品酒店日本| 亚洲xxxx在线| 55夜色66夜色国产精品视频| 国产69精品99久久久久久宅男| 97超级碰在线看视频免费在线看| 日韩欧美成人精品| 国产成人精品免高潮在线观看| 国内精品国产三级国产在线专| 国内揄拍国内精品少妇国语| 精品中文字幕在线观看| 国产日韩在线免费| 92看片淫黄大片看国产片| 久久99热这里只有精品国产| 日韩精品视频免费| 亚洲石原莉奈一区二区在线观看| 日韩精品免费综合视频在线播放| 亚洲欧美自拍一区| 色婷婷成人综合| 日韩中文字幕亚洲| 亚洲国产中文字幕在线观看| 亚洲欧美国产va在线影院| 国产精品视频地址| 久久精品成人一区二区三区| 神马国产精品影院av| 日本久久久久久久久久久| 97超级碰在线看视频免费在线看| 国产精品第七十二页| 国产精品丝袜白浆摸在线| 国产精品永久免费| 日韩av片免费在线观看| 久久精品最新地址| 日韩av中文字幕在线免费观看| 日韩欧美中文第一页| 91在线观看欧美日韩| 亚洲欧美国产精品专区久久| 亚洲第一精品夜夜躁人人躁| 伊人久久久久久久久久久久久| 中文字幕亚洲情99在线| 性欧美激情精品| 亚洲美女av在线播放| 4388成人网| 欧洲成人午夜免费大片| 亚洲色在线视频| 91精品久久久久久久久青青| 久久久亚洲精选| 日韩av中文字幕在线免费观看| 久久影视电视剧凤归四时歌| 欧美激情精品久久久久久免费印度| 亚洲国产成人久久| 国产精品白丝jk喷水视频一区| 亚洲精品美女在线观看| 日韩欧美在线中文字幕| 亚洲天堂av在线免费| 91视频国产精品| 国产第一区电影| 91po在线观看91精品国产性色| 日韩在线免费av| 国产日本欧美一区二区三区| 国产美女直播视频一区| 国产精品入口免费视| 亚洲a∨日韩av高清在线观看| 中文字幕亚洲无线码a| 亚洲国产99精品国自产| 欧美日韩xxx| 亚洲精品自拍第一页| 欧美性猛交xxxx乱大交| 久久久久久亚洲精品不卡| 久久成人av网站| 九九视频直播综合网| 91中文在线视频|