package cn.edu.hld.mysax;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class MySAXParserServlet extends HttpServlet
{
/*
* 使用SAX解析要求3件事:事件处理器(MyHandler),解析器实例(SAXParser),将要解析的XML文档(content.xml)
* Servlet的线程安全:基于Servlet的应用程序本来就是多线程的,因此当使用Servlet时记住多线程是重要的
* SAX不是线程安全的,虽然可以重复使用它来解析几个文档,但不能够重复使用它同时解析几个XML文档
* 因此Servlet的get()方法构造新的解析器来满足每个用户请求
* SAXParserFactory的newSAXParser()声明为线程安全的,所以可以在线程之间共享SAXParserFactory,Servlet仅维护一个工厂对象
*/
private SAXParserFactory parserFactory ;
@Override
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException
{
doGet(arg0,arg1) ;
}
@Override
public void init() throws ServletException
{
try
{
parserFactory = SAXParserFactory.newInstance() ;
}
catch(Exception e)
{
e.printStackTrace() ;
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
MyHandler myHandler = new MyHandler() ;
SAXParser parser = null ;
try
{
parser = parserFactory.newSAXParser() ;
}
catch (ParserConfigurationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SAXException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
//提供XML文档
String xmlDir = this.getServletConfig().getServletContext().getRealPath("/") ;
//从web.xml中对servlet配置处读取相应的xml相对路径
xmlDir += this.getInitParameter("myxmlconfig") ;
InputSource inputSource = new InputSource(xmlDir) ;
try
{
parser.parse(inputSource, myHandler) ;
}
catch (SAXException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
List itemList = myHandler.getItemList() ;
request.setAttribute("itemList", itemList) ;
Iterator<Item> it = itemList.iterator() ;
while(it.hasNext())
{
Item item = it.next() ;
System.out.println(item.getName() + ":" + item.getValue());
}
/*
输出结果为:
thtwinj2ee:测试用数据一
thtwin:测试用数据二
*/
request.getRequestDispatcher("../index.jsp").forward(request, response) ;
}
}
Servlet利用SAX解析XML文档(新上传的有源码)
4星 · 超过85%的资源 需积分: 10 32 浏览量
2010-01-03
00:16:24
上传
评论
收藏 11KB RAR 举报
thtwinj2ee
- 粉丝: 9
- 资源: 31
最新资源
- 学生成绩管理系统-C++版本
- 吉林大学离散数学2笔记.pdf
- 通道处理过程的模拟通常涉及对通道处理机制的理解与实现.txt
- Flume进阶-自定义拦截器jar包
- Dubins曲线算法讲解和在运动规划中的使用.pdf
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