数据源+freemarker+servlet生成xml文件

来源:互联网 发布:python 列表推导式循环 编辑:程序博客网 时间:2024/06/05 02:20

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> 

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>

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("&ldquo;""");
         contents
=contents.replaceAll("&rdquo;","");
         contents
=contents.replaceAll("&ldquo;""");
         contents
=contents.replaceAll("&rdquo;","");
         contents
=contents.replaceAll("&middot;","·");
         contents
=contents.replaceAll("&mdash;","");
         contents
=contents.replaceAll("&hellip;","");
         contents
=contents.replaceAll("&nbsp;","");
         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>