jsp網(wǎng)頁(yè)計(jì)數(shù)器實(shí)現(xiàn)示例
更新時(shí)間:2014年01月03日 16:03:25 作者:
網(wǎng)頁(yè)計(jì)數(shù)器想必大家都有見(jiàn)到過(guò)吧,記錄每一個(gè)訪問(wèn)者,下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下
復(fù)制代碼 代碼如下:
//過(guò)濾器類(lèi)
public class EcondingFilter implements Filter {
private String charset = null;
private ServletContext context = null;
private String path = "";
/**
* 在銷(xiāo)毀前將數(shù)據(jù)存入本地文件中
*/
public void destroy() {
//獲取servleContext中的屬性的那個(gè)值
String nums = (String) context.getAttribute("nums");
//創(chuàng)建寫(xiě)入流
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(path);
bw = new BufferedWriter(fw);
bw.write(nums);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (bw != null) {
bw.close();
}
if (fw != null) {
fw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("filter銷(xiāo)毀");
}
復(fù)制代碼 代碼如下:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("doFilter前");
String path = ((HttpServletRequest)request).getServletPath();//獲取每次訪問(wèn)的action的相對(duì)路徑
<img alt="" src="http://img.blog.csdn.net/20130728233435953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2tyZ3diag==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"><img alt="" src="http://img.blog.csdn.net/20130728233445625?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2tyZ3diag==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> //判斷路徑,如果是登陸的那個(gè)action,就讓保存的context里面的那個(gè)屬性加1
if(path.endsWith("/login.action")){
context.setAttribute("nums",Integer.parseInt(context.getAttribute("nums").toString())+1+"");
}
request.setCharacterEncoding(charset);
response.setCharacterEncoding(charset);
chain.doFilter(request, response);
System.out.println("doFilter后");
}
復(fù)制代碼 代碼如下:
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("filter初始化");
//獲取編碼格式
charset = filterConfig.getInitParameter("encoding");
//獲取servletContext
context = filterConfig.getServletContext();
System.out.println(charset);
path = context.getRealPath("");
File file = new File("D:\\text.txt");
if (!file.exists()) {//判斷文件是否存在
// 如果文件不存在,就創(chuàng)建一個(gè)文件,保存在D盤(pán)中
file = new File("d:\\text.txt");
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
bw.write(0 + "");// 寫(xiě)入初始化數(shù)據(jù)0
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (bw != null) {
bw.close();
}
if (fw != null) {
fw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//當(dāng)每次tomcat啟動(dòng)服務(wù)時(shí),進(jìn)行讀取創(chuàng)建的那個(gè)文件
path = "d:\\text.txt";
// 從本地讀取訪問(wèn)的人數(shù)的文件
FileReader fr = null;
BufferedReader bf = null;
String nums = "";
try {
fr = new FileReader(path);
bf = new BufferedReader(fr);
nums = bf.readLine();
System.out.println(nums);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (bf != null) {
bf.close();
}
if (fr != null) {
fr.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//將獲得到的數(shù)據(jù)保存在servletContext中
context.setAttribute("nums", nums);
}
}
用過(guò)濾器方便的一點(diǎn),不需要我們每次手動(dòng)去調(diào)用,當(dāng)web服務(wù)啟動(dòng)時(shí)候,自動(dòng)會(huì)引用。首先說(shuō)下,我寫(xiě)到init方法的依據(jù)是,每次web服務(wù)啟動(dòng)會(huì)調(diào)用一次init方法,當(dāng)關(guān)閉服務(wù)的時(shí)候會(huì)調(diào)用一次destory方法,將計(jì)數(shù)的那個(gè)數(shù)據(jù)文件,這個(gè)方法寫(xiě)到init方法和destory方法,這樣可以減少每次的不斷的讀取服務(wù)器和讀取寫(xiě)入文件的次數(shù),當(dāng)我們每登陸一次,就讓servletContext中的那個(gè)attr加1,從而實(shí)現(xiàn)當(dāng)關(guān)閉服務(wù)的時(shí)候,把文件保存在磁盤(pán)中。下次從磁盤(pán)中讀取。
您可能感興趣的文章:
- 一個(gè)簡(jiǎn)單的網(wǎng)站訪問(wèn)JS計(jì)數(shù)器 刷新1次加1次訪問(wèn)
- js計(jì)數(shù)器代碼
- JavaScript實(shí)現(xiàn)計(jì)數(shù)器基礎(chǔ)方法
- 使用JavaScript制作一個(gè)簡(jiǎn)單的計(jì)數(shù)器的方法
- javascript下計(jì)數(shù)器每秒自動(dòng)加1
- 一個(gè)可以防止刷新的JSP計(jì)數(shù)器
- jsp計(jì)數(shù)器制作
- 用JAVASCRIPT幫我寫(xiě)個(gè)計(jì)數(shù)器
- jsp計(jì)數(shù)器代碼
- 原生js實(shí)現(xiàn)寬度計(jì)數(shù)器
相關(guān)文章
jsp傳參 servlet接收中文亂碼問(wèn)題的解決方法
下面小編就為大家?guī)?lái)一篇jsp傳參 servlet接收中文亂碼問(wèn)題的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07Java Web開(kāi)發(fā)之圖形驗(yàn)證碼的生成與使用方法
這篇文章主要介紹了Java Web開(kāi)發(fā)之圖形驗(yàn)證碼的生成與使用方法,較為詳細(xì)的分析了JSP驗(yàn)證碼的實(shí)現(xiàn)原理與生成技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09jsp中使用frameset框架 邊框固定不讓更改邊框的大小
有時(shí)候可能要對(duì)自己布局好的頁(yè)面不讓用戶更改邊框的大小,這樣我們可以在frame里面添加noresize="noresize"屬性就可以實(shí)現(xiàn)其中的功能2014-07-07Spring quartz Job依賴(lài)注入使用詳解
這篇文章主要介紹了Spring quartz Job依賴(lài)注入使用詳解的相關(guān)資料,Spring quartz Job不能依賴(lài)注入,Spring整合quartz Job任務(wù)不能注入Spring4整合quartz2.2.3中Job任務(wù)使用@Autowired不能注入,需要的朋友可以參考下2017-08-08JSP組件commons-fileupload實(shí)現(xiàn)文件上傳
這篇文章主要為大家詳細(xì)介紹了JSP組件commons-fileupload實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10JSP Spring 自動(dòng)化裝配Bean實(shí)例詳解
這篇文章主要介紹了JSP Spring 自動(dòng)化裝配Bean實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04JSP自定義標(biāo)簽Taglib實(shí)現(xiàn)過(guò)程重點(diǎn)總結(jié)
Taglib指令,其實(shí)就是定義一個(gè)標(biāo)簽庫(kù)以及自定義標(biāo)簽的前綴,其中的具體的實(shí)現(xiàn)方式,我們不過(guò)多介紹,我們給大家從宏觀的角度以及解決其中的疑難點(diǎn),感興趣的朋友可以了解下,或許對(duì)你學(xué)習(xí)jsp有所幫助2013-02-02Struts2 OGNL調(diào)用公共靜態(tài)方法詳細(xì)介紹
這篇文章主要介紹了Struts2 OGNL調(diào)用公共靜態(tài)方法詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-01-01