Kaunter klik Servlet
Kaunter Klik Halaman Web
Banyak kali anda mungkin berminat untuk mengetahui jumlah klik pada halaman tertentu tapak web anda. Mengira hits ini menggunakan servlet adalah sangat mudah kerana kitaran hayat servlet dikawal oleh bekas di mana ia dijalankan.
Berikut ialah langkah yang perlu anda ambil untuk melaksanakan kaunter klik halaman web ringkas berdasarkan kitaran hayat Servlet:
Memulakan pembolehubah global dalam init( ) kaedah.
Menambah pembolehubah global setiap kali kaedah doGet() atau doPost() dipanggil.
Jika perlu, anda boleh menggunakan jadual pangkalan data untuk menyimpan nilai pembolehubah global dalam destroy(). Nilai ini boleh dibaca dalam kaedah init() pada kali seterusnya Servlet dimulakan. Langkah ini adalah pilihan.
Jika anda hanya mahu mengira satu klik halaman bagi setiap sesi, gunakan kaedah isNew() untuk menyemak sama ada halaman yang sama telah diklik oleh sesi tersebut. Langkah ini adalah pilihan.
Anda boleh memaparkan jumlah klik pada halaman di tapak web anda dengan memaparkan nilai pembilang global. Langkah ini adalah pilihan.
Di sini kami mengandaikan bahawa bekas web tidak akan dapat dimulakan semula. Jika terdapat restart atau Servlet dimusnahkan, kaunter akan ditetapkan semula.
Contoh
Contoh ini menunjukkan cara melaksanakan kaunter klik halaman web yang mudah:
import java.io.*; import java.sql.Date; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class PageHitCounter extends HttpServlet{ private int hitCount; public void init() { // 重置点击计数器 hitCount = 0; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html"); // 该方法在 Servlet 被点击时执行 // 增加 hitCount hitCount++; PrintWriter out = response.getWriter(); String title = "总点击量"; String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<h2 align=\"center\">" + hitCount + "</h2>\n" + "</body></html>"); } public void destroy() { // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库 } }
Sekarang marilah kita menyusun Servlet di atas dan menciptanya dalam fail web.xml Mengikuti entri:
.... <servlet> <servlet-name>PageHitCounter</servlet-name> <servlet-class>PageHitCounter</servlet-class> </servlet> <servlet-mapping> <servlet-name>PageHitCounter</servlet-name> <url-pattern>/PageHitCounter</url-pattern> </servlet-mapping> ....
Sekarang panggil Servlet ini dengan mengakses URL http://localhost:8080/PageHitCounter. Ini akan meningkatkan nilai pembilang sebanyak 1 setiap kali halaman dimuat semula dan hasilnya adalah seperti berikut:
Jumlah klik
|
Kaunter Klik Laman Web
Banyak kali, anda mungkin berminat untuk mengetahui jumlah bilangan hits untuk keseluruhan tapak web anda. Dalam Servlets ini juga sangat mudah, kita boleh melakukan ini menggunakan penapis.
Berikut ialah langkah yang perlu anda ambil untuk melaksanakan kaunter klik tapak web ringkas berdasarkan kitaran hayat penapis:
Mulakan global dalam kaedah init() penapis pembolehubah.
Setiap kali kaedah doFilter dipanggil, pembolehubah global dinaikkan.
Jika perlu, anda boleh menggunakan jadual pangkalan data untuk menyimpan nilai pembolehubah global dalam destroy() penapis. Nilai ini boleh dibaca dalam kaedah init() pada kali berikutnya penapis dimulakan. Langkah ini adalah pilihan.
Di sini kami mengandaikan bahawa bekas web tidak akan dapat dimulakan semula. Jika terdapat restart atau Servlet dimusnahkan, kaunter klik akan ditetapkan semula.
Contoh
Contoh ini menunjukkan cara melaksanakan kaunter klik tapak web yang mudah:
// 导入必需的 java 库 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class SiteHitCounter implements Filter{ private int hitCount; public void init(FilterConfig config) throws ServletException{ // 重置点击计数器 hitCount = 0; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { // 把计数器的值增加 1 hitCount++; // 输出计数器 System.out.println("网站访问统计:"+ hitCount ); // 把请求传回到过滤器链 chain.doFilter(request,response); } public void destroy() { // 这一步是可选的,但是如果需要,您可以把 hitCount 的值写入到数据库 } }
Sekarang marilah kita menyusun Servlet di atas dan menciptanya dalam fail web.xml Perkara berikut entri:
.... <filter> <filter-name>SiteHitCounter</filter-name> <filter-class>SiteHitCounter</filter-class> </filter> <filter-mapping> <filter-name>SiteHitCounter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ....
Sekarang lawati mana-mana halaman di tapak web, seperti http://localhost:8080/. Ini akan menambah pembilang sebanyak 1 setiap kali mana-mana halaman diklik dan ia akan memaparkan mesej berikut dalam log:
网站访问统计: 1 网站访问统计: 2 网站访问统计: 3 网站访问统计: 4 网站访问统计: 5 ..................