公司的网站需要做SEO优化,需要生成sitemap.xml文件,我的思路使用java内置定时器,每24小时生成一次,关于url地址,考虑到使用分布式框架实现比较麻烦,就使用配置property文件的方式,获取需要的url,由于项目中使用ssh框架,一时不知道如何配置连接,最后使用原始的jdbc实现了,因为 只需要连接和创建时间,不需要封装对象,很容易实现了!
步骤:
1.配置web.xml
<!-- 配置定时器listener start -->
<listener>
<listener-class>
cn.aresoft.timerListener.WebSitXmlTimerListener
</listener-class>
</listener>
<!-- 配置定时器listener end -->
2.定义定时器
package cn.aresoft.timerListener;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class WebSitXmlTimerListener implements ServletContextListener {
private Timer timer;
private WebSitXmlTask task;
@Override
public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel();
System.out.println("定时器销毁");
}
@Override
public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
task = new WebSitXmlTask();
System.out.println("定时器启动");
timer.schedule(task, 0, 24*60*60*1000);
System.out.println("已经添加任务调度表");
}
}
3.定义定时器任务
package cn.aresoft.timerListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.TimerTask;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import cn.aresoft.logic.manager.customer.LoanService;
public class WebSitXmlTask extends TimerTask{
private static Connection conn ;
static{
//获取数据连接
Map map = PropertiesUtil.read("jdbc");
String driver=(String) map.get("jdbc.driver");
String url=(String) map.get("jdbc.url");
String user=(String) map.get("jdbc.user");
String pwd=(String) map.get("jdbc.pwd");
try {
Class.forName(driver);
conn= DriverManager.getConnection(url, user, pwd);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private LoanService loanService;
public LoanService getLoanService() {
return loanSe