java:Cookie(常用操作),Cookie和Session免登录实例

 1.常用操作:

package cn.zzsxt.lee.web.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GetCookieServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 获取cookie信息
        Cookie[] cookies = req.getCookies();
        for (int i = 0; i < cookies.length; i++) {
            System.out.println(cookies[i].getName() + ":" + cookies[i].getValue());
        }

    }

}

 

 

package cn.zzsxt.lee.web.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @description 
 * 
 * cookie:
 *         在服务器被创建,返回给客户端,并且保存客户端
 *         如果设置了SETMAXAGE(int seconds),会把cookie保存在客户端的硬盘中
 *         如果没有设置,会默认把cookie保存在浏览器的内存中
 *        一旦设置setPath():只能通过设置的路径才能获取到当前的cookie信息
 * @author Seven Lee
 * @date 
 *
 */
@WebServlet("/cookie.sxt")
public class CookieServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 创建cookie对象
        Cookie compCookie = new Cookie("computer", "HP");
        // 服务器把cookie响应给客户端,所有的cookie对象,都会在服务器端创建,通过http响应给客户端(浏览器)

        
        Cookie keyCookie = new Cookie("key", "doubleflybird");
        
        Cookie mouseCookie = new Cookie("mouse", "leishe");
        mouseCookie.setMaxAge(60*60*24*30);//如果不设置使用时间,那么将取不到Cookie的值
        
        System.out.println(req.getContextPath());// 项目名(在tomcat中部署的项目名)
        // /zzsxt/shopping.jsp
        keyCookie.setPath(req.getContextPath()+"/getCookie.sxt");// 一旦设置了cookie的路径,就只能通过这一个路径才能获取到cookie信息
        

        resp.addCookie(compCookie);
        resp.addCookie(mouseCookie);
        resp.addCookie(keyCookie);
    }

}

 2.Cookie和Session登录实例:

  注册:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'register.jsp' starting page</title>
<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
<script type="text/javascript">

    var sexFlag = false;
    var untFlag = false;
    function checkSex() {
        var sex = $(":checked").val();
        if (sex != null) {
            // 验证成功
            alert(111);
            sexFlag = true;
        } else {
            // 验证失败
            alert(222);
            sexFlag = false;
        }
    }

    function checkUniversity() {
        var unt = $(":selected").val();
        if (unt != 0 && unt != null) {
            // 验证成功
            untFlag = true;
        } else {
            untFlag = false;
        }
    }

    $(function() {
        
        
        $("form").submit(function() {
            checkSex();
            checkUniversity();
            return sexFlag && untFlag;
        });


    });
</script>

</head>

<body>

    <h1>注册页面</h1>
    <form action="register.sxt" method="post">

        用户名:
        <input type="text" name="username" id="uname" />
        密码:
        <input type="password" name="pwd" id="pawd" />
        性别:
        <input class="sexes" type="radio" name="sex" value="male" /><input class="sexes" type="radio" name="sex" value="female" />
        女 院校:<select name="unt">
            <option value="0">请选择院校</option>
            <option value="zzsxt">天津大学</option>
            <option value="bjsxt">北京大学</option>
        </select>
        <input type="submit" value="提交" />

    </form>


</body>
</html>

 

  注册处理:

package cn.zzsxt.lee.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.zzsxt.lee.web.dao.IUserDao;
import cn.zzsxt.lee.web.dao.impl.UserDaoImpl;
import cn.zzsxt.lee.web.entity.User;
import cn.zzsxt.lee.web.utils.BASE64;
import cn.zzsxt.lee.web.utils.MD5;
import cn.zzsxt.lee.web.utils.UUIDUtils;

@WebServlet("/register.sxt")
public class RegisterServlet extends HttpServlet {

    private IUserDao userDao = new UserDaoImpl();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        String pwd = request.getParameter("pwd");
        String sex = request.getParameterValues("sex")[0];
        String university = request.getParameterValues("unt")[0];
        User user = new User();
        user.setId(UUIDUtils.getUUid());
        user.setUsername(username);
        user.setRealPassword(pwd);
        pwd = MD5.getMD5(pwd);
        user.setPassword(pwd);
        user.setSex(sex);
        user.setUniversity(university);
        user.setAuthority(0);
        int result = 0;
        try {
            result = userDao.registerUser(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (result > 0) {
            response.sendRedirect("login.jsp");
            return;
        }

    }

}

 

 

 

   登录之前必须先判断获取Cookie:

 

package cn.zzsxt.lee.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.zzsxt.lee.web.utils.MD5;

@WebServlet("/checkLogin2.sxt")
public class CheckLogin2 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String username = "";
        String password = "";

