写一个网站的计数器,根据servletContext属性的设置与读取方法展示网站计数的功能。这种方法使用到javase的文件流、缓冲流处理,比我们直接从数据库中读取的优势在于可以减少频繁的对于数据库的请求与设置。减小服务器的压力。【牧牛遛马】
1、写一个num_servlet项目
2、在项目中建立一个“record.txt”的文件用来记录访问次数,初始化可以给到0;
3、写一个Num_Servlet类,在类中的init方法中读取文件“record.txt”中的数据,并设置到Num_Servlet的ServletContext的属性中。然后在doGet方法中进行访问次数的请求累加逻辑实现,最后在destroy方法中把修改后的ServletContext的属性记录到record.txt文件中。
4、以下展示的是Num_Servlet的代码实现。
package com.sky.sevlet;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Num_Servlet
*/
@WebServlet("/num")
public class Num_Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public Num_Servlet() {
super();
// TODO Auto-generated constructor stub
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("utf8");
response.setCharacterEncoding("utf8");
response.setContentType("text/html;charset=utf8");
PrintWriter out = response.getWriter();
System.out.println("doGet");
//得到servletContext的numbers属性,并递增
String nums = (String) this.getServletContext().getAttribute("numbers");
this.getServletContext().setAttribute("numbers", (Integer.parseInt(nums)+1)+"");
//String nums1 = (String) this.getServletContext().getAttribute("numbers");
//输出到桌面演示
out.println("访问次数记录:"+nums);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
public void init(){
//得到记录文件并读取内容
String filePath = this.getServletContext().getRealPath("record.txt");
FileReader fileReader=null;
BufferedReader bufferedReader = null;
try {
System.out.println("init");
fileReader = new FileReader(filePath);
bufferedReader = new BufferedReader(fileReader);
String nums = bufferedReader.readLine();
//设置到servletContext中
this.getServletContext().setAttribute("numbers", nums);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
bufferedReader.close();
fileReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void destroy(){
//把servletContext的numbers属性设置到文件中
FileWriter fileWriter=null;
BufferedWriter bufferedWriter = null;
String filePath = this.getServletContext().getRealPath("record.txt");
System.out.println("destroy");
try {
fileWriter = new FileWriter(filePath);
bufferedWriter = new BufferedWriter(fileWriter);
String nums = (String) this.getServletContext().getAttribute("numbers");
bufferedWriter.write(nums);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
bufferedWriter.close();
fileWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
6、通过浏览器访问测试计数功能如下:
通过以上内容实现了网站的计数功能。