jsp网页计数器实现示例
jsp网页计数器实现示例
发布时间:2016-12-29 来源:查字典编辑
摘要:复制代码代码如下://过滤器类publicclassEcondingFilterimplementsFilter{privateString...

复制代码 代码如下:

//过滤器类

public class EcondingFilter implements Filter {

private String charset = null;

private ServletContext context = null;

private String path = "";

/**

* 在销毁前将数据存入本地文件中

*/

public void destroy() {

//获取servleContext中的属性的那个值

String nums = (String) context.getAttribute("nums");

//创建写入流

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销毁");

}

复制代码 代码如下:

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();//获取每次访问的action的相对路径

<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"> //判断路径,如果是登陆的那个action,就让保存的context里面的那个属性加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后");

}

复制代码 代码如下:

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()) {//判断文件是否存在

// 如果文件不存在,就创建一个文件,保存在D盘中

file = new File("d:text.txt");

FileWriter fw = null;

BufferedWriter bw = null;

try {

fw = new FileWriter(file);

bw = new BufferedWriter(fw);

bw.write(0 + "");// 写入初始化数据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();

}

}

}

//当每次tomcat启动服务时,进行读取创建的那个文件

path = "d:text.txt";

// 从本地读取访问的人数的文件

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();

}

}

//将获得到的数据保存在servletContext中

context.setAttribute("nums", nums);

}

}

用过滤器方便的一点,不需要我们每次手动去调用,当web服务启动时候,自动会引用。首先说下,我写到init方法的依据是,每次web服务启动会调用一次init方法,当关闭服务的时候会调用一次destory方法,将计数的那个数据文件,这个方法写到init方法和destory方法,这样可以减少每次的不断的读取服务器和读取写入文件的次数,当我们每登陆一次,就让servletContext中的那个attr加1,从而实现当关闭服务的时候,把文件保存在磁盘中。下次从磁盘中读取。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新JSP教程学习
热门JSP教程学习
编程开发子分类