0
点赞
收藏
分享

微信扫一扫

JavaWeb新闻发布系统案例4

他说Python 2022-03-31 阅读 74

会话管理



cookie


<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>cookie</title>
</head>
<body>
<!-- Cookie存储的基本使用 -->
	<!-- 	
			(1)创建Cookie对象,绑定数据(在服务器端获取指定数据通过cookie保存)
				** Cookie cookie = new Cookie(key,value);
			(2)发送Cookie对象(从服务端---》客户端)
				** response.addCookie(cookie)
			(3)获取Cookie,获取数据
				** Cookie [] cookies = request.getCookies()
				
				
		注意事项:
			如果通过cookie进行保存数据时,数据中含有特殊的字符:空格,@&*等等
			需要进行编码和解码	
				编码 URLEncoder.encode("字符串","utf-8");
				解码 URLDecoder.decode("字符串","utf-8");	
	 -->
	 
	 <%
	 	//1.创建Cookie 保存用户名   键值对的形式
	 	Cookie cookieUsername = new Cookie("username",URLEncoder.encode("李小香", "utf-8")); 
	 	//2.通过response响应对象发送的浏览器客户端进行保存
	 	response.addCookie(cookieUsername);
	 
	 %>
</body>
</html>
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<!-- 
		获取cookied.jsp页面中保存的username
	 -->
	<%
		//获取cookie
		Cookie[] cookies = request.getCookies();
		//遍历
		//避免空指针异常的出现,判断非空
		if (null != cookies) {
			for (Cookie cookie : cookies) {
				//out.println(cookie.getName()+"    ===   "+cookie.getValue()+"<br/>");
				if ("username".equals(cookie.getName())) {
					//由于当初保存的时候含有特殊字符,进行了编码  获取后   需要进行解码
					out.println(cookie.getName() + "    ===   " + URLDecoder.decode(cookie.getValue(), "utf-8")
							+ "<br/>");
				}
			}
		}
	%>
</body>
</html>

session


<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>session</title>
</head>
<body>
	<%
		/*
			session会话
				1.session属于jsp内置对象
				2.session可以临时存储数据在一个会话中,达到数据共享的目的
				3.session所保存的数据是在服务器端,与Cookie相反。
				4.方法:setAttribute   getAttribute()
				5.与Cookie不同的是:cookie只能保存文本  session可以保存Object
				
		*/

		//通过session保存用户名
		session.setAttribute("username", "李小香");
	%>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>session</title>
</head>
<body>
	<%
		//获取session
		String str = (String) session.getAttribute("username");
		out.println(str);
	%>

</body>
</html>

session和Cookie的区别



运用以上知识运用到后台登录主页界面


<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!-- 实现自动登录 -->
<%
	String username = null;
	//获取cookie
	Cookie[] cookies = request.getCookies();
	if (null != cookies) {
		for (Cookie cookie : cookies) {
			if ("username".equals(cookie.getName())) {
				username = URLDecoder.decode(cookie.getValue(), "utf-8");
			}
		}
	}
	if (username != null) {
		response.sendRedirect("admin.jsp");
	}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>新闻发布系统-管理员登录</title>
<!-- 引入login.css -->
<link rel="stylesheet" type="text/css" href="css/login.css" />
<!-- JavaScript 验证表单区域 -->
<script type="text/javascript">
	var code = "";//保存验证码
	//验证的需求:利用随机数  +拼接+数组存储需要随机的字符
	var arr = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
			'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
			'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ];
	function $(id) {
		return document.getElementById(id);
	}
	//加载函数
	window.onload = function() {
		//设置username的焦点事件
		$("username").onblur = function() {
			var usernameValue = this.value;
			if (!usernameValue) {
				alert('用户名不能为空')
				return false;
			}
			return true;
		}
		//设置password的焦点事件
		$("password").onblur = function() {
			var passwordValue = this.value;
			if (!passwordValue) {
				alert('密码不能为空')
				return false;
			}
			return true;
		}

		//获取表单设置表单的阻止提交事件
		$("myForm").onsubmit = function() {
			if (!$("username").onblur() || !$("password").onblur()
					|| !$("code").onblur()) {
				return false;
			}
			return true;
		}

		//获取验证码进行匹配
		$("code").onblur = function() {
			//获取输入项中的验证码
			var inputCode = this.value;
			//获取span标签随机生成保留的验证码
			var spanCode = $("code_val").innerHTML;
			if (!inputCode) {
				alert('验证码不能为空');
				return false;
			} else {//编写了验证码
				if (inputCode != spanCode) {
					alert('验证码输入错误');
					this.value = "";
					//重新生成
					return false;
				}
			}
			return true;
		};
		//随机生成的验证码 有四个字母或者数字?    随机
		//javascript  随机器   Math.random()  0-1之间		

		//生成一个0-9的随机数
		/* var sj = Math.random()*10;
		// 向下取整 
		console.log(Math.floor(sj)); */

		setCode();

		/* 如果span中存储的验证码不清晰  需要重新修改  设置span的点击事件 */
		$("code_val").onclick = function() {
			setCode();
		}
	};

	//封装验证码生成
	function setCode() {
		//清空上一次保留的验证码
		code = "";
		//通过Math.random();产生一个随机数
		for (var i = 0; i < 4; i++) {
			/* 取范围 乘  数组的长度个数 */
			var sj = Math.floor(Math.random() * arr.length);
			//console.log(sj)
			//console.log(arr[sj]);  //根据随机数获取数组中的元素
			code += arr[sj];
		}
		//获取存储验证码的span标签
		$("code_val").innerHTML = code;
	}
</script>

