Re: Any suggestions of doing refreshing data in a web module?
And I start the servlet at the container's start
<servlet>
<servlet-name>IPLookerServlet</servlet-name>
<servlet-class>
com.youliao.servlets.config.IPLookerServlet
</servlet-class>
<init-param>
<param-name>ipRepFile</param-name>
<param-value>e:\IPData.txt</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
On 3=D4 25=C8=D5, =C9=CF=CE=E711=CA=B150=B7=D6, lightning <huang.lightn...=
@gmail.com> wrote:
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 cat=
ch 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(fi=
le));
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;
}
...
}- =D2=FE=B2=D8=B1=BB=D2=FD=D3=C3=CE=C4=D7=D6 -
- =CF=D4=CA=BE=D2=FD=D3=C3=B5=C4=CE=C4=D7=D6 -