Web容器啟動(dòng)后執(zhí)行代碼的幾種方式
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的永善網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
其執(zhí)行順序?yàn)椋?/p>
4===5===1===2===3
即指定init-method的Bean開(kāi)始執(zhí)行
接著實(shí)現(xiàn)spring的Bean后置處理器開(kāi)始執(zhí)行
然后是Servlet的監(jiān)聽(tīng)器執(zhí)行
再接下來(lái)是Servlet的過(guò)濾器執(zhí)行
最后才是Servlet執(zhí)行
1、實(shí)現(xiàn)Servlet監(jiān)聽(tīng)器接口ServletContextListener
[java] view plain copy
public class InitListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent context) {
}
@Override
public void contextInitialized(ServletContextEvent context) {
// 上下文初始化執(zhí)行
System.out.println("================[ServletContextListener]自動(dòng)加載啟動(dòng)開(kāi)始.");
SpringUtil.getInstance().setContext(
span style="white-space:pre" /spanWebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext())
span style="white-space:pre" /span);
}
}
然后在web.xml文件配置該監(jiān)聽(tīng)器
[html] view plain copy
listener
listener-classcom.test.init.InitListener/listener-class
/listener
2、實(shí)現(xiàn)Servlet的過(guò)濾器Filter
[html] view plain copy
public class InitFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException,
ServletException {
}
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("================[Filter]自動(dòng)加載啟動(dòng)開(kāi)始.");
// 讀取Spring容器中的Bean[此時(shí)Bean已加載,可以使用]
//寫啟動(dòng)需要執(zhí)行的代碼
System.out.println("================[Filter]自動(dòng)加載啟動(dòng)結(jié)束.");
}
}
然后在web.xml文件配置過(guò)濾器即可
[html] view plain copy
filter
filter-nameInitFilter/filter-name
filter-classcom.test.init.InitFilter/filter-class
/filter
filter-mapping
filter-nameInitFilter/filter-name
url-pattern//url-pattern
/filter-mapping
3、編寫一個(gè)Servlet,在web.xml里面配置容器啟動(dòng)后執(zhí)行即可
[html] view plain copy
public class InitServlet extends HttpServlet {
/**
*/
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig config) {
try {
super.init();
} catch (ServletException e) {
e.printStackTrace();
}
System.out.println("================[Servlet]自動(dòng)加載啟動(dòng)開(kāi)始.");
// 讀取Spring容器中的Bean[此時(shí)Bean已加載,可以使用]
//執(zhí)行想要的代碼
System.out.println("================[Servlet]自動(dòng)加載啟動(dòng)結(jié)束.");
}
}
然后在web.xml文件配置該Servlet的啟動(dòng)方式為:容器啟動(dòng)后執(zhí)行
servlet
servlet-nameInitServlet/servlet-name
servlet-classcom.test.init.InitServlet/servlet-class
init-param
param-nameusername/param-name
param-valuetest/param-value
/init-param
!-- 此處指定加載順序?yàn)?,表明還有優(yōu)先級(jí)更高的Servlet要先執(zhí)行 --
load-on-startup2/load-on-startup
/servlet
servlet-mapping
servlet-nameInitServlet/servlet-name
url-pattern//url-pattern
/servlet-mapping
關(guān)于啟動(dòng)后執(zhí)行,由load-on-startup指定:
(1)當(dāng)值為0或者大于0時(shí),表示容器在應(yīng)用啟動(dòng)時(shí)就加載這個(gè)servlet。值越小,啟動(dòng)優(yōu)先級(jí)越高;
(2)當(dāng)是一個(gè)負(fù)數(shù)時(shí)或者沒(méi)有指定時(shí),表示該servlet被調(diào)用時(shí)才加載。
4、如果你使用Spring IOC作為Bean管理容器,那么可以指定init-method其中init-method表示bean加載成功后,立即執(zhí)行某個(gè)方法。配置如下:start為要執(zhí)行的方法名稱
[html] view plain copy
!-- service --
bean id="shopService" class="com.test.teach.service.ShopService" span style="color:#33ffff;"init-method="start"/span
property name="shopDao" ref="shopDao" /
/bean
下面是java執(zhí)行代碼。使用谷歌模擬手機(jī),進(jìn)行瀏覽網(wǎng)頁(yè)。運(yùn)行時(shí)注意chromedriver.exe的安裝路徑。
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.HashMap;
public class temp {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", ".\\drivers\\chromedriver.exe");
String URL = "";
HashMapString,String mobileEmulation = new HashMapString,String();
mobileEmulation.put("deviceName","iPhone X");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("mobileEmulation", mobileEmulation);
WebDriver driver = new ChromeDriver(options);
driver.get(URL); //進(jìn)入目的鏈接
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
python執(zhí)行代碼
from selenium import webdriver
mobileEmulation = {'deviceName': 'Apple iPhone 4'}
options = webdriver.ChromeOptions()
options.add_experimental_option(
Quartz定時(shí)機(jī)制
首先導(dǎo)入jar包到程序內(nèi) quartz-all-1.6.0.jar
然后創(chuàng)建一個(gè)XML
TimeConfig.xml 名字可以自己定義
?xml version="1.0" encoding="UTF-8"?
!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
""
beans
bean id="mainTask" class="net.timed.MainTask"/ //你要執(zhí)行的任務(wù)類
//jar類
bean id="mainJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
property name="targetObject"
ref bean="mainTask"http:///將你的類添加到定時(shí)器當(dāng)中
/property
property name="targetMethod"
valueexecute/value //定時(shí)執(zhí)行類里面的哪個(gè)方法
/property
/bean
bean id="timeTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"
property name="jobDetail"
ref bean="mainJob"/
/property
!--
0 0 10,14,16 * * ? 每天上午10點(diǎn),下午2點(diǎn),4點(diǎn)
0 0/30 9-17 * * ? 朝九晚五工作時(shí)間內(nèi)每半小時(shí)
0 0 12 ? * WED 表示每個(gè)星期三中午12點(diǎn)
"0 0 12 * * ?" 每天中午12點(diǎn)觸發(fā)
"0 15 10 ? * *" 每天上午10:15觸發(fā)
"0 15 10 * * ?" 每天上午10:15觸發(fā)
"0 15 10 * * ? *" 每天上午10:15觸發(fā)
"0 15 10 * * ? 2005" 2005年的每天上午10:15觸發(fā)
"0 * 14 * * ?" 在每天下午2點(diǎn)到下午2:59期間的每1分鐘觸發(fā)
"0 0/5 14 * * ?" 在每天下午2點(diǎn)到下午2:55期間的每5分鐘觸發(fā)
"0 0/5 14,18 * * ?" 在每天下午2點(diǎn)到2:55期間和下午6點(diǎn)到6:55期間的每5分鐘觸發(fā)
"0 0-5 14 * * ?" 在每天下午2點(diǎn)到下午2:05期間的每1分鐘觸發(fā)
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發(fā)
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發(fā)
"0 15 10 15 * ?" 每月15日上午10:15觸發(fā)
"0 15 10 L * ?" 每月最后一日的上午10:15觸發(fā)
"0 15 10 ? * 6L" 每月的最后一個(gè)星期五上午10:15觸發(fā)
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個(gè)星期五上午10:15觸發(fā)
"0 15 10 ? * 6#3" 每月的第三個(gè)星期五上午10:15觸發(fā)
上面這個(gè)是quartz的語(yǔ)法 定時(shí)單位
--
property name="cronExpression"
value0 0/5 * * * ?/value //定時(shí)的語(yǔ)法
/property
/bean
bean id="sfb" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
property name="triggers"
list
ref local="timeTrigger"/
/list
/property
/bean
/beans
//下面這個(gè)類就是我在XML中引入的類
package net.timed;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainTask {
public void execute() throws IOException
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("do my job"+dateFormat.format(new Date()));
Runtime.getRuntime().exec("cmd /c start E:/mbl/BusinessOffice/MoneDB/bin/bakup.bat");
}
}
然后在web.xml中把這個(gè)TimeConfig.xml添加進(jìn)去作為監(jiān)聽(tīng)
系統(tǒng)啟動(dòng)的時(shí)候自動(dòng)就監(jiān)聽(tīng)這個(gè)事件
?xml version="1.0" encoding="UTF-8"?
web-app version="2.5"
xmlns=""
xmlns:xsi=""
xsi:schemaLocation="
"
context-param
param-name
contextConfigLocation
/param-name
param-value
/WEB-INF/TimerConfig.xml
/param-value
/context-param
listener
listener-class
org.springframework.web.context.ContextLoaderListener
/listener-class
/listener
welcome-file-list
welcome-fileindex.jsp/welcome-file
/welcome-file-list
/web-app
這個(gè)是quartz spring的定時(shí)機(jī)制 請(qǐng)仔細(xì)的看看 如果可以請(qǐng)給分哦
使用Eclipse編寫自己的第一個(gè)Java代碼。
編寫如下:
1、首先打開(kāi)自己安裝的Eclipse軟件。
2、然后選擇File-New-JavaProject。
3、然后找到工程打開(kāi),右擊src選擇-New-Class。
4、填入類名,選擇下面的publicstaticvoidmain(String[]args)。
5、然后寫入代碼publicclassDemo{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println(HelloWorld)。
6、點(diǎn)擊上面的運(yùn)行按鈕,點(diǎn)擊確認(rèn),可以看到代碼運(yùn)行結(jié)果。