往往JSP通常用来动态的生成HTML文件,来代替Servlet的作用,其实JSP还可以做很多事情,比如我以前提到的生成JPEG流,还可以用在XML文档中,很惊讶吧。
通过一个例子简要叙述一下用JSP生成XML文件,我们要做的是把一个数据库的内容写到一个XML文件中,并且以HTML的格式显示出来。
数据库的结构如下:
下面是index.jsp文件(别担心,虽然扩展名是jsp,可它确实是XML):
下面是与XML文档对应的XSLT文档cd.xlst:
生成效果:
问题:我希望将JSP中的内容写到servlet中,同时在JSP中使用标签库将生成的xml与已有的xslt连接起来,这该怎么做?请达人们帮助解答,谢谢。
通过一个例子简要叙述一下用JSP生成XML文件,我们要做的是把一个数据库的内容写到一个XML文件中,并且以HTML的格式显示出来。
数据库的结构如下:
CREATE TABLE `music` (
`year` int(4) NOT NULL default '0 ',
`title` tinytext NOT NULL,
`artist` tinytext NOT NULL,
`country` tinytext NOT NULL,
`company` tinytext NOT NULL,
`price` tinyint(4) NOT NULL default '0 '
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
`year` int(4) NOT NULL default '0 ',
`title` tinytext NOT NULL,
`artist` tinytext NOT NULL,
`country` tinytext NOT NULL,
`company` tinytext NOT NULL,
`price` tinyint(4) NOT NULL default '0 '
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
<%@ page language="java" contentType="text/xml;charset=gbk"%>
<%@ page import="java.sql.*"%>
<?xml version="1.0" encoding="gbk" ?>
<?xml-stylesheet type="text/xsl" href="cd.xslt"?>
<CATALOG>
<%
String server = "127.0.0.1";//数据库服务器地址
String port = "3306";//数据库服务器端口
String db = "music";//数据库名
String user = "root";//用户名
String pass = "root";//密码
String URL = "jdbc:mysql://" + server + ":" + port + "/" + db + "?user=" + user
+ "&password=" + pass;//完整的URL
Connection conn = null;//连接
Statement stmt = null;//语句
ResultSet rs = null;//结果集
try
{
Class.forName( "com.mysql.jdbc.Driver");//加载类
conn = DriverManager.getConnection(URL);//取得连接
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM music");//查询music表
while (rs.next())
{//遍历生成XML
%>
<CD>
<TITLE><%=rs.getString("title")%></TITLE>
<ARTIST><%=rs.getString("artist")%></ARTIST>
<COUNTRY><%=rs.getString("country")%></COUNTRY>
<COMPANY><%=rs.getString("company")%></COMPANY>
<PRICE><%=rs.getString("price")%></PRICE>
<YEAR><%=rs.getString("year")%></YEAR>
</CD>
<%
}
}
catch (Exception e)
{
e.printStackTrace();//异常输出
}
%>
</CATALOG>
<%@ page import="java.sql.*"%>
<?xml version="1.0" encoding="gbk" ?>
<?xml-stylesheet type="text/xsl" href="cd.xslt"?>
<CATALOG>
<%
String server = "127.0.0.1";//数据库服务器地址
String port = "3306";//数据库服务器端口
String db = "music";//数据库名
String user = "root";//用户名
String pass = "root";//密码
String URL = "jdbc:mysql://" + server + ":" + port + "/" + db + "?user=" + user
+ "&password=" + pass;//完整的URL
Connection conn = null;//连接
Statement stmt = null;//语句
ResultSet rs = null;//结果集
try
{
Class.forName( "com.mysql.jdbc.Driver");//加载类
conn = DriverManager.getConnection(URL);//取得连接
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM music");//查询music表
while (rs.next())
{//遍历生成XML
%>
<CD>
<TITLE><%=rs.getString("title")%></TITLE>
<ARTIST><%=rs.getString("artist")%></ARTIST>
<COUNTRY><%=rs.getString("country")%></COUNTRY>
<COMPANY><%=rs.getString("company")%></COMPANY>
<PRICE><%=rs.getString("price")%></PRICE>
<YEAR><%=rs.getString("year")%></YEAR>
</CD>
<%
}
}
catch (Exception e)
{
e.printStackTrace();//异常输出
}
%>
</CATALOG>
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
<th>Country</th><th>Company</th><th>Price</th><th>Year</th>
</tr>
<xsl:for-each select="CATALOG/CD">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="ARTIST"/></td>
<td><xsl:value-of select="COUNTRY"/></td>
<td><xsl:value-of select="COMPANY"/></td>
<td><xsl:value-of select="PRICE"/></td>
<td><xsl:value-of select="YEAR"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
<th>Country</th><th>Company</th><th>Price</th><th>Year</th>
</tr>
<xsl:for-each select="CATALOG/CD">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="ARTIST"/></td>
<td><xsl:value-of select="COUNTRY"/></td>
<td><xsl:value-of select="COMPANY"/></td>
<td><xsl:value-of select="PRICE"/></td>
<td><xsl:value-of select="YEAR"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
生成效果:
问题:我希望将JSP中的内容写到servlet中,同时在JSP中使用标签库将生成的xml与已有的xslt连接起来,这该怎么做?请达人们帮助解答,谢谢。