记录用户访问次数
在Servlet中應(yīng)用ServletContext接口,Servlet容器在啟動一個Web應(yīng)用時,會為它創(chuàng)建一個ServletContext對象。當(dāng)Servlet容器終止一個Web應(yīng)用時,ServletContext對象也會被銷毀,所以該對象與Web應(yīng)用程序有同樣的生命周期
在ServletContext接口中存取共享數(shù)據(jù)的方法有:
-
setAttribute(String name,Object
object):在ServletContext對象中存放共享數(shù)據(jù),參數(shù)name表示屬性名,參數(shù)object表示屬性值; -
removeAttribute(String name):根據(jù)指定參數(shù)name屬性名,刪除ServletContext對象中的共享數(shù)據(jù);
-
getAttribute(String name):根據(jù)指定的參數(shù)name屬性,獲取ServletContext對象中的共享數(shù)據(jù);
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中獲得計數(shù)器對象Integer count = (Integer)context.getAttribute("counter");if(count==null){//如果為空,則在ServletContext中設(shè)置一個計數(shù)器的屬性count=1;context.setAttribute("counter", count);}else{ //如果不為空,則設(shè)置該計數(shù)器的屬性值加1context.setAttribute("counter", count+1);}response.setContentType("text/html"); //響應(yīng)正文的MIME類型response.setCharacterEncoding("UTF-8"); //響應(yīng)的編碼格式PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>統(tǒng)計網(wǎng)站訪問次數(shù)</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()方法中實(shí)現(xiàn)統(tǒng)計用戶的訪問次數(shù)
新建CounterListener類
public class CounterListener implements ServletContextListener {/*** Web服務(wù)器終止時,調(diào)用該方法* 向保存計數(shù)器文件中寫一個當(dāng)前網(wǎng)站的訪問次數(shù)*/@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();}}}/*** 當(dāng)Web服務(wù)器啟動時,調(diào)用該方法* 讀取計數(shù)器文件中保存的網(wǎng)站訪問次數(shù)*/@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>總結(jié)
- 上一篇: 在Servlet中将JavaBean对象
- 下一篇: 将数据到处到Excel