`
joan0106
  • 浏览: 142556 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

java在tomcat里实现计划任务定时生成SiteMap

阅读更多

站想要让搜索引擎搜到,必须设置好keywords,description,title,做好SEO优化,同时sitemap.xml也是不可缺少的

通过Google,得到一些帮助,把自己做的整理一下:

第一、对文件进行查找:

 

public class FileDemo {
	File myDir;
	File[] contents;
	List fileList;
	Iterator currentFileIt;
	File currentFile;
	String path;

	/**
	 * 无参的构造函数
	 * */
	public FileDemo() {
		path = new String("");
		fileList = new ArrayList();
	}

	/**
	 * 有参的构造函数
	 * */
	public FileDemo(String path) {
		this.path = path;
		fileList = new ArrayList();
	}

	/**
	 * 设置要查看的文件路径
	 */
	public void setPath(String path) {
		this.path = path;
	}

	/***************************************************************************
	 * 返回当前目录的路径
	 */
	public String getDirectory() {
		return myDir.getPath();
	}

	public void refreshList() {
		if (this.path.equals(""))
			path = "c:\\";
		myDir = new File(path);

		fileList.clear();
		contents = myDir.listFiles();
		// 重新装入路径下文件
		for (int i = 0; i < contents.length; i++) {
			fileList.add(contents[i]);
		}
		currentFileIt = fileList.iterator();
	}

	/**
	 * 指到下一个条目
	 */
	public boolean nextFile() {
		while (currentFileIt.hasNext()) {
			currentFile = (File) currentFileIt.next();
			
			return true;
		}
		return false;
	}

	/**
	 * 返回当前指向的文件对象的文件名称
	 */
	public String getFileName() {
		return currentFile.getName();
	}

	/**
	 * 返回当前指向的文件对象的文件尺寸
	 */
	public String getFileSize() {
		return convertFileSize(currentFile.length());
	}

	/**
	 * 转换文件尺寸为指定格式。
	 */
	private String convertFileSize(long size) {
		int divisor = 1;
		String unit = "bytes";
		if (size >= 1024 * 1024) {
			divisor = 1024 * 1024;
			unit = "MB";
		} else if (size >= 1024) {
			divisor = 1024;
			unit = "KB";
		}
		if (divisor == 1)
			return size / divisor + " " + unit;
		String aftercomma = "" + 100 * (size % divisor) / divisor;
		if (aftercomma.length() == 1)
			aftercomma = "0" + aftercomma;
		return size / divisor + "." + aftercomma + " " + unit;
	}

	/**
	 * 返回文件的最后修改日期
	 */
	public String getFileTimeStamp() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateString = sdf.format(new Date(currentFile.lastModified()));

		return dateString;
	}

	/**
	 * 返回文件是不是一个目录
	 */
	public boolean isDirectory() {
		return currentFile.isDirectory();
	}

}

 

第二、创建一个任务类,继承TimerTask

public class XMLParese extends TimerTask{
	
	private ServletContext context;
	
	public XMLParese(ServletContext context){
		this.context=context;
	}
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		createSiteMap();
		
	}
	public void createSiteMap() {

		String priority = "0.75";// 级 别
		String changefreq = "daily";// "weekly";//频 率
		String xmlpath = "e:/sitemap.xml";// sitemap名称以及位置		
		String homeurl = "http://www.jiujiajiu.cn"; // 栏目首页
		String []directory={"promotion","news","brand","goods","services","shop","winelive"};
		FileDemo fp = new FileDemo();
		try {
			Document document = DocumentHelper.createDocument();
			Element urlsetElement = document.addElement("urlset");
			urlsetElement.addAttribute("xmlns ",
					"http://www.sitemaps.org/schemas/sitemap/0.9"); // "xmlns
																	// "必须要有空格,否则会报错
			urlsetElement.addAttribute("xmlns",
					"http://www.sitemaps.org/schemas/sitemap/0.9");

			urlsetElement.addAttribute("xmlns:xsi",
					"http://www.w3.org/2001/XMLSchema-instance");

			urlsetElement.addAttribute("xsi:schemaLocation",
					"http://www.sitemaps.org/schemas/sitemap/0.9 " +

					"http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
			
			//创建url根元素
			Element urlElement ; 
			//为url根元素创建loc网页地址,lastmod更新时间,changefreq更改频率和priority级别
			Element locElement ;
			Element lastmodElement;
			Element changefreqElement;
			Element priorityElement;
			fp.setPath("D:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\ROOT\\");
			fp.refreshList();
			while (fp.nextFile()) {
				if (!fp.isDirectory()) {
					homeurl="http://www.jiujiajiu.cn/";
					String f=fp.getFileName();
					String fname=f.substring(f.lastIndexOf("."));
					if((fname.equals(".html")||fname.equals(".htm")) && !f.equals("login.html")){
						urlElement = urlsetElement.addElement("url");
						locElement = urlElement.addElement("loc");
						lastmodElement = urlElement.addElement("lastmod");
						changefreqElement = urlElement.addElement("changefreq");
						priorityElement = urlElement.addElement("priority");
						
						//导航赋值
						homeurl = homeurl + fp.getFileName();
						locElement.setText(homeurl);
						lastmodElement.setText(fp.getFileTimeStamp());// 这里时间是你更新时间,这里暂时统一
						changefreqElement.setText(changefreq);
						priorityElement.setText(priority);
					}
				}
			}
			
            //各个目录下的文件
			for(int i=0;i<directory.length;i++){
				fp.setPath("D:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\ROOT\\"+directory[i]+"\\");
				fp.refreshList();
				while (fp.nextFile()) {
					homeurl="http://www.jiujiajiu.cn/"+directory[i]+"/";							
					urlElement = urlsetElement.addElement("url");
					locElement = urlElement.addElement("loc");
					lastmodElement = urlElement.addElement("lastmod");
					changefreqElement = urlElement.addElement("changefreq");
					priorityElement = urlElement.addElement("priority");							
					
					homeurl = homeurl + fp.getFileName();
					locElement.setText(homeurl);
					lastmodElement.setText(fp.getFileTimeStamp());// 这里时间是你更新时间,这里暂时统一
					changefreqElement.setText(changefreq);
					priorityElement.setText(priority);
				}
			}

			XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
					xmlpath)));
			writer.write(document);
			writer.close();
			document = null;
			// 格式化
			formatXMLFile(xmlpath, "UTF-8");
		} catch (Exception ex) {
			ex.printStackTrace();

		}

	}

	/**
	 * 格式化XML文档,并解决中文问题
	 * @param xmlpath:xml文件路径
	 * @param charSet:格式化的字符集
	 * @return
	 */
	public static boolean formatXMLFile(String xmlpath, String charSet) {

		boolean returnValue = false;
		try {

			SAXReader saxReader = new SAXReader();
			Document document = saxReader.read(new File(xmlpath));
			XMLWriter output = null;
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding(charSet);
			output = new XMLWriter(new FileWriter(new File(xmlpath)), format);
			output.write(document);
			output.close();
			document = null;
			saxReader = null;
			returnValue = true;
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return returnValue;
	}

}
 

 第三、创建一个任务监听类,实现ServletContextListener 接口

 

public class TimerListener implements ServletContextListener {
	// 设置启动时间为23点;
	private static final int hours = 23;
	private static final int minutes = 0;
	private static final int seconds = 0;
	private Timer timer = null;

	public void contextDestroyed(ServletContextEvent event) {
		timer.cancel();
		event.getServletContext().log("定时器销毁");
	}

	public void contextInitialized(ServletContextEvent event) {
        timer=new Timer(true);
        event.getServletContext().log("定时器已启动");
        Calendar calendar = Calendar.getInstance(); 
        calendar.set(Calendar.HOUR_OF_DAY, hours);
        calendar.set(Calendar.MINUTE, minutes); 
        calendar.set(Calendar.SECOND, seconds);
        
        //SiteMap生成
        //间隔时间1天生成一次
        timer.schedule(new XMLParese(event.getServletContext()),calendar.getTime(),
        		1*24*60*60*1000);
	}
}
 

第四、在web中添加一个监听器
       web.xml里的配置

 

<!-- 定时器 -->
<listener>
	<listener-class>timer.TimerListener</listener-class>
</listener> 
 

 

 

分享到:
评论

相关推荐

    Tomcat的定时任务(计时器)

    本文将深入探讨如何在Tomcat中实现定时任务,主要涉及的知识点包括Java的定时器(Timer)和Spring框架的TaskScheduler。 首先,让我们了解一下Java中的定时任务。在Java标准库中,有一个名为`java.util.Timer`的类...

    java代码启动tomcat

    在 Java 代码中使用 Tomcat 服务器时,需要添加必要的 JAR 包,并实现 Tomcat 服务器的启动和停止。在本示例代码中,我们使用了 Tomcat 服务器来发布 Web 应用程序,并实现了远程控制 Tomcat 服务器的生命周期。 ...

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    5. **Spring的AOP与定时任务**:Spring的AOP(面向切面编程)可以用于在定时任务执行前后添加额外的逻辑,比如记录日志、事务管理等。这可以通过定义切面和通知来实现。 6. **异常处理**:在设计定时任务时,需要...

    Tomcat在Linux下的定时重启

    Tomcat 是一个广泛使用的开源 Web 服务器软件,在 Linux 系统中可以使用 cron 任务来实现定时重启,以确保 Tomcat 服务器的稳定运行。下面将详细介绍在 Linux 中创建定时任务,创建 Tomcat 重启的脚本文件,并增加 ...

    java定时器定时调用任务

    在Servlet容器(如Tomcat)中,可以通过监听器(Listener)或者Servlet的初始化方法来创建和启动定时器,以实现在Web应用启动后自动开始执行定时任务。 此外,Java 5引入了`java.util.concurrent`包,其中的`...

    java启动tomcat

    在部分内容中,我们可以看到使用 Java 程序来监听 Tomcat 服务器的状态,并在 Tomcat 无响应时自动重启 Tomcat 的实现思路。 监听 Tomcat 服务器状态 在 Java 程序中,我们使用定时访问服务器端固定的 JSP 页面...

    tomcat_批处理延时命令bat@计划任务

    本压缩包"tomcat_批处理延时命令bat@计划任务"提供的内容恰好聚焦于这个主题,它涉及到如何利用批处理脚本来启动Tomcat服务器,并通过计划任务实现自动化的开机启动。 首先,我们要理解什么是Tomcat。Tomcat是一款...

    flex+java+tomcat实现socket通信及安全策略

    1.背景:Flex Socket通信及安全策略,使用flex实现客户端,java实现服务端; 2.重点解决安全策略问题:将flash发布为html格式后,本地访问页面后,一般可以与服务器进行socket通信;但是部署到tomcat服务器上后无法...

    tomcat 定时作业

    首先,我们要了解Tomcat中的定时任务通常通过Java的定时框架来实现,最常见的是Java的ScheduledExecutorService或者使用Spring框架的TaskScheduler。这两种方式都可以在Tomcat容器内创建定时任务。 1. **使用...

    SpringMVC的Socket实现+Java Tomcat websocket实现+Java Socket通信实现 +Java UDP通信实现

    SpringMVC的Socket实现+Java Tomcat websocket实现+Java Socket通信实现 +Java UDP通信实现。websocket_study.rar 为springMVC版本的socket实现 websocket02.rar 里面包含tomcat的websocket实现+java socket双向通信...

    java和tomcat源码

    而Tomcat则是一个开源的Java Servlet容器,实现了Java EE的Web应用服务器规范,尤其是Servlet和JSP。 Java源码: Java源码是用Java编程语言编写的程序代码,通常以.java文件形式存在。这些源文件被Java编译器转换为...

    java修改tomcat进程名字

    这时,如果所有Tomcat实例都使用默认的“java.exe”作为进程名,那么在任务管理器中将难以区分各个实例,不利于监控和管理。因此,更改Tomcat进程名称可以有效解决这一问题,使运维人员能够快速定位和管理各个服务器...

    tomcat配置生成的日志文件按照日期新建工具

    为了使Tomcat生成的日志文件按照日期每天新建,我们需要在配置文件中指定一个包含日期的文件名格式。例如,如果使用`java.util.logging`,可以在`logging.properties`中设置` handlers`为`java.util.logging....

    tomcat 定时重启工具

    由于工作需求,本人自己制作的 Tomcat 定时重启小工具,监听Tomcat的CMD运行窗口,计算运行时间,来完成 定时重启任务,配置可以自动临时保存,不生成多余文件。打算在后续版本中加入一个 HTTP监听任务,判断是否宕...

    tomcat自动定时重启

    标题 "Tomcat自动定时重启" 涉及到的是如何设置和...总之,实现Tomcat自动定时重启是一个涉及多个步骤的过程,需要对操作系统的任务调度、Tomcat的管理和配置有深入理解。合理配置和监控能确保服务器的稳定性和可靠性。

    java利用ManagementFactory获取tomcat的一些信息例子

    在Java编程语言中,我们可以利用Java管理扩展(Java Management Extensions, JMX)和ManagementFactory类来获取应用程序,如Tomcat服务器的运行时信息。本文将深入探讨如何通过这些工具来监控Tomcat的一些关键信息。...

    定时任务工具tomcat+jenkins

    本文将详细介绍如何利用Apache Tomcat(一个广泛使用的Java应用服务器)与Jenkins(一个开源持续集成/持续部署工具)来创建定时任务,实现电脑自动重启以及Tomcat的开机自启动。 首先,我们需要理解Tomcat的开机自...

    ubuntu+java+tomcat+mysql实现简单的登录注册页面

    本教程将探讨如何在Ubuntu操作系统上,结合Java编程语言、Tomcat服务器以及MySQL数据库来实现这一功能。通过这个过程,我们可以了解到Web开发的基本流程,以及如何整合后端与数据库。 首先,让我们了解Ubuntu操作...

    java嵌入式tomcat

    Java嵌入式Tomcat是指将Apache Tomcat服务器集成到Java应用程序中,以便应用程序可以直接启动和控制Tomcat实例,而无需独立部署。这种方式常用于简化测试、微服务或轻量级应用部署。以下是对如何实现这一目标的详细...

Global site tag (gtag.js) - Google Analytics