利用ServletContext实现网页计数器

(1)思路分析:

使用ServletContext 和 记事本两个东西,将登陆的次数写在txt文件中,首先是在在登陆的条件下 利用Servlet的init()函数初始化打开txt计数器文件并读取然后在用户登录后的过程中访问网站不会再重复技术只计数一次,直到注销之后destroy()然后计数器文件加1;

(2)登陆界面

package com.tsinghua;

import javax.servlet.http.*;

import java.io.*;

public class Login extends HttpServlet {

	public void doGet(HttpServletRequest req,HttpServletResponse res){

		//业务逻辑 

		try {

			//中文乱码
			res.setContentType("text/html;charset=gbk");

			PrintWriter pw=res.getWriter();

			//返回登录界面
			pw.println("<html>");
			pw.println("<body bgcolor=#CED3FF>");

			pw.println("<img src=imgs/1.GIF><hr><center>");
			//得到error信息
			String info=req.getParameter("info");

			if(info!=null){
				pw.println("<h1>你的用户名或是密码错误!</h1><br>");
			}
			pw.println("<h1>登录界面</h1>");
			pw.println("<form action=loginCl method=post>");
			pw.println("用户名:<input type=text name=usrename><br>");
			pw.println("密码:<input type=password name=passwd><br>");
			pw.println("<input type=checkbox name=keep value=2>两周内不再重新登录<br>");
			pw.println("<input type=submit value=login><br>");
			pw.println("</form>");
			pw.println("</center><hr><img src=imgs/mylogo.gif>");
			pw.println("</body>");
			pw.println("</html>");

	    }
	    catch (Exception ex) {

	    	ex.printStackTrace();
	    }
	}

	public void doPost(HttpServletRequest req,HttpServletResponse res){

		this.doGet(req,res);

	}
}

(2)处理登陆页面的请求

package com.tsinghua;

import javax.servlet.http.*;

import java.io.*;
import java.sql.*;

public class LoginCl extends HttpServlet {

	//重写init函数
	public void init(){

		try {

			//只会被调用一次

			//创建一个FileReader
			FileReader  f=new FileReader("f:\\myCounter.txt");

			BufferedReader br=new BufferedReader(f);

			//读出一行数据
			String numVal=br.readLine();

			 //一定要关闭文件流
			br.close();

			//将times值放入到servletcontext
			this.getServletContext().setAttribute("visitTimes",numVal);

			System.out.println ("inti 被调用");
	    }
	    catch (Exception ex) {

	   		ex.printStackTrace();
	    }

	}

	//重写destroy函数

	public void destroy(){

		try {

			//在将新的次数写会去
			FileWriter  fw=new FileWriter("f:\\myCounter.txt");

    		<span style="white-space:pre">	</span>BufferedWriter bw=new BufferedWriter(fw);

    		<span style="white-space:pre">	</span>//在文件中写入数据
    		<span style="white-space:pre">	</span>bw.write(this.getServletContext().getAttribute("visitTimes").toString());

    		<span style="white-space:pre">	</span>//关闭文件流
    		<span style="white-space:pre">	</span>bw.close();

			System.out.println ("destroy 被调用");
	    }
	    catch (Exception ex) {

	    	ex.printStackTrace();

	    }
	}
	//处理get请求
	//req: 用于获得客户端(浏览器)的信息
	//res: 用于向客户端(浏览器)返回信息
	public void doGet(HttpServletRequest req,HttpServletResponse res){

		//业务逻辑
		Connection ct=null;
		Statement sm=null;
		ResultSet rs=null;
		try {

			//接受用户名和密码
			String u=req.getParameter("usrename");
			String p=req.getParameter("passwd");

			//调用UserBeanCl,1.创建一个对象
			UserBeanCl ubc=new UserBeanCl();

			//2.使用UserBeanCl的方法
			if(ubc.checkUser(u,p)){

					//合法用户

					String keep=req.getParameter("keep");

					if(keep!=null){
					//将用户名和密码保存在客户端(cookie)
					//创建
					Cookie name=new Cookie("myname",u);
					Cookie pass=new Cookie("mypasswd",p);

					//设置时间
					name.setMaxAge(14*24*3600);
					pass.setMaxAge(14*24*3600);

					//回写到客户端

					res.addCookie(name);
					res.addCookie(pass);

				}

				//将用户名和密码放入到session中
				HttpSession hs=req.getSession(true);

				hs.setMaxInactiveInterval(30);

				hs.setAttribute("uname",u);

				//将serlvetContext中的 visitTime所对应的值++
				String times=this.getServletContext().getAttribute("visitTimes").toString();

				//对times++再重新放回servlet
				this.getServletContext().setAttribute("visitTimes",(Integer.parseInt(times)+1)+"");

				//跳转到wel
				res.sendRedirect("Main");

			}else{

				//不合法

				//跳转
				res.sendRedirect("login");//写你要到的servlet的那个url
			}

		}
	    catch (Exception ex) {

	    	ex.printStackTrace();
	    }finally{

	    	try {

	    		if(rs!=null){

	    		rs.close();
		    	}
		    	if(sm!=null){

		    		sm.close();
		    	}
		    	if(ct!=null){

		    		ct.close();
		    	}
		    }
		    catch (Exception ex) {

		    	ex.printStackTrace();
		    }

	    }
	}

