记录用户访问次数
在Servlet中應用ServletContext接口,Servlet容器在啟動一個Web應用時,會為它創建一個ServletContext對象。當Servlet容器終止一個Web應用時,ServletContext對象也會被銷毀,所以該對象與Web應用程序有同樣的生命周期
在ServletContext接口中存取共享數據的方法有:
-
setAttribute(String name,Object
object):在ServletContext對象中存放共享數據,參數name表示屬性名,參數object表示屬性值; -
removeAttribute(String name):根據指定參數name屬性名,刪除ServletContext對象中的共享數據;
-
getAttribute(String name):根據指定的參數name屬性,獲取ServletContext對象中的共享數據;
public class CounterServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//獲得ServletContext對象ServletContext context = getServletContext();//從ServletContext中獲得計數器對象Integer count = (Integer)context.getAttribute("counter");if(count==null){//如果為空,則在ServletContext中設置一個計數器的屬性count=1;context.setAttribute("counter", count);}else{ //如果不為空,則設置該計數器的屬性值加1context.setAttribute("counter", count+1);}response.setContentType("text/html"); //響應正文的MIME類型response.setCharacterEncoding("UTF-8"); //響應的編碼格式PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>統計網站訪問次數</TITLE></HEAD>");out.println(" <BODY>");out.print(" <h2><font color='gray'> ");out.print("您是第 "+context.getAttribute("counter")+" 位訪客!");out.println("</font></h2>");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}}
新建CounterServlet的Servlet類,在doPost()方法中實現統計用戶的訪問次數
新建CounterListener類
public class CounterListener implements ServletContextListener {/*** Web服務器終止時,調用該方法* 向保存計數器文件中寫一個當前網站的訪問次數*/@Overridepublic void contextDestroyed(ServletContextEvent contextEvent) {ServletContext context = contextEvent.getServletContext();Integer count = (Integer)context.getAttribute("counter");if(count!=null){try{String path =context.getRealPath("/count.txt");File file = new File(path);FileWriter fw = new FileWriter(file);BufferedWriter bw = new BufferedWriter(fw);bw.write(context.getAttribute("counter").toString());bw.flush();bw.close();fw.close();}catch(Exception e){e.printStackTrace();}}}/*** 當Web服務器啟動時,調用該方法* 讀取計數器文件中保存的網站訪問次數*/@Overridepublic void contextInitialized(ServletContextEvent contextEvent) {Integer count = 0;ServletContext context = contextEvent.getServletContext();try{String path =context.getRealPath("");File file = new File(path,"count.txt");System.out.println(file.getPath());if(!file.exists()){file.createNewFile();FileWriter fw = new FileWriter(file);BufferedWriter bw = new BufferedWriter(fw);bw.write("0");bw.flush();bw.close();fw.close();}else{FileReader fr = new FileReader(file);BufferedReader br = new BufferedReader(fr);count = new Integer(br.readLine()); context.setAttribute("counter", count);br.close();fr.close();}}catch(Exception ex){ex.printStackTrace();}} }web.xml文件配置
<servlet><servlet-name>CounterServlet</servlet-name><servlet-class>com.cn.zj.Servlet.CounterServlet</servlet-class></servlet><servlet-mapping><servlet-name>CounterServlet</servlet-name><url-pattern>/counter</url-pattern></servlet-mapping><listener><listener-class>com.cn.zj.Servlet.CounterListener</listener-class></listener><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>總結
- 上一篇: 在Servlet中将JavaBean对象
- 下一篇: 将数据到处到Excel