【发布时间】: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