saxParser在jsp中的运用

saxParser为java中基于事件驱动的解析xml类:

新建xml文件:

//注意一定要将编码设为:utf-8

<?xml version="1.0" encoding="utf-8"?>

<trainList>

<北京西站>

<始发车站>

<车次>

<名字>T83次</名字>

<运行区间>北京西-南京</运行区间>

<开车时间>20:17</开车时间>

<终到时间>09:10</终到时间>

</车次>

<车次>

<名字>T119次</名字>

<运行区间>北京西-上海</运行区间>

<开车时间>23:25</开车时间>

<终到时间>10:10</终到时间>

</车次>

</始发车站>

<终到列车>

<车次>

<名字>T84次</名字>

<运行区间>南京-北京西</运行区间>

<开车时间>21:17</开车时间>

<终到时间>10:10</终到时间>

</车次>

<车次>

<名字>T200次</名字>

<运行区间>上海-北京西</运行区间>

<开车时间>21:17</开车时间>

<终到时间>10:10</终到时间>

</车次>

</终到列车>

</北京西站>

<广州站>

<始发车站>

<车次>

<名字>T186次</名字>

<运行区间>广东-武汉</运行区间>

<开车时间>22:17</开车时间>

<终到时间>09:24</终到时间>

</车次>

<车次>

<名字>T78次</名字>

<运行区间>广东-长沙</运行区间>

<开车时间>22:17</开车时间>

<终到时间>09:24</终到时间>

</车次>

</始发车站>

<终到列车>

<车次>

<名字>T78次</名字>

<运行区间>南京-广东</运行区间>

<开车时间>21:17</开车时间>

<终到时间>10:10</终到时间>

</车次>

<车次>

<名字>T193次</名字>

<运行区间>上海-广东</运行区间>

<开车时间>21:15</开车时间>

<终到时间>12:10</终到时间>

</车次>

</终到列车>

</广州站>

</trainList>

//新建jsp:

//注意这里将页面编码设为;gb2312,利用http表单参数设置javabean的参数,要将表单提交参数设置才会成功。

<%@ page contentType="text/html; charset=gb2312" %>

<%@ page import="com.ligaogang.SAXParser.*" %>

<jsp:useBean id="ok" class="com.ligaogang.SAXParser.SAXBean"  scope="page"/>

<jsp:setProperty property="stationName" name="ok" param="stationName"/>

<jsp:setProperty property="startOrArrive" name="ok" param="startOrArrive"/>

<HTML>

<BODY>

<FONT size=2>

<form action="" method="post">

选择站名:

<select name="stationName">

<option value="广州站">广州站

<option value="北京西站">北京西站

</select>

选择始发或终到:

<input type="radio" name="startOrArrive" value="始发车站"/>

始发列车

<input type="radio" name="startOrArrive" value="终到列车" checked="default"/>

终到列车

<br>

<input type="submit" value="乘车"/>

</form>

<jsp:getProperty name="ok" property="stationName"/><br/>

<jsp:getProperty name="ok" property="startOrArrive"/>:<br/>

<jsp:getProperty name="ok" property="trainMessages"/><br/>

</FONT>

</BODY>

</HTML>

新建javabean文件;:

package com.ligaogang.SAXParser;

import java.util.Date;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;

import org.xml.sax.helpers.DefaultHandler;

public class SAXBean {

String stationName="北京西站";

String startOrArrive="终到列车";

StringBuffer trainMessage=new StringBuffer();

SAXParserFactory factory=null;

SAXParser saxParser=null;

MyHandler handler;

public void setStationName(String s)

{

System.out.println("set..."+stationName);

stationName=s.trim();

try{

byte b[]=stationName.getBytes("ISO-8859-1");

stationName=new String(b);

}catch(Exception e){

e.printStackTrace();

}

}

public String getStationName(){

System.out.println("get..."+stationName);

return this.stationName;

}

public void setStartOrArrive(String s)

{

startOrArrive=s.trim();    //去除其中的空格

try{

byte b[]=startOrArrive.getBytes("ISO-8859-1");

startOrArrive=new String(b);       //将字符串编码为iso-8859-1

System.out.println("get..."+startOrArrive);

}catch(Exception e){

e.printStackTrace();

}

}

public String getStartOrArrive(){

return this.startOrArrive;

}

public StringBuffer getTrainMessages(){

try{

factory=SAXParserFactory.newInstance();

saxParser=factory.newSAXParser();

handler=new MyHandler(trainMessage,stationName,startOrArrive);

saxParser.parse("trainList.xml",handler);

}catch(Exception e){

e.printStackTrace();

}

return this.trainMessage;

}

class MyHandler extends DefaultHandler

{

StringBuffer trainMessages;

String stationName,startOrArrive;

boolean 站名标记=false,始发或终到标记=false;

MyHandler(StringBuffer mess,String stationN,String startOrArr)

{

trainMessages=mess;

stationName=stationN;

startOrArrive=startOrArr;

System.out.println("stationName:"+stationN+"trainMessages:"+mess.toString()+"startOrArrive:"+startOrArr+(new Date()).toString());

}

public void startDocument()

{

System.out.println("StartDocument....");

trainMessages.append("<table border=2>");

trainMessages.append("<tr>");

trainMessages.append("<th>车次名字</th>");

trainMessages.append("<th>运行区间</th>");

trainMessages.append("<th>发车时间</th>");

trainMessages.append("<th>终到时间</th>");

trainMessages.append("</tr>");

}

public void endDocument()

{

System.out.println("endDocument....");

trainMessages.append("</table>");

}

public void startElement(String uri,String localName,String qName,Attributes atts)

{

System.out.println("StartElement....");

System.out.println(qName);

System.out.println(stationName);

qName=qName.trim();

if(qName.equals(stationName)){

站名标记=true;

trainMessages.append(" "+qName);

}

if(qName.equals(startOrArrive)){

始发或终到标记=true;

}

if(qName.endsWith("车次")){

trainMessages.append("<tr>");

}

}

public void endElement(String uri,String localName,String qName){

System.out.println("EndElement....");

if(qName.startsWith(stationName)){

站名标记=false;

}

if(qName.startsWith(startOrArrive)){

始发或终到标记=false;

}

if(qName.endsWith("车次")){

trainMessages.append("</tr>");

}

}

public void characters(char[] ch,int start,int length){

System.out.println("characters....");

String text=new String(ch,start,length);

text=text.trim();

if(站名标记==true&&始发或终到标记==true&&text.length()>0){

String str=text.trim();

trainMessages.append("<td>"+str+"</td>");

}

}

}

}

