定时刷新页面功能

1.Web.xml中定时服务的配置
<listener>
<description>ServletContextListener, ServletContextAttributeListener, HttpSessionListener, HttpSessionAttributeListener</description>
<listener-class>com.bopomofo.common.ServletListener</listener-class>
</listener>

2.language-config.xml 对语言的配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- 选择语言版本时下拉框内容,比如:网站首页中选择语言版本的下拉框。-->
<languages>
<language>
<lang>zh</lang><!--中文语言-->
<display>Chinese</display><!--中文显示名称 -->
</language>
<language>
<lang>en</lang>
<display>English</display>
</language>
</languages>

3.proxool.xml连接池的配置(使用的是proxool-0.9.ORC2.jar)
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>bopomofo</alias>
<driver-url>jdbc:jtds:sqlserver://192.168.1.110:1433/bopomofo</driver-url>
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="bopomofo"/>
<property name="password" value="bopomofo"/>
</driver-properties>
<minimum-connection-count>2</minimum-connection-count>
<maximum-connection-count>10</maximum-connection-count>
<house-keeping-test-sql>
SELECT { fn NOW() }
</house-keeping-test-sql>
<trace>false</trace>
<verbose>false</verbose>
</proxool>
</something-else-entirely>
4.日志在web.xml中的配置
<context-param>
<param-name>log4j-init-file</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>

5.log4j.properties

6.ServletListener.java
package com.bopomofo.common;

import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
import org.xml.sax.InputSource;

public class ServletListener implements ServletContextListener,
ServletContextAttributeListener, HttpSessionListener,
HttpSessionAttributeListener {
private static final Logger logger = Logger.getRootLogger();

public void contextInitialized(ServletContextEvent evt) {
ServletContext sc = evt.getServletContext();
// log4j加载
String prefix = sc.getRealPath("/");
String file = sc.getInitParameter("log4j-init-file");

if (file != null)
{
PropertyConfigurator.configure(prefix + file);
logger.info("Log4j init successful!");
}

try
{
JAXPConfigurator.configure(new InputSource(sc.getResourceAsStream("/WEB-INF/proxool.xml")), false);
logger.info("Proxool init Successful !");
} catch (ProxoolException ex)
{
ex.printStackTrace();
}
String baseFilePath = sc.getRealPath("/WEB-INF/");
ApplicationBean ab = new ApplicationBean(baseFilePath);
sc.setAttribute("ApplicationBean", ab);
List langList = ab.getLanguageList();//语言列表
Iterator it = langList.iterator();
while (it.hasNext())
{
Language lg = (Language) it.next();
//从IndexBean中加载同语言的数据到sc的属性中去。
sc.setAttribute("Index_" + lg.getLang(), new IndexBean(lg.getLang()));
}
//开始执行定时任务
Task.run(sc,langList);
}

public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub

}

public void attributeAdded(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub

}

public void attributeRemoved(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub

}

public void attributeReplaced(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub

}

public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub

}

public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub

}

public void attributeAdded(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub

}

public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub

}

public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub

}

}

7定制定时器
package com.bopomofo.common;

import java.util.List;
import java.util.Timer;

import javax.servlet.ServletContext;
/**
* 定时器,定时更新Application缓存的课程信息与新闻信息
* @author Administrator
*
*/
public class Task {

public static void run(ServletContext sc, List langList){
Timer timer = new Timer();
//每一小时定时执行任务UpdateIndex类
timer.schedule(new UpdateIndex(sc,langList),0,3600*1000);
}

}

8.定时更新类
package com.bopomofo.common;

import java.util.Calendar;
import java.util.List;
import java.util.TimerTask;

import javax.servlet.ServletContext;

