Action中的其他方法的代码在这里就省略了。只要在Action中加入以下的方法就可以实现在Action中开启一个新的线程了。
//开启一个新的线程
Thread thread = new Thread(new Runnable() {
//在run方法中写要执行的代码,如果要和数据库进行连接,就用传统的JDBC
@Override
public void run() {
final String IPAddress1 = UtilIP.getIPAddress(request);
Boolean b = GetHttp.isMobileDevice(request);
final String message1 = "/Backstage/Style/images/phone.png";
final String message2 = "/Backstage/Style/images/computer.png";
final String DBDRIVER = "com.mysql.jdbc.Driver";
final String DBURL = "jdbc:mysql://127.0.0.1:3306/sysi";
//现在使用的是mysql数据库,是直接连接的,所以此处必须有用户名和密码
final String USERNAME = "root";
final String PASSWORD = "root";
String clientMac="";
clientMac=UtilIP.getMACAddress2(IPAddress1);
//数据库连接对象
Connection conn = null;
//数据库操作对象
Statement stmt = null;
//1、加载驱动程序
try {
Class.forName(DBDRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//2、连接数据库
//通过连接管理器连接数据库
try {
//在连接的时候直接输入用户名和密码才可以连接
conn = DriverManager.getConnection(DBURL,USERNAME,PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
//3、向数据库中插入一条数据
try {
stmt = conn.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
//4、执行语句
try {
if(b.equals(true)){
String sql = "update wf_longinlog wf set wf.client_mac= '"+clientMac+"',wf.IP_ADDRESS='"+IPAddress1+"',wf.LOGIN_STATUS='正常登陆"+message1+"' where wf.log_id='"+logIDString+"'";
stmt.executeUpdate(sql);
}else{
String sql = "update wf_longinlog wf set wf.client_mac= '"+clientMac+"',wf.IP_ADDRESS='"+IPAddress1+"',wf.LOGIN_STATUS='正常登陆"+message2+"' where wf.log_id='"+logIDString+"'";
stmt.executeUpdate(sql);
}
} catch (Exception e) {
e.printStackTrace();
}
//5、关闭操作
try {
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
//System.err.println("新线程启动了**********************************");
}
});
thread.start();
注意:这里面用到的外部变量都需要是final的。