时间: 2024-12-20 03:33:39

saxParser在jsp中的运用的相关文章

自定义JSP中的Taglib标签之四自定义标签中的Function函数

转自http://www.cnblogs.com/edwardlauxh/archive/2010/05/19/1918589.html 之前例子已经写好了,由于时间关系一直没有发布,这次带来的是关于taglib中的<tag>的基本功能已经介绍完毕了,在taglib中我们发现有一个标签叫做<function>,这次简单介绍<function>标签的基本用法,<function>标签可以做什么呢?它可以让我们在jsp用直接调用某个方法,根据自定义的方法返回指定

jsp 中声明方法的使用

1.在"<%!"和"%>"之间声明方法,该方法在整个JSP页面有效,但是该方法内定义的变量只在该方法内有效.这些方法将在Java程序片中被调用,当方法被调用时,方法内定义的变量被分配内存,调用完毕即可释放内存.当多个客户同时请求一个JSP页面时,他们可能使用方法操作成员变量,对这种情况应给予重视. 解决办法:通过synchronized方法操作一个成员变量来实现一个计数器 <%@ page contentType="text/html;c

【JSP】JSP中的Java脚本

前言 现代Web开发中,在JSP中嵌入Java脚本不是推荐的做法,因为这样 不利于代码的维护.有很多好的,替代的方法避免在JSP中写Java脚本.本文仅做为JSP体系技术的一个了解. 类成员定义 1.将定义的代码放在<%! %>之间即可. 定义的成员将被转换为servlet类的成员. 2.可以定义任何成员方法和成员字段,static 成员 或者 实例成员都可以. 3.注意JSP/Servlet是工作在多线程环境下的,定义的成员变量要注意线程安全问题.一般建议使用_jspService方法中 的

用Servlet与JSP中实现分页查询

这个题目,总共分4个部分 1.查询总页数,把页码显示在页面上 2.把每页的内容显示在页面上 3.首页,尾页,上一页,下一页 4.下拉列表中的页数,(根据页数变动,选中第几页提交到第几页) 详解如下:(一部分代码在servlet中,一部分代码在JSP中) Servlet package com.lianxi; import java.io.IOException; import java.util.ArrayList; import javax.servlet.ServletException;

JSP中设置超链接失效点击进入下载页面的问题

在JSP中设置超链接标签体后点击发现进入不了页面而是进入了下载页面,此时需要在你新建的超链接对应的Servlet中查看response响应头是否有设置,设置是否成功,如下代码: 在JSP页面设置如下超链接发现进入不了, <a href="<%= request.getContextPath()%>/servlet/BuyServlet?prod=电视">电视</a><br> 此时进入BuyServlet类中查看response的应答头的设

jsp中头的导入两种方式区别

1.<jsp:include page="top.jsp">先将top.jsp中的java脚本和jsp指令执行完毕以后再讲top.jsp页面加入面中 2.<%@ include file="top.jsp"%>静态读取:则是将top.jsp的整个页面不加解析(无论是脚本还是指令)统统读入到引用页面中,然后引用页面一起进行解析(即开始执行脚本和指令) 3.区别:其实上边的两条就是区别,但是需要注意的是用<%@ include file=&

JSP中两种include的区别

首先说明这两种都是什么: <%@ include file=”relativeURI”%> 可以叫作静态include(静态包含),是jsp指令中的一种,(JSP指令控制JSP编译器如何去生成servlet(servlet是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类别,一般情况下,人们将Servlet理解为后者.-维基百科) <js

Jsp中三种注释

在Jsp中有三种注释: 一.HTML注释 1.输出注释<!--   -->客户端查看源码时是可以看见的. 二.Java注释 1. //单行注释 2. /*多行注释*/ 三.JSP页注释 1.<%--    --%>隐藏注释. 2.<%//      %>由浏览器忽略. 3.<%/*    */%>由浏览器忽略. (PS: <%    %>这里添加的是代码片段. <%!   %>这里添加的是Java方法. <%=  %>相当

JSP中的include的两种用法

1.两种用法 <@inlcude file ="header.jsp"/> 此时引入的是静态的jsp文件,它将引入的jsp中的源代码原封不动地附加到当前文件中,所以在jsp程序中使用这个指令的时候file里面的值(即要导入的文件)不能带多余的标签或是与当前jsp文件重复的东西.例如里面不要包含<html><body>这样的标签,因为是把源代码原封不动的附加过来,所以会与当前的jsp中的这样的标签重复导致出错. <jsp:include page