通过cookies,可以保存用户的使用习惯,优化用户体验,同时能减轻服务端压力.下面说下在Servlet中cookies机制的使用

就用保存用户登录数据来举例子:

打开网页的处理Servlet:

package com.zhangwei;

import java.io.*;
import javax.servlet.http.*; public class CookiesPreCheck extends HttpServlet{ //处理get请求
public void doGet(HttpServletRequest req, HttpServletResponse res){
res.setContentType("text/html; charset=GBK");
Cookie[] cookiearray = req.getCookies();
if(cookiearray != null){
String username = null;
String password = null;
try{
PrintWriter pw = res.getWriter();
for(int i = 0; i<cookiearray.length;i++){
Cookie temp = cookiearray[i];
if(temp.getName().equals("username")){
username = new String(temp.getValue());
}
if(temp.getName().equals("password")){
password = new String(temp.getValue());
}
}
pw.print(username+password);
if(username!=null && password!= null){
HttpSession hs = req.getSession(true);
hs.setAttribute("username",username);
hs.setAttribute("password",password);
res.sendRedirect("account");
return ;
}
}catch(Exception e){
e.printStackTrace();
}
}
try{
res.sendRedirect("login");
}catch(Exception e){
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req, HttpServletResponse res){ this.doGet(req,res);
}
}

主要做了一件事情,检测本地的cookies,看里面是否保存了用户信息,如果有,那么就将用户信息写到session,如果没有就跳转到登录页面.

用户信息页面主要是从会话中获取并显示用户信息

登录页面主要是实现用户登录,并且将用户账号密码通过表单传递到登录处理页面

登录处理页面:

package com.zhangwei;

import java.io.*;
import javax.servlet.http.*; public class LoginCL extends HttpServlet{ //处理get请求
public void doGet(HttpServletRequest req, HttpServletResponse res){
res.setContentType("text/html; charset=GBK");
this.doPost(req,res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res){ String username = req.getParameter("username");
String passwd = req.getParameter("passwd");
//验证,并且将用户数据写入session和cookies
try{
HttpSession hs = req.getSession(true);
hs.setAttribute("username",username);
hs.setAttribute("password",passwd);
Cookie c = new Cookie("username",username);
Cookie e = new Cookie("password",passwd);
//不设置有效时间的话cookies就不会被保存
c.setMaxAge(30);
e.setMaxAge(30);
//res.sendRedirect("account");
res.addCookie(c);
res.addCookie(e);
}
catch (Exception e){
e.printStackTrace();
}
}
}

用户处理页面主要做的事情是验证用户信息,如果通过,就将用户信息写入session和cookies,然后跳转到用户页面(当然也可以只写入cookies,然后跳转到根目录)

Servlet-cookies机制的更多相关文章

  1. servlet运行机制、Request内置对象和服务器端跳转

    servlet运行机制: 当发送一个请求到服务器的时候,容器(Tomcat)会判断该路径属于哪一个 Servlet 进行处理,Servlet 有一个抽象父类“HttpServlet”,这个类是一个模板 ...

  2. Yii2.0 Cookies机制和使用方法

    在实际的项目开发过程中,用到了Yii2.0 Cookies机制!但是遇到一个十分奇葩的问题,同一个YII框架,backend下Cookies能够正常存储于客户端,但是frontend始终不行.文章的最 ...

  3. JavaWeb之servlet管理机制

    一.什么是Servlet 简单的说,浏览器发出请求到tocat服务器,服务器就会初始化一个servlet实例(servlet采取生命托管的方式实现单例,不存在时才会创建实例),servlet示例会启动 ...

  4. Google考虑抛弃Cookies机制

    根据华尔街日报的报道,Google 正在考虑抛弃古老的浏览器 cookies 来追踪用户信息的机制.作为替代,Google 将开发一种「个人匿名标识机制」.Google 早前已经计划在 IE 和 iP ...

  5. servlet运作机制

    最近研究zipkin,在研究客户端brave的时候,才算开始理解servlet了.    servlet只是tomcat被实例化一次:    之后每次访问其实都是对同一个servlet示例操作:所以, ...

  6. Servlet Cookies

    Cookie是在多个客户端请求之间持久存储的一小段信息. Cookie具有名称,单个值和可选属性,例如注释,路径和域限定符,生存周期和版本号. Cookie工作原理 默认情况下,每个请求都被视为新的请 ...

  7. Servlet基础知识(三)—— 会话机制Session,Session和Cookie的异同

    Servlet会话机制: Http是一种无状态协议,它是无记忆的.也就是说,服务器不会保存用户的任何信息,当同一用户再次去访问时,服务器是不认识你的,它还是会建立新的连接. 但有时候我们需要服务器保留 ...

  8. tomcat中Servlet的工作机制

    在研究Servlet在tomcat中的工作机制前必须先看看Servlet规范的一些重要的相关规定,规范提供了一个Servlet接口,接口中包含的重要方法是init.service.destroy等方法 ...

  9. Servlet的Cookies处理

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/cookies-handling.html: Cookies是存储在客户端计算机上的文本文件,用于 ...

随机推荐

  1. Advanced SQL

    Top number of records SELECT column_name FROM table_name LIMIT 5; Like/Not Like SELECT * FROM Custom ...

  2. 4Sum

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...

  3. session/SessionFactory线程非安全和线程安全

    SessionFactory负责创建session,SessionFactory是线程安全的,多个并发线程可以同时访问一个 SessionFactory 并从中获取Session实例. (Sessio ...

  4. Oracle 部分函数使用说明

    oracle有些函数可能我知道是什么作用,但是具体其实说不清楚,这里是我这几天看到的函数使用方法及说明,记录一下,以后看看 --1.replace('str',oldVal,newVal)替换功能方法 ...

  5. C语言中指针的使用

    什么是指针:指针就是一个变量,是一个存放内容的内存空间.指针存放的内容是另一个内存空间的起始地址.不同于一般变量存放的就是变量值.取值操作符*对于指针的作用是取得指针变量存放的内存地址里面的值,不加* ...

  6. print_r、echo、var_dump三者的区别

    这三者均是php里输出的方式. 1.print_r用于输出数组. 2.echo只能用于输出字符串,在没有框架的时候,多用这种方法将结果打印在html页面上. 3.var_dump能输出任何类型的数据, ...

  7. Rocky4.2下安装达梦(DM)6数据库

    1.准备操作系统 1.1 系统登录界面 1.2 操作系统版本信息 jdbh:~ # uname -ra Linux jdbh -x86_64 # SMP Fri Dec :: CST x86_64 G ...

  8. js打开没有地址栏下拉条新窗口

    <script type="text/javascript" language="javascript"> function vNodeAuditL ...

  9. Java FTPClient实现文件上传下载

    在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...

  10. C# 路径

    一.根目录 .// 或者直接给出文件名称,是找根目录的路径 如:path = "test.xml" 与 path = ".//test.xml"是一个意思 二. ...