一.步骤:
1.在server.xml文件中建立数据源.
<
Service
name
="Cms"
>
< Connector debug ="0" enableLookups ="false" port ="8084" protocol ="AJP/1.3" redirectPort ="8443" />
< Connector acceptCount ="100" connectionTimeout ="20000" debug ="0" disableUploadTimeout ="true"
enableLookups ="false" maxSpareThreads ="75" maxThreads ="150" minSpareThreads ="25" port ="8081" redirectPort ="8443" />
< Engine defaultHost ="localhost_Cms" name ="Catalina_Cms" >
< Logger className ="org.apache.catalina.logger.FileLogger" prefix ="localhost_cmt_log." suffix =".txt" timestamp ="true" />
< Realm className ="org.apache.catalina.realm.UserDatabaseRealm" />
< Host autoDeploy ="true" debug ="0" name ="localhost_Cms" unpackWARs ="true" xmlNamespaceAware ="false" xmlValidation ="false" >
< Context debug ="0" docBase ="D:WorkspaceCMSweb" path ="/" reloadable ="true" workDir ="D:WorkspaceCMSj2src" >
< Resource name ="jdbc/news_DB" auth ="Container" type ="javax.sql.DataSource" />
< ResourceParams name ="jdbc/news_DB" >
< parameter >
< name > factory </ name >
<!-- DBCP Basic Datasource Factory -->
< value > org.apache.commons.dbcp.BasicDataSourceFactory </ value >
</ parameter >
< parameter >
< name > maxActive </ name >
< value > 1000 </ value >
</ parameter >
< parameter >
< name > validationQuery </ name >
< value > select 1+1 </ value >
</ parameter >
< parameter >
< name > maxIdle </ name >
< value > 100 </ value >
</ parameter >
< parameter >
< name > maxWait </ name >
< value > 10000 </ value >
</ parameter >
< parameter >
< name > removeAbandoned </ name >
< value > true </ value >
</ parameter >
< parameter >
< name > removeAbandonedTimeout </ name >
< value > 60 </ value >
</ parameter >
< parameter >
< name > logAbandoned </ name >
< value > false </ value >
</ parameter >
< parameter >
< name > username </ name >
< value > aaaa </ value >
</ parameter >
< parameter >
< name > password </ name >
< value > bbbbbb </ value >
</ parameter >
< parameter >
< name > driverClassName </ name >
< value > net.sourceforge.jtds.jdbc.Driver </ value >
</ parameter >
< parameter >
< name > url </ name >
< value > jdbc:jtds:sqlserver://111.111.111.111:1433/cms </ value >
</ parameter >
</ ResourceParams >
</ Context >
</ Host >
</ Engine >
</ Service >
< Connector debug ="0" enableLookups ="false" port ="8084" protocol ="AJP/1.3" redirectPort ="8443" />
< Connector acceptCount ="100" connectionTimeout ="20000" debug ="0" disableUploadTimeout ="true"
enableLookups ="false" maxSpareThreads ="75" maxThreads ="150" minSpareThreads ="25" port ="8081" redirectPort ="8443" />
< Engine defaultHost ="localhost_Cms" name ="Catalina_Cms" >
< Logger className ="org.apache.catalina.logger.FileLogger" prefix ="localhost_cmt_log." suffix =".txt" timestamp ="true" />
< Realm className ="org.apache.catalina.realm.UserDatabaseRealm" />
< Host autoDeploy ="true" debug ="0" name ="localhost_Cms" unpackWARs ="true" xmlNamespaceAware ="false" xmlValidation ="false" >
< Context debug ="0" docBase ="D:WorkspaceCMSweb" path ="/" reloadable ="true" workDir ="D:WorkspaceCMSj2src" >
< Resource name ="jdbc/news_DB" auth ="Container" type ="javax.sql.DataSource" />
< ResourceParams name ="jdbc/news_DB" >
< parameter >
< name > factory </ name >
<!-- DBCP Basic Datasource Factory -->
< value > org.apache.commons.dbcp.BasicDataSourceFactory </ value >
</ parameter >
< parameter >
< name > maxActive </ name >
< value > 1000 </ value >
</ parameter >
< parameter >
< name > validationQuery </ name >
< value > select 1+1 </ value >
</ parameter >
< parameter >
< name > maxIdle </ name >
< value > 100 </ value >
</ parameter >
< parameter >
< name > maxWait </ name >
< value > 10000 </ value >
</ parameter >
< parameter >
< name > removeAbandoned </ name >
< value > true </ value >
</ parameter >
< parameter >
< name > removeAbandonedTimeout </ name >
< value > 60 </ value >
</ parameter >
< parameter >
< name > logAbandoned </ name >
< value > false </ value >
</ parameter >
< parameter >
< name > username </ name >
< value > aaaa </ value >
</ parameter >
< parameter >
< name > password </ name >
< value > bbbbbb </ value >
</ parameter >
< parameter >
< name > driverClassName </ name >
< value > net.sourceforge.jtds.jdbc.Driver </ value >
</ parameter >
< parameter >
< name > url </ name >
< value > jdbc:jtds:sqlserver://111.111.111.111:1433/cms </ value >
</ parameter >
</ ResourceParams >
</ Context >
</ Host >
</ Engine >
</ Service >
2.在web.xml文件中配置servlet
<
servlet
>
< description > generate xml file </ description >
< servlet-name > NewsXmlServlet </ servlet-name >
< servlet-class > xml.NewsXmlServlet </ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name > NewsXmlServlet </ servlet-name >
< url-pattern > /xmlServlet </ url-pattern >
</ servlet-mapping >
< servlet >
< description > generate xml file </ description >
< servlet-name > NewsXmlServlet </ servlet-name >
< servlet-class > xml.NewsXmlServlet </ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name > NewsXmlServlet </ servlet-name >
< url-pattern > /xmlServlet </ url-pattern >
</ servlet-mapping >
< servlet >
3.newsXmlServlet.java
package
xml;
import java.io. * ;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.util.Locale;
public class NewsXmlServlet extends HttpServlet ... {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException ...{
// TODO Auto-generated method stub
try ...{
Connection conn=null;
Context ctx = new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/news_DB");
conn=ds.getConnection();
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select url,updatetime,tpf_edu_contentTitle,tpf_edu_contentneirong,tpf_edu_contentlaiyuan,tpf_edu_contentkeyword from tp5__edu_content where url<>'' and url is not null and dateDiff(d,updatetime,getDate())=1 order by updatetime desc");
Configuration cfg=new Configuration();
cfg.setDirectoryForTemplateLoading(new File("E:/wwwroot/CMS/web/WEB-INF/classes/xml"));
Template tem=cfg.getTemplate("news.ftl");
List list=new ArrayList();
OutputStreamWriter out=new OutputStreamWriter(System.out);
while(rs.next())...{
Map item=new HashMap();
item.put("title",rs.getString(3));
item.put("link","http://test.com.cn"+rs.getString(1));
item.put("pubdate",rs.getTimestamp(2));
item.put("content",DelHtml(rs.getString(4)));
item.put("source",rs.getString(5));
item.put("keywords",DelHtml(rs.getString(6)));
list.add(item);
}
Map data=new HashMap();
data.put("items",list);
StringWriter writer=new StringWriter();
tem.process(data,writer);
String content=writer.toString();
writer.close();
createXml(content);
out.close();
//resp.setContentType("text/xml; charset=utf-8");
//resp.getWriter().write(content);
} catch (NamingException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TemplateException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String DelHtml(String content)...{
String contents=content.replaceAll("<//?/s*(/S+)(/s*[^>]*)?/s*//?>","");
contents=contents.replaceAll("“", "”");
contents=contents.replaceAll("”","”");
contents=contents.replaceAll("“", "‘");
contents=contents.replaceAll("”","’");
contents=contents.replaceAll("·","·");
contents=contents.replaceAll("—","—");
contents=contents.replaceAll("…","…");
contents=contents.replaceAll(" ","");
contents=contents.replaceAll(","," ");
return contents;
}
public void createXml(String fileContent)...{
try ...{
String filePath="E:/wwwroot/cmsHtml/education/news.xml";
File fileXml=new File(filePath);
if(!fileXml.exists())...{
fileXml.createNewFile();
}
/**//*FileWriter fileWriter=new FileWriter(fileXml);
fileWriter.
fileWriter.write(fileContent);
fileWriter.close();*/
OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream(fileXml), Charset.forName("utf-8"));
writer.write(fileContent);
writer.close();
} catch (IOException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void destroy() ...{
// TODO Auto-generated method stub
super.destroy();
}
public void init() throws ServletException ...{
// TODO Auto-generated method stub
super.init();
}
}
import java.io. * ;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.util.Locale;
public class NewsXmlServlet extends HttpServlet ... {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException ...{
// TODO Auto-generated method stub
try ...{
Connection conn=null;
Context ctx = new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/news_DB");
conn=ds.getConnection();
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select url,updatetime,tpf_edu_contentTitle,tpf_edu_contentneirong,tpf_edu_contentlaiyuan,tpf_edu_contentkeyword from tp5__edu_content where url<>'' and url is not null and dateDiff(d,updatetime,getDate())=1 order by updatetime desc");
Configuration cfg=new Configuration();
cfg.setDirectoryForTemplateLoading(new File("E:/wwwroot/CMS/web/WEB-INF/classes/xml"));
Template tem=cfg.getTemplate("news.ftl");
List list=new ArrayList();
OutputStreamWriter out=new OutputStreamWriter(System.out);
while(rs.next())...{
Map item=new HashMap();
item.put("title",rs.getString(3));
item.put("link","http://test.com.cn"+rs.getString(1));
item.put("pubdate",rs.getTimestamp(2));
item.put("content",DelHtml(rs.getString(4)));
item.put("source",rs.getString(5));
item.put("keywords",DelHtml(rs.getString(6)));
list.add(item);
}
Map data=new HashMap();
data.put("items",list);
StringWriter writer=new StringWriter();
tem.process(data,writer);
String content=writer.toString();
writer.close();
createXml(content);
out.close();
//resp.setContentType("text/xml; charset=utf-8");
//resp.getWriter().write(content);
} catch (NamingException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TemplateException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String DelHtml(String content)...{
String contents=content.replaceAll("<//?/s*(/S+)(/s*[^>]*)?/s*//?>","");
contents=contents.replaceAll("“", "”");
contents=contents.replaceAll("”","”");
contents=contents.replaceAll("“", "‘");
contents=contents.replaceAll("”","’");
contents=contents.replaceAll("·","·");
contents=contents.replaceAll("—","—");
contents=contents.replaceAll("…","…");
contents=contents.replaceAll(" ","");
contents=contents.replaceAll(","," ");
return contents;
}
public void createXml(String fileContent)...{
try ...{
String filePath="E:/wwwroot/cmsHtml/education/news.xml";
File fileXml=new File(filePath);
if(!fileXml.exists())...{
fileXml.createNewFile();
}
/**//*FileWriter fileWriter=new FileWriter(fileXml);
fileWriter.
fileWriter.write(fileContent);
fileWriter.close();*/
OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream(fileXml), Charset.forName("utf-8"));
writer.write(fileContent);
writer.close();
} catch (IOException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void destroy() ...{
// TODO Auto-generated method stub
super.destroy();
}
public void init() throws ServletException ...{
// TODO Auto-generated method stub
super.init();
}
}
4.news.ftl
<?
xml version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
< document >
< webSite > edu.aweb.com.cn </ webSite >
< webMaster > webmaster@aweb.com.cn </ webMaster >
< updatePeri > 1440 </ updatePeri >
< #list items as it >
< item >
< title ><! [CDATA[$ ... {it.title} ]] ></ title >
< link > $ ... {it.link} </ link >
< pubDate > $ ... {it.pubdate} </ pubDate >
< text ><! [CDATA[$ ... {it.content} ]] ></ text >
< image />
< source > $ ... {it.source} </ source >
< keywords ><! [CDATA[$ ... {it.keywords} ]] ></ keywords >
</ item >
</ #list >
</ document >
< document >
< webSite > edu.aweb.com.cn </ webSite >
< webMaster > webmaster@aweb.com.cn </ webMaster >
< updatePeri > 1440 </ updatePeri >
< #list items as it >
< item >
< title ><! [CDATA[$ ... {it.title} ]] ></ title >
< link > $ ... {it.link} </ link >
< pubDate > $ ... {it.pubdate} </ pubDate >
< text ><! [CDATA[$ ... {it.content} ]] ></ text >
< image />
< source > $ ... {it.source} </ source >
< keywords ><! [CDATA[$ ... {it.keywords} ]] ></ keywords >
</ item >
</ #list >
</ document >