【JavaWeb程序设计】完成大作业的时候的一些功能实现

5 篇文章 0 订阅

1.   使用cookie实现记住用户名和密码

//读取cookie中的值,然后进行 转码 和 密码解密,避免出现中文乱码
Cookie[] cookies=request.getCookies();
if(cookies!=null && name==null && passWord==null){
	for(int i=-1;++i<cookies.length;){
		if(cookies[i].getName().equals("UserName")){
			name=java.net.URLDecoder.decode(cookies[i].getValue(),"UTF-8");
		}
		if(cookies[i].getName().equals("Key")){
			passWord="";
			String p=java.net.URLDecoder.decode(cookies[i].getValue(),"UTF-8");
			for(int j=-1;++j<p.length();){
				passWord+=(char)(p.charAt(j)^'a');
			}
		}
	}
}

//将用户名密码存放在浏览器的cookie里面,不同的浏览器cookie存放的位置不一样
String ec_name=java.net.URLEncoder.encode(name,"UTF-8");//用一个String存储避免转码后在文本框输出中文乱码
Cookie cookie=new Cookie("UserName",ec_name);//将转码后的名字存进"UserName"这一名字中
cookie.setMaxAge(600);//设置cookie存活时间是1分钟
response.addCookie(cookie);//添加cookie
String key = "";
// 给密码加密然后存储到cookie中
for(i=-1;++i<passWord.length();){
	key+=(char)(passWord.charAt(i)^'a');
}
//将密码转码
String ec_key=java.net.URLEncoder.encode(key,"UTF-8");//java.lang.IllegalArgumentException: Control character in cookie value or attribute.
cookie=new Cookie("Key",ec_key);//将转码后的密码存进"Key"这一名字中
cookie.setMaxAge(600);//设置cookie存活时间是1分钟
response.addCookie(cookie);//添加cookie
====================================================================================

2.   JS判断使用的是哪个浏览器
/* 判断使用的是哪个浏览器 */

function getExplorer() {
	var explorer = window.navigator.userAgent ;
	//ie 
	if (explorer.indexOf("MSIE") >= 0) {
		browser = 1;
	}
	//firefox 
	else if (explorer.indexOf("Firefox") >= 0) {
		browser = 2;
	}
	//Chrome
	else if(explorer.indexOf("Chrome") >= 0){
		browser = 3;
	}
	//Opera
	else if(explorer.indexOf("Opera") >= 0){
		browser = 4;
	}
	//Safari
	else if(explorer.indexOf("Safari") >= 0){
		browser = 5;
	}
}
====================================================================================

3.     ajax技术

/* ajax初始化XMLHTTPREQ */
function createXMLHttpRequest(){
	//  window.alert("调用createXMLHttpRequest()");
	//对于Mozilla浏览器
	if(window.XMLHttpRequest){
		//直接使用XMLHttpRequest函数来创建XMLHttpRequest对象
		XMLHttpReq = new XMLHttpRequest();
	}
	//对于IE浏览器
	else if(window.ActiveXObject){
		try{
			//使用ActiveXObject函数创建浏览器
			XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e){
			//如果出现异常,再次尝试以如下方式创建XMLHttpRequest
			try{
				XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e){
				window.alert("无法调用ajax技术");
			}
		}
	}
}

function ajax(){
	createXMLHttpRequest();
	var url = "XXX.jsp";//这里填写需要后台运行的JSP文件
	XMLHttpReq.open("POST",url,true);
	XMLHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	XMLHttpReq.onreadystatechange = function(){
		if(XMLHttpReq.readyState == 4){
			window.alert("4");
			if(XMLHttpReq.status == 200){
			    window.alert(XMLHttpReq.responseText);//这里是返回页面的全部内容
			}
		}
	};
	XMLHttpReq.send("info="+msg+"&p=1.0");//如果对应的JSP文件有参数的话,放在这里。
}
====================================================================================

4.   数据库语言可以都放在一个JSP文件里面,然后通过指定数字调用指定的数据库语言