public class UpdateIndex extends TimerTask {
// 零点
private static final int C_SCHEDULE_HOUR = 0;

ServletContext sc = null;

List langList = null;

public UpdateIndex(ServletContext sc, List langList) {
this.sc = sc;
this.langList = langList;
}

public void run() {
Calendar cal = Calendar.getInstance();
//每天零点执行更新
if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY))
{
try
{
Index.reload(sc, langList);
System.out.println("服务器缓存更新主页面显示内容.........");

} catch (Exception e)
{//
e.printStackTrace();
}
}
}

}

9执行加载中间程序Index.java
package com.bopomofo.common;

import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletContext;

public class Index {

public static void reload(ServletContext sc, List langList) {
Iterator it = langList.iterator();
while (it.hasNext())
{
Language lg = (Language) it.next();
sc.setAttribute("Index_" + lg.getLang(), new IndexBean(lg.getLang()));
}
}

}

10.加载数据信息IndexBean.java类 (该加载的数据用于初始化客户端首页面)
package com.bopomofo.common;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class IndexBean {


private List latest_course = null;

private List popular_course = null;

private List news = null;

private String lang = "";

private List flashPic =null;

public IndexBean(String lang) {
this.lang = lang;
this.loadLatest();
this.loadPopular();
this.loadNews();
this.loadFlashPic();
}

public List getLatest_course() {
return latest_course;
}

public void setLatest_course(List latest_course) {
this.latest_course = latest_course;
}

public List getPopular_course() {
return popular_course;
}

public void setPopular_course(List popular_course) {
this.popular_course = popular_course;
}

public List getNews() {
return news;
}

public void setNews(List news) {
this.news = news;
}

/**
* 加载最近更新课程
*/
public void loadLatest() {
this.latest_course = new ArrayList();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement("SELECT TOP 10 ID,Name,Cover FROM vi_Course_" + lang+" WHERE State=0");
rs = pstmt.executeQuery();
while (rs.next())
{
IndexDisplayBean idb = new IndexDisplayBean();
idb.setId(rs.getLong(1));
idb.setName(rs.getString(2));
idb.setCovdate(rs.getString(3));
latest_course.add(idb);
}

} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} finally
{
try
{
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

/**
* 加载最受欢迎课程
*/
public void loadPopular() {
this.popular_course = new ArrayList();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement("SELECT TOP 10 ID,Name,Cover FROM vi_Course_" + lang + " WHERE State=0 ORDER BY Purchase DESC ");
rs = pstmt.executeQuery();
while (rs.next())
{
IndexDisplayBean idb = new IndexDisplayBean();
idb.setId(rs.getLong(1));
idb.setName(rs.getString(2));
idb.setCovdate(rs.getString(3));
popular_course.add(idb);
}

} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} finally
{
try
{
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

/**
* 加载新闻
*/
public void loadNews() {
this.news = new ArrayList();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement("SELECT TOP 6 ID,Title,convert(nvarchar(10),I_Time,23),HtmlFile FROM vi_InfoIssue_" + lang + " WHERE Code='news' and FaceObj=1");
rs = pstmt.executeQuery();
while (rs.next())
{
IndexDisplayBean idb = new IndexDisplayBean();
idb.setId(rs.getLong(1));
idb.setName(rs.getString(2));
idb.setCovdate(rs.getString(3));
idb.setHtmlFile(rs.getString(4));
news.add(idb);
}

} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} finally
{
try
{
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public String getLang() {
return lang;
}

public void setLang(String lang) {
this.lang = lang;
}

public List getFlashPic() {
return flashPic;
}

public void setFlashPic(List flashPic) {
this.flashPic = flashPic;
}
/*加载Flash图片 lhb 添加加载Flash图片功能 2009-02-13*/

public void loadFlashPic() {
this.flashPic = new ArrayList();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement("SELECT TOP 5 ID,PicName,Url FROM tb_IndexFlash order by ID DESC");
rs = pstmt.executeQuery();
while (rs.next())
{
IndexDisplayBean idb = new IndexDisplayBean();
idb.setId(rs.getLong(1));
idb.setName(rs.getString(2));
idb.setUrl(rs.getString(3));
flashPic.add(idb);
}

} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} finally
{
try
{
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值