这篇文章主要介绍在Java中怎么使用Cookie,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
在现实生活中,当顾客第一次在超市购物,通常服务员会询问是否办理一张会员卡来积分以便日后折扣等福利活动。会员卡会记录顾客的姓名、积分、消费记录等信息,如果顾客要参与超市的福利活动等都需要提供会员卡,服务员在后台刷卡查询即可知道是哪个用户在使用会员卡。
现在将现实生活中的案例中的角色互换一下。
当用户没有在Web服务器登记过用户信息,而使用网站提供的需登录的服务时,服务器会告知浏览器跳转到登陆页面进行用户信息的登记操作,登录完成之后,浏览器向服务器发起一次登陆请求,服务器将用户的信息存储到Cookie中,并响应给浏览器新的Cookie,浏览器得到Cookie之后将它存储到缓存区。
当用户在Web服务器登记过用户信息,而使用网站提供的需登录的服务时,服务器会通过请求中携带的Cookie判断此次请求时哪个用户,并以这个Cookie的信息去查询数据库等操作,完成用户需要的服务。
HTTP是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。由于Web服务器要面对很多用户的并发访问,为了提高Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息,从而减轻服务器端的负载,同时无状态也减小了HTTP请求的开销。
但是在必要的场景,如登陆、购物等都需要保存用户的状态(信息),就不得不用到Cookie。
第一次访问服务器,没有Cookie,向服务器登记新的Cookie。
第二次及以后访问服务器,有Cookie,无需登记新的Cookie。
需求分析:
当用户访问homepage.jsp时,判断请求中是否携带username的Cookie,如果不存在就通知浏览器跳转到登录页面进行用户信息的登记。当用户再次访问homepae.jsp时,不会被拦截,可以让用户访问个人主页页面。
编写代码:
个人主页的Servlet
@WebServlet(name = "homepageServlet", urlPatterns = "/homepage")
public class HomePageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
if (!cookie.getName().equals("username")) {
// 如果用户是第一次访问个人主页,就通知浏览器跳转到登陆页面进行登录
resp.sendRedirect(req.getContextPath() + "/login.jsp");
}
}
}
}
用户登录的Servlet
@WebServlet(name = "loginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取http请求参数username
String username = request.getParameter("username");
// 设置响应内容的类型
response.setContentType("text/html;charset=utf-8");
// 获取Cookie值
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (!cookie.getName().equals("username")) { // 用户第一次访问
Cookie userCookie = new Cookie("username", username);
userCookie.setMaxAge(300);
response.addCookie(userCookie);
}
response.sendRedirect(request.getContextPath() + "/homepage.jsp");
}
}
}
打开浏览器,实验一下:
在第一次访问homepage页面时,看到浏览器缓存区并没有名为username的Cookie,只有当登录之后,浏览器缓存区才有了这个Cookie。
以上是“在Java中怎么使用Cookie”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。