	//处理post请求
	//req: 用于获得客户端(浏览器)的信息
	//res: 用于向客户端(浏览器)返回信息
	public void doPost(HttpServletRequest req,HttpServletResponse res){

		this.doGet(req,res);

	}
}

(3)登陆成功后提交给wel页面

package com.tsinghua;

import javax.servlet.http.*;

import java.io.*;
import java.sql.*;
import java.util.*;

public class Wel extends HttpServlet {

	//处理get请求
	//req: 用于获得客户端(浏览器)的信息
	//res: 用于向客户端(浏览器)返回信息
	public void doGet(HttpServletRequest req,HttpServletResponse res){

		//业务逻辑
		Connection ct=null;
		PreparedStatement ps=null;
		ResultSet rs=null;

		//业务逻辑 

		try {

			//从session中得到用户名
			HttpSession hs=req.getSession(true);
			String myName=(String)hs.getAttribute("uname");
			String name="";
			String passwd="";
			if(myName==null){

				//如果session中没有用户信息,再看看有没有cookie信息
				//从客户端得到所有cookie信息
				Cookie [] allCookies=req.getCookies();

				int i=0;
				//如果allCookies不为空...
				if(allCookies!=null){

					//从中取出cookie
					for(i=0;i<allCookies.length;i++){

						//依次取出
						Cookie temp=allCookies[i];

						if(temp.getName().equals("myname")){

							//得到cookie的值
							name=temp.getValue();
						}
						else if(temp.getName().equals("mypasswd")){
							passwd=temp.getValue();
						}

					}

					System.out.println ("myname="+name+" pas="+passwd);
					if(!name.equals("")&&!passwd.equals("")){

						//到logincl去验证
						res.sendRedirect("loginCl?usrename="+name
						+"&passwd="+passwd);
						return;
					}

				}

				//返回登录界面
				res.sendRedirect("login?info=error1");
				return ;
			}

			//解决中文乱码
			res.setCharacterEncoding("gbk");

			PrintWriter pw=res.getWriter();
			pw.println("<body bgcolor=#CED3FF>");

			//添加网页访问次数的功能			

			pw.println("该网页被访问了"+this.getServletContext().getAttribute("visitTimes").toString()+"次<br>");			

			pw.println("</body>");

	    }
	    catch (Exception ex) {

	    	ex.printStackTrace();
	    }
	}

	public void doPost(HttpServletRequest req,HttpServletResponse res){

		this.doGet(req,res);

	}
}

这里没有写登陆成功之后要返回的页面 仅实现网站用户在登录到注销只计数一次的过程!

时间: 2024-11-07 14:38:11

利用ServletContext实现网页计数器的相关文章

用网页计数器来说明application和session

jsp的代码: 1 <body> 2 <h1>网页计数器</h1> 3 <% 4 //第一次访问数据为空 5 Object obj=application.getAttribute("count"); 6 7 //用户第一次访问 8 if(obj==null){ 9 application.setAttribute("count",1); 10 }else {//非第一次访问 11 Integer num=(Integer)