<%@page language ="java" import="java.sql.*" import="java.util.*" import="java.text.*" pageEncoding="utf-8"%>
<%
    request.setCharacterEncoding("utf-8");
	String key = request.getParameter("k");
	if(key!=null && key.equals("databasekey")){
	//	out.println("密码通过");
		String number = request.getParameter("n");
		if(number!=null){
		//	out.println("进入"+number+"号通道");
			///      连接数据库      /
			Class.forName("com.mysql.jdbc.Driver");
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/用户名?user=用户名&password=密码");
			Statement stat=conn.createStatement();
			int i = -1;
			PreparedStatement ps =null;
			String sql = "";
			String name = "";
			String id = "";
			switch(number){
				// 1.插入评论 /
				/**
				*  1.  user 当前登录的用户名
				*  2.  Comment 发表的评论内容
				*/
				case "1":
					name = (String)request.getSession().getAttribute("user");
					String content = request.getParameter("Comment");
					id = request.getParameter("ID");
					if(name!=null && content!=null && id!=null && !name.equals("") && !content.equals("") && id.matches("^[0-9]*[1-9][0-9]*$")){
						String ip=request.getHeader("x-forwarded-for");
						if (ip == null) {
							ip=request.getRemoteAddr();
						}
						String postTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
						sql = "Insert into Comment(IP,Name,Content,PostTime) Values(?,?,?,?)";
						ps = conn.prepareStatement(sql);
						ps.setString(1,ip);
						ps.setString(2,name);
						ps.setString(3,content);
						ps.setString(4,postTime);
						i=ps.executeUpdate();
						if(i>0){
							out.println(name+":"+content);
							/// 评论与留言映射  
							sql = "Insert into CL(ListId,CommentId) Values(?,(SELECT MAX(ID) from Comment))";
							ps = conn.prepareStatement(sql);
							ps.setString(1,id);
							ps.executeUpdate();
						}
					}
					break;
				case "2":
				/ 2. 上传头像  
				/**
				 *  1.  user 当前登录的用户名
			 	 *  2.  it 上传图片的后缀名,图片的名字用用户名命名。
			     */
					name = (String)request.getSession().getAttribute("user");
					String Image = request.getParameter("i");
					if(name!=null && Image!=null && !name.equals("") && !Image.equals("")){
						sql = "Update HeadImage set Hi=?  where UserId=(Select id from user where UserName=?)";
						ps = conn.prepareStatement(sql);
						ps.setString(1,Image);
						ps.setString(2,name);
						ps.executeUpdate();
					}
					break;
				case "3":
				     ///   3. 添加朋友   //
				    name = (String)request.getSession().getAttribute("user");
					String FriendName = request.getParameter("f");
					if(name!=null && FriendName!=null && !FriendName.equals("") &&!name.equals("")){
				        sql = "Insert into Friends(NameId,FriendId) Values((Select id from user where UserName=?), (Select id from user where UserName=?) )";
						ps = conn.prepareStatement(sql);
						ps.setString(1,name);
						ps.setString(2,FriendName);
						ps.executeUpdate();
						ps = conn.prepareStatement(sql);
						ps.setString(1,FriendName);
						ps.setString(2,name);
						ps.executeUpdate();
					}
				    break;
				case "4":
				      /  4.点赞  ///
					  id = request.getParameter("id");
					  if(id!=null && id.matches("^[0-9]*[1-9][0-9]*$")){
					        sql = "UPDATE List SET Agree=Agree+1 WHERE id=?";
						    ps = conn.prepareStatement(sql);
						    ps.setString(1,id);
						    ps.executeUpdate();
					  }
					  break;
				default:break;
			}
			if(conn!=null){
				conn.close();
			}
		}
	}
%>
====================================================================================

5.  如何使用ajax实现别人点赞,评论,添加好友,艾特的时候,不刷新即可弹出提示框。(生产中还是用websocket代替ajax长轮询)

1. application的作用是  所有访问到这个网页的人都可以访问application下的所有变量。

2. Session的作用是 每个人都有自己的一片小天地。

那么实现的方法:

    ①  用appliaction产生一个链表LInkedList<Object>  a,所有人都可以访问这个链表。

    ②  用Session给每个人都产生一个链表LinkedList<Object>  s,作用是从application中提取出自己的信息。

    ③  建立一个JSP文件 A.jsp。别人在点赞,评论,添加好友,艾特的时候,可以分别发以下信息给A.jsp。

                    点赞:A agree B   评论:A comment B   添加好友:A friend B  艾特@:A aite B

          发送信息后,存储在LInkedList<Object>  a

    ④ 对A.jsp实现ajax长轮询,代码如下:

