研究了半天,一直烦恼那个HTML怎么解析里面的标签 ,后来发现有一个htmlParser包
测试一下,代码如下
package com.fm.action;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeIterator;
import org.htmlparser.util.NodeList;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
public String login() throws Exception {
HttpServletRequest request=ServletActionContext.getRequest();//创建request
String path=request.getRealPath("/");//获取服务器路径
Parser parser=new Parser(path+"WEB-INF/Test.html");
StringBuffer result=new StringBuffer();
for(NodeIterator it=parser.elements();it.hasMoreNodes();)//迭代页面里所有东西
{
Node node=it.nextNode();//没一个节点
if(node.getChildren()!=null)
{
NodeList list=node.getChildren();//我这里${name}在BODY里,所以这里获取的是body的Node
for(int i=0;i<list.size();i++)
{
Node n=list.elementAt(i);
StringBuffer html=new StringBuffer(n.toHtml());
if(n.toHtml().indexOf("$")>0)//找到$符号
{
int start=html.indexOf("$");
int end=html.indexOf("}");
String parm=html.substring(start+1, end);//中间的参数明${name}中的name
html.replace(start,end+1,request.getParameter("name"));
result.append(html);
}
}
}else
{
result.append(node.toHtml());
}
}
HttpServletResponse response=ServletActionContext.getResponse();
response.setContentType("text/html; charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out= response.getWriter();
out.print(result);
out.flush();
out.close();
return null;
}
}
大概就是这样;jeecms具体的html怎么解析的,我也说不清楚,这只是我的猜想
|
|