《Java从入门到放弃》JSP入门篇:状态管理

web程序常用的数据管理有三个类,Cookie,Session和Application。

Cookie:数据存在客户端,安全性差,可以设置过期时间,在时间周期内数据一直有效。

Session:数据存在服务器,每一个浏览器占用一个单独的Session,默认过的期时间20分钟,浏览器关闭后Session数据清空。

Application:数据存在服务器端,所有用户共享该数据。

 

下面通过几个常用功能来演示这三个类的使用。

第一个功能:登录状态保存(Cookie)

功能描述:有两个页面,登录和个人中心。第一次访问登录页面时,如上图所示。如果勾选了“10天内自动登录”,则10天内可以直接访问个人中心,否则访问个人中心时会跳转到登录页面。

先完成基本登录功能,再完成10天内自动登录功能

一、基本登录功能实现步骤:

1.创建login.jsp和user.jsp页面。

2.编写login.jsp登录功能。

<form action="user.jsp" method="post">
    <label>账号:</label>
    <input type="text" id="txtLoginID" name="txtLoginID" /><br />
    <input type="password" id="txtLoginPWD" name="txtLoginPWD" /> <br />
    <input type="checkbox" id="chkSave" name="chkSave" value="true" />记住账号密码<br />
    <input type="submit" value="登录" />
</form>

3.登录后跳转到user.jsp页面,并显示账号名。

<body>
	<%
  		//一、读取从login.jsp页面传递过来的数据
  		String loginID = request.getParameter("txtLoginID");
		String loginPWD = request.getParameter("txtLoginPWD");
	  		
		if(loginID != null){
			response.getWriter().write("输入的账号是:"+loginID);
		  	response.getWriter().write("输入的密码是:"+loginPWD);	
		}
  	%>
</body>

二、10天内自动登录功能实现步骤:

 1. 修改login.jsp页面,如果Cookie中有用户信息,则直接跳转到用户页面。

<body>
<%
  	//1. 判断是否在Cookie保存过用户信息
  	Cookie[] cookies = request.getCookies();
  	if(cookies != null){
  		for(int i=0; i<cookies.length; i++){
  			//2. 如果有则跳转到用户页面
  			if(cookies[i].getName().equals("loginID")){
  				response.sendRedirect("user.jsp");
  			}
  		}
  	}
%>
    <form action="user.jsp" method="get">
	    <label>账号:</label>
	    <input type="text" id="txtLoginID" name="txtLoginID" /><br />
	    <label>密码:</label>
	    <input type="password" id="txtLoginPWD" name="txtLoginPWD"/><br />
	    <input type="checkbox" id="chkSave" name="chkSave" value="true" />记住账号密码<br />
	    <input type="submit" value="登录" />
    </form>
</body>

 二、修改user.jsp代码,将用户的登录信息保存到Cookie中。

<body>
    <%
        request.setCharacterEncoding("utf-8");
        //一、如果是已保存到Cookie,则直接读取数据
        String loginID = null;
        //1. 判断是否在Cookie保存过用户信息
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for(int i=0; i<cookies.length; i++){
                //2. 如果有则存到变量
                if(cookies[i].getName().equals("loginID")){
                    loginID = cookies[i].getValue();
                    break;
                }
            }
        }
        //二、否则根据参数读取数据
        if(loginID == null){
            //1. 获取接收的数据
            String chkSave = request.getParameter("chkSave");
            loginID = request.getParameter("txtLoginID");
            if(chkSave != null){
                /* response.getWriter().write(chkSave); */
                //2. 如果选中,则把账号保存到Cookie
                Cookie loginIDCookie = new Cookie("loginID", loginID);
                loginIDCookie.setMaxAge(60);
                response.addCookie(loginIDCookie);
            }
        }
        //三、 登录成功显示账号信息,否则跳转到登录页面
        if(loginID != null){
            response.getWriter().write("输入的账号是:"+loginID);
            response.getWriter().write("输入的密码是:"+loginPWD);	
        }
        else{
            response.sendRedirect("login.jsp");
        }
  		  		
    %>
</body>

这样,一个简单的10天自动登录就完成了。主要使用Cookie来保存数据。


第二个功能:顶部用户中心显示效果(Session)

功能描述:未登录时显示,登录后显示个人信息

1. 新建blog.jsp页面,编写从Session读取数据的代码。

<body>
    <%
    String str = "<a href=\"login.jsp\">登录</a>&nbsp;<a href=\"#\">注册</a>";
    Object loginID = session.getAttribute("loginID");
    if(loginID != null){
        str = "<a href='#'>"+loginID+"</a>";
    }
    %>
    <div><%=str %></div>
</body>

2.修改user.jsp,加上将登录信息保存到Session的代码。

  <body>
    <%
    	String loginID = null;
    	String loginPWD = null;
    	loginID = request.getParameter("txtLoginID");
    	loginPWD = request.getParameter("txtLoginPWD");
    	//验证密码是否为123,正确则保存用户信息,否则回到登录功能,并返回错误信息
    	if(loginPWD.equals("123")){
    		session.setAttribute("loginID", loginID);
    	}
    	else{
    		session.setAttribute("err", "账号或密码错误!");
    		response.sendRedirect("login.jsp");
    	}
    %>
  </body>

这样,一个简单的登录状态显示效果就完成了。


第三个功能:显示所有在线用户(当前不考虑用户退出的情况)(Application)

1. 修改用户登录的代码,当用户登录成功后,将账号保存到集合,再将集合存到Application中。

  <body>
    <%
    	String loginID = null;
    	String loginPWD = null;
    	loginID = request.getParameter("txtLoginID");
    	loginPWD = request.getParameter("txtLoginPWD");
    	//验证密码是否为123,正确则保存用户信息,否则回到登录功能,并返回错误信息
    	if(loginPWD.equals("123")){
            session.setAttribute("loginID", loginID);
            //将当前登录用户保存到全局对象域
            List<String> list = (ArrayList<String>)application.getAttribute("userList");
            if(list == null){
            	list = new ArrayList<String>();
            }
            list.add(loginID);
            application.setAttribute("userList", list);
    	}
    	else{
    		session.setAttribute("err", "账号或密码错误!");
    		response.sendRedirect("login.jsp");
    	}
    %>
  </body>

2. 在blog.jsp页面显示所有在线用户。

<body>
    <%
    String str = "<a href=\"#\">登录</a>&nbsp;<a href=\"#\">注册</a>";
    Object loginID = session.getAttribute("loginID");
    if(loginID != null){
        str = "<a href='#'>"+loginID+"</a>";
    }
    %>
    <div><%=str %></div>
    <div>
        <p>所有在线用户:</p>
        <div>
        <%
            String userol = "";
            //显示所有在线用户
            List<String> list = (ArrayList<String>)application.getAttribute("userList");
            if(list != null){
                for(int i=0; i<list.size(); i++){
                    userol += list.get(i)+"<br />";
                }
            }
        %>
        <%=userol %>
        </div>
    </div>
</body>

3. 使用不同的浏览器登录,就能在blog.jsp页面看到所有在线用户了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值