网站计数器三种实现方法:
第一种:使用监听器来实现。
package com.huanglei.note;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyHttpSessionListener implements HttpSessionListener {
private int counter = 0;
public void sessionCreated(HttpSessionEvent event) {
counter++;
event.getSession().setAttribute("counter", new Integer(counter));
}
public void sessionDestroyed(HttpSessionEvent event) {
counter--;
event.getSession().setAttribute("counter", new Integer(counter));
}
}
在web.xml中配置监听器:
<listener>
<listener-class>com.huanglei.note.MyHttpSessionListener</listener-class>
</listener>
在jsp页面中:
你是第${sessionScope.counter}个访问本站的用户<br>
第二种方法:使用过滤器。
package com.huanglei.note;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
//导入import javax.servlet.Filter;
public class CounterFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession();
int count;
File file = new File("c:/count.txt");
if (!file.exists()) {
file.createNewFile();
}
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(file)));
String content = br.readLine();
if (content == null) {
count = 0;
} else {
count = Integer.parseInt(content);
}
br.close();
if (session.isNew()) {
req.setAttribute("count", new Integer(count + 1));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file)));
bw.write(count + 1 + "");
bw.close();
chain.doFilter(req, res);
} else {
req.setAttribute("count", new Integer(count));
chain.doFilter(req, res);
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
在web.xml中配置过滤器:
<filter>
<filter-name>CounterFilter</filter-name>
<filter-class>com.huanglei.note.CounterFilter</filter-class>
</filter>
在jsp页面中:
你是第${requestScope.count}个访问本站的用户<br>
第三种方法:使用servlet
package com.huanglei.note;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class CounterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=GB18030");
request.setCharacterEncoding("GB18030");
HttpSession session = request.getSession();
ServletContext application = this.getServletContext();
Integer count = (Integer) application.getAttribute("count");
if (count == null) {
count = new Integer(0);
}
int count1 = count.intValue();
if (session.isNew()) {
count1 = count.intValue()+1;
application.setAttribute("count", new Integer(count1));
}
response.sendRedirect("servletWebsiteCounter.jsp");
}
}
在web.xml中配置servlet:
<servlet>
<servlet-name>counterServlet</servlet-name>
<servlet-class>com.huanglei.note.CounterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>counterServlet</servlet-name>
<url-pattern>/servletWebsiteCounter</url-pattern>
</servlet-mapping>
在jsp页面中:
你是第${applicationScope.count}个访问本站的用户<br>