Mục lục
Ví dụ luồng chạy ngầm trong ứng dụng Java Servlet
Xem thêm các chuyên mục:

Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.


Đây là một ví dụ mô phỏng một nhiệm vụ được chạy định kỳ, nó chạy ngầm bên dưới ứng dụng Servlet của bạn. Cụ thể cứ một thời gian nhất định nó lại tạo lại tập tin sitemap.xml, đặt tại thư mục gốc của ứng dụng web.

SiteMapGenerator.java
package com.o7planning.example.servlet.listener;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class SiteMapGenerator implements ServletContextListener {
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent event) {
scheduler = Executors.newSingleThreadScheduledExecutor();
Runnable command = new SiteMapThread(event.getServletContext());
// Delay 1 Minute to first execution
long initialDelay = 1;
TimeUnit unit = TimeUnit.MINUTES;
// period the period between successive executions
long period = 60;// 60 Minute!
scheduler.scheduleAtFixedRate(command, initialDelay, period, unit);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>ServletListenerExample</display-name>
<listener>
<listener-class>com.o7planning.example.servlet.listener.SiteMapGenerator</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
SiteMapThread.java
package com.o7planning.example.servlet.listener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletContext;
public class SiteMapThread implements Runnable {
private ServletContext context;
public SiteMapThread(ServletContext context) {
this.context = context;
}
@Override
public void run() {
System.out.println("Generate sitemap ... " + new Date());
try {
this.createFile();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Finish generation");
}
private void createFile() throws IOException {
System.out.println("Generate file sitemap.xml to: "
+ context.getRealPath(""));
String path = context.getRealPath("sitemap.xml");
File file = new File(path);
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write("<?xml version='1.0' ?>");
writer.write("<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9' "
+ " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
+ " xsi:schemaLocation='http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd'>");
//
writer.write("<url>");
writer.write("<loc>http://o7planning.org</loc>");
writer.write("<changefreq>daily</changefreq>");
writer.write("<priority>0.80</priority>");
writer.write("</url>");
//
writer.write("<url>");
writer.write("<loc>http://o7planning.org/index.html</loc>");
writer.write("<changefreq>daily</changefreq>");
writer.write("<priority>0.80</priority>");
writer.write("</url>");
//
writer.write("</urlset>");
writer.close();
}
}