利用htmlparser提取网页纯文本的例子

import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; importorg.htmlparser.filters.TagNameFilter; import org.htmlparser.tags.TableTag; import org.htmlparser.util.NodeList; /** * 标题:利用htmlparser提取网页纯文本的例子 */ publi

js利用clipboardData在网页中实现截屏粘贴的功能

目前仅有高版本的 Chrome 浏览器支持这样直接粘贴,其他浏览器目前为止还无法粘贴,不过火狐和ie11浏览器在可编辑的div中能够粘贴截图的图片也是base64位和Chrome利用clipboardData的效果是一样的,只是在火狐和ie11浏览器中目前还无法实现类似用clipboardData直接获取图片的base64数据,它是自带的直接进去img数据 完整实例: <!DOCTYPE HTML><html lang="en-US"><head>&

有关利用python获取网页, 以及KDD近几年论文标题与摘要链接

最近一直在看KDD的论文,不过,由于老师并没有什么合理的方向性,所以考虑把kdd中的大部分内容都利用python将所有标题.摘要获取下来. 还有一个原因在于,看acm上的摘要,都只显示了两行,再看多点儿,就需要点击expand,觉得非常不爽,所以就用python脚本把html标签删掉.. 想到的方法自然是通过python利用正则表达式对ACM的KDD网页进行字符串匹配,获得相应的网页字符串,然后将所有html的标签删除(例如<div></div>等), 将这些标签删除之后,就能够得

利用canvas将网页元素生成图片并保存在本地

利用canvas将网页元素生成图片并保存在本地 首先引入三个文件: 1.<script type="text/javascript" src="js/html2canvas.js"></script> 2.<script type="text/javascript" src="js/base64.js"></script> 3.<script type="text

ServletContext与网站计数器

什么是ServletContext? ServletContext是服务器的一个公用的空间,是不同的浏览器共享的一个数据. 由图可以看出ServletContext和Cookie与session之间的区别. ServletContext有哪些用处呢?1.网站计数器2.网站在线用户的显示3.简单的聊天工具总之,如果是设计到不同用户共享带护具,而中和喜爱数据量不大,同时又不希望写入数据库中,我们就可以考虑使用ServletContext来实现.注意事项:因为存在ServletContext中的数据会

利用jquery制作网页导航定位

我们在日常浏览网站中,由于网站包含信息量大,例如购物网站中会有许多商品.那么对于这样的情况,往往会有导航栏来帮助我们迅速的找到自己想要的信息.例如图中所示,左侧是商品列表,右侧是商品分类导航栏. 我们现在需要做到的效果是: 1.点击某个商品分类,自动跳转至具体的商品列表. 2.在鼠标滚动浏览商品的同时,根据左侧的商品信息的变化情况,右侧的分类名称会自动标红.表示现在浏览的商品正是该分类下的商品. 实现的基本思路: 1.设置锚点.在导航栏的<a>标签中,设置"href"属性为

利用python登录网页并自动签到

最近接触python操作网页,甚是方便.很多网站为了粘贴用户,要求每天签到送积分,而我们这么忙哪有空去干这个呀,python可以自动帮我们做这个事情. 实验网站:www.shuobar.com,这是一个提供免费电话的网站,以前在任何时候打电话都免费的,但是现在只能在中午12点之前免费,其他时间打电话要积分,每天签到可以送一些积分 实验方法:windows下pyhton编程 1.用户的登录.www.shuobar.com采用QQ授权登录,不提供帐号密码的登录方式,这给自动签到带来一些不便,首先研究

Python爬虫——利用爬虫从网页获取视频资源

在某某花网上搜到一个视频,为了将视频下载到本地,我们尝试利用爬虫抓取资源 第一,我们检查网页元素,之后刷新页面 从上述信息中我们找到两个后缀名为.mp4的文件信息,其中第二条的status为206,留意它 点击这条信息,从中我们获取到了这条视频真正的URL 根据视频URL信息,参照之前爬取网页图片的方法,我们成功将视频文件保存至本地 (方法与其大同小异,只需将爬取代码中的URL链接进行更换即可) [传送门:https://www.cnblogs.com/fcbyoung/p/12291235.h