</head>
<body>
	<!-- 登录大容器 -->
	<div id="login">
		<!-- 上 -->
		<div id="top">
			<div id="top_left">
				<img src="images/login_03.gif" />
			</div>
			<div id="top_center"></div>
		</div>
		<!-- 中 -->
		<div id="center">
			<div id="center_left"></div>
			<!-- 表单区域 -->
			<div id="center_middle" style="background: pink">
				<form id="myForm" action="doAdminLogin.jsp" method="post">
					<div id="user">
						用 户 <input type="text" id="username" name="username" />
					</div>
					<div id="pwd">
						密 码 <input type="password" id="password" name="password" />
					</div>
					<!-- 登录前需要验证码进行验证 -->
					<div id="yzm">
						验证码 <input type="text" name="code" id="code" /><span
							id="code_val">SBSB</span>
					</div>
					<!-- 区域留出来   7天免登录-->
					<div id="mdl">
						<label> <input type="checkbox" name="isCheck" value="auto">
						</label> <label>一周内免登录</label>
					</div>
					<div id="btn">
						<input type="submit" value="登录" /> <input type="reset" value="清空" />
					</div>


				</form>
			</div>
			<div id="center_right"></div>
		</div>
		<!-- 下 -->
		<div id="down">
			<div id="down_left">
				<div id="inf">
					<span class="inf_text">版本信息</span> <span class="copyright">管理信息系统
						2008 v2.0</span>
				</div>
			</div>
			<div id="down_center"></div>
		</div>

	</div>
</body>
</html>

实现以下效果:

 在新闻发布系统中实现会话管理所有完整代码如下:

<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	//定义变量  保存登录的用户
	String username = "";
	//后台主页面获取到当前的Cookie对象中所保存的用户名  

	Cookie[] cookies = request.getCookies();
	if (null != cookies) {
		for (Cookie cookie : cookies) {
			if ("uname".equals(cookie.getName())) {
				username = URLEncoder.encode(cookie.getValue(), "UTF-8");
				break;
			}
		}
	}

	//判断:username为空  说明没有登录   cookie获取时  cookie.getValue不能赋值
	if ("" == username) {//me米有登录
		//送回去
		response.sendRedirect("admin_login.jsp");
	}
%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	//该页面作用:根据request对象获取登录表单提交的值进行数据库交互

	//1.设置编码
	request.setCharacterEncoding("utf-8");
	//2.获取表单提交的值
	//用户名
	String username = request.getParameter("username");
	//密码
	String password = request.getParameter("password");
	//拿到复选框是否选中?  选中了  才能实现自动登录  
	String[] isChecks = request.getParameterValues("isCheck");
	//只需要判断isChecks这个数组是否为空,就能证明是否选中了复选框
	//System.out.println(isChecks);

	//3.数据库交互
	String uname = "";
	String pwd = "";
	//加载驱动
	Class.forName("oracle.jdbc.driver.OracleDriver");
	//建立连接
	String url = "jdbc:oracle:thin:@localhost:1521:orcl";
	Connection conn = DriverManager.getConnection(url, "scott", "123");
	//sql
	String sql = "select * from tb_news_users where username = ? and password = ?";
	PreparedStatement ps = conn.prepareStatement(sql);
	ps.setString(1, username);
	ps.setString(2, password);
	ResultSet rs = ps.executeQuery();
	if (rs.next()) {//存在 就可以登录
		uname = rs.getString(1);
		pwd = rs.getString(2);
	}

	if ("" != uname && "" != pwd) {//数据库查到记录了   
		//判断如果选中了复选框    通过Cookie保存值
		//创建Cookie
		Cookie cookieUsername = new Cookie("uname", username);
		if (null != isChecks) {//选中了复选框------一周内免登陆
			//由于浏览器关闭后,会话中断,Cookie自动清除
			//设置时长  秒
			cookieUsername.setMaxAge(1 * 60 * 60 * 24 * 7);
		}
		//通过response响应对象写回客户端浏览器
		response.addCookie(cookieUsername);

		response.sendRedirect("admin.jsp");
	} else {
		//out.println(js)
		response.sendRedirect("doAdminLogin.jsp");
	}
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	//退出登录    拿到当前的cookie进行重新保存  跳转到login.jsp
	Cookie[] cookies = request.getCookies();
	if (null != cookies) {
		for (Cookie cookie : cookies) {
			if ("uname".equals(cookie.getName())) {
				//失效  退出登录
				cookie.setMaxAge(0);//设置时长
				response.addCookie(cookie);
				break;
			}
		}
	}
	//跳回登录页面
	response.sendRedirect("admin_login.jsp");
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>后台-尾部封装页面</title>
</head>
<body>
	<div id="site_link">
		<a href="#">关于我们</a><span>|</span> <a href="#">Aboue Us</a><span>|</span>
		<a href="#">联系我们</a><span>|</span> <a href="#">广告服务</a><span>|</span>
		<a href="#">供稿服务</a><span>|</span> <a href="#">法律声明</a><span>|</span>
		<a href="#">招聘信息</a><span>|</span> <a href="#">网站地图</a><span>|</span>
		<a href="#">留言反馈</a>
	</div>
	<div id="footer">
		<p class="">
			24小时客户服务热线:010-68988888 &#160;&#160;&#160;&#160; <a href="#">常见问题解答</a>
			&#160;&#160;&#160;&#160; 新闻热线:010-627488888<br />
			文明办网文明上网举报电话:010-627488888 &#160;&#160;&#160;&#160; 举报邮箱:<a href="#">jubao@jb-aptech.com.cn</a>
		</p>
		<p class="copyright">
			Copyright &copy; 1999-2009 News China gov, All Right Reserver<br />
			新闻中国 版权所有
		</p>
	</div>
</body>
</html>
举报

相关推荐

0 条评论