/* ajax长轮询,查询谁评论自己或为自己点赞 */
function sendEmptyRequest(){
	if(document.getElementById("Loginname").innerHTML !="" ){//判断用户是否已经登录
		//ajax技术
		createXMLHttpRequest();
		var url = "A.jsp";
		XMLHttpReq.open("POST",url,true);
		XMLHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		XMLHttpReq.onreadystatechange = function(){
		if(XMLHttpReq.readyState == 4){
			if(XMLHttpReq.status == 200){
				var s = XMLHttpReq.responseText;
				if(s.length<=0){return;}
				//  input.innerText = input.value + s + "," +s.substr(0,1)+ ","+(s.substr(0,1)=="f") +";";
				//读取A.jsp页面后如果找到了自己的信息,就会输出对应的字符,然后XMLHttpReq.responseText获取该页面内容。
					if(s.substr(0,1) == "c"){
						window.alert("你被评论了。");
						document.getElementById("ncomment").innerHTML++;
					}
					else if(s.substr(0,1) == "l"){
						window.alert("你被点赞了。");
						document.getElementById("nlike").innerHTML++;
					}
					else if(s.substr(0,1) == "f"){
						window.alert("有人添加你为好友。");
					}
					else if(s.substr(0,1) == "a"){
						window.alert("有人艾特你。");
					}	
					else if(s.substr(0,1) == "r"){
						window.alert("有人拒绝了您的好友请求。");
					}	
					else if(s.substr(0,1) == "p"){
						window.alert("有人接受了您的好友请求。");
					}												   
				}
			}
		};
		XMLHttpReq.send(null);
	}
	setTimeout("sendEmptyRequest()",2000);//表示每两秒钟调用该函数一次
}
      ⑤ 在A.jsp中遍历LInkedList<Object>  a,如果A agree B 中B是自己的话就存储进LinkedList<Object>  s中,就可以读取s来获取关于自己的信息了。

A.jsp的代码如下:

<%@page language ="java" import="java.sql.*" import="java.util.*" import="java.text.*" import="msg.Notice" pageEncoding="utf-8"%><%
    request.setCharacterEncoding("utf-8");
	response.setContentType("text/html;charset=utf-8");
	String user = (String)request.getSession().getAttribute("user");//获取当前登录的名字
	if(user!=null){
		String action = request.getParameter("Action");//点赞:A agree B   评论:A comment B   添加好友:A friend B  艾特@:A aite B
		String id = request.getParameter("id");//帖子id
		///    建立或获取appliaction链表LInkedList<Object>  a /
		if(application.getAttribute("action")==null){
            application.setAttribute("action",new LinkedList<String>());
        }
		if(request.getSession().getAttribute("notice")==null){
			request.getSession().setAttribute("notice",new LinkedList<Notice>());
		}
		///      获取action的时间    
	    String postTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
	    LinkedList<String> ll = (LinkedList<String>)application.getAttribute("action");
		///     获取Session链表LinkedList<Object>  s  //
		//  Notice用了JavaBeans,一个类,将点赞:A agree B   评论:A comment B   添加好友:A friend B  艾特@:A aite B里面的内容分开存储。
		LinkedList<Notice> ll_request = (LinkedList<Notice>)request.getSession().getAttribute("notice");
		//      把action存入application链表中   
	    if(action!=null){
	    	ll.add(action+" "+id);
		    application.setAttribute("action",ll);
	    }
		/  进行application链表的遍历,提取出关于自己的信息   ///
		String s = "";
	    for(int i=0;i<ll.size();i++){
			s = ll.get(i);
		    String[] op = s.split(" ");
		    if(op.length >=3){
				if(user.equals(op[2])){
			        switch(op[1]){
				        case "quit":break;
				        case "login":break;
				        case "comment":
					           ll_request.add(new Notice(Notice.COMMENT,op[0],op[2],Integer.parseInt(op[3]),postTime));
							   request.getSession().setAttribute("notice",ll_request);
							   out.print("c");//用于ajax返回值中判断是评论
							   ll.remove(i);
				               break;
				        case "like":
							   ll_request.add(new Notice(Notice.LIKE,op[0],op[2],Integer.parseInt(op[3]),postTime));
							   request.getSession().setAttribute("notice",ll_request);
							   out.print("l");//用于ajax返回值中判断是赞
							   ll.remove(i);
					           break;
				        case "friend":
							   ll_request.add(new Notice(Notice.ADDFRIEND,op[0],op[2],-1,postTime));
							   request.getSession().setAttribute("notice",ll_request);
							   out.print("f");//用于ajax返回值中判断是添加好友
							   ll.remove(i);
					           break;
				        case "aite":
							   ll_request.add(new Notice(Notice.AITE,op[0],op[2],-1,postTime));
							   request.getSession().setAttribute("notice",ll_request);
							   out.print("a");//用于ajax返回值中判断是艾特
							   ll.remove(i);
					           break;
				        case "refuse":
							   ll_request.add(new Notice(Notice.REFUSE,op[0],op[2],-1,postTime));
							   request.getSession().setAttribute("notice",ll_request);
							   out.print("r");//用于ajax返回值中判断是拒绝添加朋友
							   ll.remove(i);
					           break;
					    case "pass":
						       ll_request.add(new Notice(Notice.PASS,op[0],op[2],-1,postTime));
							   request.getSession().setAttribute("notice",ll_request);
							   out.print("p");//用于ajax返回值中判断是拒绝添加朋友
							   ll.remove(i);
					           break;
				        default:break;
					}
			    }
		    }
			else{
				ll.remove(i);
			}
	    }
	}
%>




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值