我们建立一个文件recoder.txt文件,用于保存访问量,可以可以保证稳定增长.
实现方法
建立InitServlet ,用于初始化我的Servletcontext,和在关闭tomcat时保存访问量,当用户登录一次我们取出ServletContext取出,并+1,
其中在Web初始化时加入这句话
详细代码如下:
登录界面
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//告诉浏览器用UTF-8解析
response.setContentType("text/html ;charset=utf-8");
//字符编码是以UTF-8,通常结合使用更好
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.println("<h1>用户登录</h1>");
//action应该这样写 /web应用名/Servlet的url
out.println("<form action ='/counter/logincl' method='post'>");
out.println("用户id:<input type='text' name='id' '/></br>");
out.println("密   码:<input type='password' name='password'/></br>");
out.println("<input type='submit' value='登录'/></br>");
out.println("</form>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
登录控制界面’
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String pwd=request.getParameter("password");
if("123".equals(pwd)){
//合法
//向servletContext中添加属性
//1,先取出
String nums=(String) this.getServletContext().getAttribute("nums");
//2,再+1
this.getServletContext().setAttribute("nums",""+(Integer.parseInt(nums)+1));
//3,在更新
//这种提交方式,不能防止刷新带来的次数依然增加问题
// request.getRequestDispatcher("/ok").forward(request, response);
//这个方式可以简单的解决刷新问题
response.sendRedirect("/counter/ok");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
初始化界面
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
//把ServletContext的值重新保存到文件
//1,首先得到该文件的真实路径
String filePath=this.getServletContext().getRealPath("record.text");
//2,打开这个文件
FileWriter filewriter = null;
BufferedWriter bufferedreader = null;
try {
filewriter=new FileWriter(filePath);
//转换为 BufferedRaeder 效率更高
bufferedreader=new BufferedWriter(filewriter);
String nums=(String) this.getServletContext().getAttribute("nums");
//从新写回文件
bufferedreader.write(nums);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//一定要要关闭流
try {
bufferedreader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
filewriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
//从record。text中读取浏览量
//1,首先得到该文件的真实路径
String filePath=this.getServletContext().getRealPath("record.text");
//2,打开这个文件
try {
FileReader filereader=new FileReader(filePath);
//转换为 BufferedRaeder 效率更高
BufferedReader bufferedreader=new BufferedReader(filereader);
String nums=bufferedreader.readLine();
//把nums添加到servletContext中去
this.getServletContext().setAttribute("nums",nums);
//一定要要关闭流
bufferedreader.close();
filereader.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
登录成功界面
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<h1>登录成功</h1>");
String nums=this.getServletContext().getAttribute("nums").toString();
out.println("该页面被访问了:"+nums+"次");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
如果,服务器非正常关闭怎么办?
建议:使用线程,定时存写数据到文件中。