L
lightning
Some data(xxx.txt) may be updated at some time.
I start a new thread to refresh the data.
Below is the code:
public class IPLookerServlet extends HttpServlet {
static TreeMap<Long, String> map;
static ExecutorService s = Executors.newSingleThreadExecutor();
static String ipRepFile;
static boolean isRunning = true;
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
System.out.println("it destroyed!!!!!!!!!!!!!!");
isRunning = false;
s.shutdown();
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occure
*/
public void init() throws ServletException {
// Put your code here
ipRepFile = getInitParameter("ipRepFile");
try {
map = getIPInfo(ipRepFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
s.execute(new Runnable() {
int c = 0;
public void run() {
// TODO Auto-generated method stub
while (isRunning) {
try {
Thread.sleep(1000);
c = (c++) % (30 * 60);//every half an hour.
if (c == 0) {
map = getIPInfo(ipRepFile);
System.out.println("refreshed ip repository");
}
} catch (IOException e) {
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
System.out.println("init
complete!!!!!!!!!");
}
private static TreeMap<Long, String> getIPInfo(String file) throws
IOException {
TreeMap<Long, String> r = new TreeMap<Long, String>();
BufferedReader in = new BufferedReader(new FileReader(file));
String buf = null;
Pattern p = Pattern
.compile("^(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s+(\\d+\\.\\d+\\.\\d+\\.\\d
+)\\s+(.+)");
while ((buf = in.readLine()) != null) {
Matcher m = p.matcher(buf);
while (m.find()) {
long start = dealDot(m.group(1));
r.put(start, m.group(3));
}
}
in.close();
return r;
}
....
}
I start a new thread to refresh the data.
Below is the code:
public class IPLookerServlet extends HttpServlet {
static TreeMap<Long, String> map;
static ExecutorService s = Executors.newSingleThreadExecutor();
static String ipRepFile;
static boolean isRunning = true;
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
System.out.println("it destroyed!!!!!!!!!!!!!!");
isRunning = false;
s.shutdown();
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occure
*/
public void init() throws ServletException {
// Put your code here
ipRepFile = getInitParameter("ipRepFile");
try {
map = getIPInfo(ipRepFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
s.execute(new Runnable() {
int c = 0;
public void run() {
// TODO Auto-generated method stub
while (isRunning) {
try {
Thread.sleep(1000);
c = (c++) % (30 * 60);//every half an hour.
if (c == 0) {
map = getIPInfo(ipRepFile);
System.out.println("refreshed ip repository");
}
} catch (IOException e) {
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
System.out.println("init
complete!!!!!!!!!");
}
private static TreeMap<Long, String> getIPInfo(String file) throws
IOException {
TreeMap<Long, String> r = new TreeMap<Long, String>();
BufferedReader in = new BufferedReader(new FileReader(file));
String buf = null;
Pattern p = Pattern
.compile("^(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s+(\\d+\\.\\d+\\.\\d+\\.\\d
+)\\s+(.+)");
while ((buf = in.readLine()) != null) {
Matcher m = p.matcher(buf);
while (m.find()) {
long start = dealDot(m.group(1));
r.put(start, m.group(3));
}
}
in.close();
return r;
}
....
}