        // 1.获取cookie的值
        Cookie[] cookies = request.getCookies();
        // 2.判断cookie数组是否为null
        if (cookies != null) {
            // 3.判断cookie中是否有用户名和密码
            for (int i = 0; i < cookies.length; i++) {
                if ("uname".equals(cookies[i].getName())) {
                    // 4.如果cookie中有用户名和密码,就获取
                    username = cookies[i].getValue();
                }
                if ("pwd".equals(cookies[i].getName())) {
                    password = cookies[i].getValue();
                }
            }
        }
        request.getSession().setAttribute("name", username);
        request.getSession().setAttribute("pwd", password);
        response.sendRedirect("login.jsp");
        return;
    }
}

     登录:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'login.jsp' starting page</title>


</head>

<body>

    <form action="login.sxt" method="post">
        用户名:
        <input type="text" name="username" value="${name }" />
        密码:
        <input type="password" name="pwd" value="${pwd }" />
        <input type="submit" value="提交" />

    </form>



</body>
</html>

 

  登录处理:

package cn.zzsxt.lee.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.zzsxt.lee.web.dao.IUserDao;
import cn.zzsxt.lee.web.dao.impl.UserDaoImpl;
import cn.zzsxt.lee.web.entity.User;
import cn.zzsxt.lee.web.utils.MD5;

@WebServlet("/login.sxt")
public class LoginServlet extends HttpServlet {

    private IUserDao userDao = new UserDaoImpl();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        String username = request.getParameter("username");
        String pwd = request.getParameter("pwd");
        pwd = MD5.getMD5(pwd);
        User user = new User();
        user.setUsername(username);
        user.setPassword(pwd);

        try {
            User u = userDao.selectUserByUsernameAndPassword(user);
            if (u.getId() != null && !"".equals(u.getId())) {
                // 登录成功
                // 存入session
                request.getSession().setAttribute("user", u);
                Cookie usernameCookie = new Cookie("uname", u.getUsername());
                Cookie pwdCookie = new Cookie("pwd", u.getRealPassword());
                usernameCookie.setMaxAge(60 * 60 * 24);
                pwdCookie.setMaxAge(60 * 60 * 24);
                response.addCookie(usernameCookie);
                response.addCookie(pwdCookie);
                response.sendRedirect("index.jsp");
            } else {
                // 登录失败
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

 

  frameset框架主页:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'index.jsp' starting page</title>
</head>

<frameset rows="100,*">
    <frame src="top.jsp" name="top" />
    <frameset cols="200,*">
        <frame src="left.jsp" name="left" />
        <frame src="right.jsp" name="right" />
    </frameset>
</frameset>
</html>

     Filter内Cookie的设置:

package cn.zzsxt.lee.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @description 编码过滤器
 * @author Seven Lee
 * @date 2017年7月28日下午4:48:59
 *
 */
public class GlobalFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        // 如果是设置编码,就必须添加chain.doFilter();
       // chain.doFilter(request, response);  //放这里有BUG,登录的时候第一次不会出现账号密码,刷新一次才会出现
        // 获取cookie数组
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {// 防止空指针
            String username = "";
            String password = "";
            for (int i = 0; i < cookies.length; i++) {
                System.out.println(cookies[i].getValue());
                if ("username".equals(cookies[i].getName())) {
                    username = cookies[i].getValue();
                }
                if ("password".equals(cookies[i].getName())) {
                    password = cookies[i].getValue();
                }
            }
            request.getSession().setAttribute("username", username);
            request.getSession().setAttribute("password", password);
        chain.doFilter(request, response); //放最后没BUG }
else { for(int i = 0; i < cookies.length; i++){ System.out.println(cookies[i].getValue()); } response.sendRedirect("login.jsp"); return; } } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } }

 

  Top处登录成功:

  

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'top.jsp' starting page</title>
<script type="text/javascript">

    function trunLogin() {
        window.top.location.href = "login.jsp";
    }
</script>

</head>

<body>
    <c:choose>
        <c:when test="${sessionScope.user.username != null }">  //指的是登录时user对象的属性
            <h1>欢迎:${sessionScope.user.username }</h1>
            <a href="">注销</a>
        </c:when>
        <c:when test="${sessionScope.username != null }"> //指的是当前Cookie的属性
            <h1>欢迎:${sessionScope.username }</h1>
            <a href="">注销</a>
        </c:when>
        <c:otherwise>
            <a href="javascript:void(0);" onclick="trunLogin();">请登录</a>
        </c:otherwise>
    </c:choose>
</body>
</html>

 

posted @ 2017-07-25 21:12  咫尺天涯是路人丶  阅读(27684)  评论(0编辑  收藏  举报