【问题标题】:Spring MVC and parsing HTMLSpring MVC 和解析 HTML
【发布时间】:2010-11-24 23:16:46
【问题描述】:

我有一个控制器类,如下代码段:

@Controller
public class SiteEntryController 
{
    @RequestMapping(value="/index.htm")
    public ModelAndView handleIndex(
            @RequestParam(value="enableStats", required=false) String enableStats) 
    {
        ModelMap map = new ModelMap();

        ...........

        return new ModelAndView("index", map); 
    }
}

ViewResolver 定义如下:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
    p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

我需要做的是,读取/解析只有 html 标记的 index.jsp 的内容,并返回有关内容中使用的标签的一些信息。 我将寻找如何查看我收集的信息,但首先,我不知道如何访问这些内容。 我熟悉java,但对Spring完全陌生。所以我的问题是愚蠢的。 :) 仅供参考,我想不通的不是如何解析 HTML,而是如何获取文件内容。

我用正常的文件操作做了这些事情,如下所示:

public class Main {

private static HTMLEditorKit.ParserCallback callback;

/**
 * @param args
 */
public static void main(String[] args) {
    try {
        Reader r = new FileReader("D:/WS/TestP/resource/index.htm");
        ParserDelegator parser = new ParserDelegator();
        callback = new Detector();
        parser.parse(r, callback, false);
    } catch (Exception _ex) {
        _ex.printStackTrace();
    }
    HashMap<String, Integer> map = ((Detector) callback).getMap();
    Set<String> keys = map.keySet();
    Iterator<String> it = keys.iterator();
    String key;
    ArrayList<TagFrequency> list = new ArrayList<TagFrequency>();
    TagFrequency tf;
    int i = 0, j = 0;
    while (it.hasNext()) {
        key = it.next();
        i = map.get(key);
        tf = new TagFrequency(key, i);
        if (list.size() == 0)
            list.add(tf);
        else {
            j = 0;
            while (j < list.size() && tf.compareTo(list.get(j)) > 0) {
                j++;
            }
            if (j==list.size())
                list.add(tf);
            else {
                list.add(j, tf);
            }
        }
    }
    for (int ind = list.size(); ind>0 ; ind--) {
        System.out.println(list.get(ind-1).toString());
    }       
}
}

Detector.java:

public class Detector extends HTMLEditorKit.ParserCallback {

    private HashMap<String, Integer> map = new HashMap<String, Integer>();

    public Detector () {
    }

    @Override
    public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
        String str = t.toString();
        if (map.get(str) == null) {
            map.put(str, Integer.valueOf(1));
        } else {
            map.put(str, map.get(str) + 1);
        }
    }

    public HashMap<String, Integer> getMap() {
        return map;
    }
}

和 TagFrequency.java:

public class TagFrequency {
    private String tag;
    private Integer i;
    public TagFrequency(String tag, Integer i) {
        super();
        this.tag = tag;
        this.i = i;
    }
    public String getTag() {
        return tag;
    }
    public void setTag(String tag) {
        this.tag = tag;
    }
    public Integer getI() {
        return i;
    }
    public void setI(Integer i) {
        this.i = i;
    }
    public String toString() {
        return this.tag + " " + this.i;
    }

    public int compareTo(TagFrequency tf) {
        if (tf.i > this.i)
            return -1;
        else if (tf.i < this.i)
            return 1;
        else
            return (-1)*this.tag.compareToIgnoreCase(tf.tag);
    }
}

【问题讨论】:

  • 如果它有任何安慰的话,它在 PHP 中是微不足道的。 :)

标签: java spring-mvc servlet-filters


【解决方案1】:

您可以使用 servlet 过滤器来实现它,该过滤器将传递缓存 HTML 的 servlet 响应包装器,然后在其上运行您的代码。

使用这种技术的项目是SiteMesh,所以你可以选择它的代码。

【讨论】:

猜你喜欢
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 2012-03-29
  • 1970-01-01
  • 2015-05-28
  • 2015-03-11
  • 2016-05-29
相关资源
最近更新 更多