1、Cookie
1.向客户端添加Cookie
package com.jiang.servlet;
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 java.io.IOException;
@WebServlet("/MyServlet6")
public class MyServlet6 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//(1).向客户端添加Cookie
Cookie cook = new Cookie("name","value");
//Cookie cookie=new Cookie("name", URLEncoder.encode("撒阿斯顿","UTF-8"));//如果输入中文无法识别,则可以用此方法进行编码,读取时需要进行对应的解码
cook.setMaxAge(10); //设置该cookie在客户端的存活时间,秒,设置为Integer.MAX_VALUE表示一直存活;不设置则只能同一个浏览器窗口中才能获取Cookie的值
//年龄为正数,在那段时间中,任何浏览器窗口可以取该值;年龄为0,将客户端存在的当前Cookie对象删除,任何窗口都不能取值
cook.setPath("/");//可在同一应用服务器内共享
resp.addCookie(cook); //用响应对象向客户端添加cookie
System.out.println("新增Cookie成功");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
}
2.后台从Cookie中取出需要得数据
package com.jiang.servlet;
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 java.io.IOException;
@WebServlet("/MyServlet7")
public class MyServlet7 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//(2)后台从Cookie中取出需要得数据
Cookie[] cos = req.getCookies();
if(cos!=null) {//cks为NULL则没有与该web程序相关的Cookie
for (int i = 0; i < cos.length; i++) {//用循环遍历cookie数组
System.out.println("cos[i].getName()=" +cos[i].getName());
if (cos[i].getName().equals("name")){//将名字与需要得到得数据得名字一样得值取出来
String a=cos[i].getValue().toString();//取出来的值要toString()
//a=URLDecoder.decode(a,"UTF-8");//已UTF-8进行解码
System.out.println("我找到了cookie的name的值=" +a );
}
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
}
3.前台从Cookie中取出需要得数据
<%@ page import="java.net.URLDecoder" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--(3)前台从Cookie中取出需要得数据--%>
<h1>结果=${cookie.name.value}</h1> <%--//从cookie中取值--%>
<%--当cookie.name.value中的值需要中文转码时,可在前台将它转换为request,再进行取值(一般不建议这样做)--%>
<%
Cookie[]cos=request.getCookies();
if(cos!=null) {
out.println("cos!=null"+" <br/>");
for (int i = 0; i < cos.length; i++) {
out.println("cos[i].getName()=" +cos[i].getName()+" <br/>");
if (cos[i].getName().equals("name")){
String a=cos[i].getValue().toString();
a= URLDecoder.decode(a,"UTF-8");
request.setAttribute("name",a);
out.println("我找到了cookie的name的值=" +a+" <br/>" );
}
}
}
%>
<h1>结果=${requestScope.name.toString()}</h1>
<%--打印所有cookie--%>
<c:forEach var="cookieVal" items="${requestScope.cookies}" >
<tr>
<td align="right">${cookieVal.name}</td>
<td>${cookieVal.value}</td>
</tr>
</c:forEach>
</body>
</html>
4.Cookie的优缺点
优点:
1.能在规定的时间内保存用户的相关信息,主要为登录名
2.定向广告
缺点:
1.只能往Cookie中写字符串,不能放对象
2.放在客户端不安全
3.一个WEB程序只支持200多个Cookie
4.用户有权限禁止cookie
2、Session
1.后台设置与获取Session
package com.jiang.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/MyServlet8")
public class MyServlet8 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.setAttribute("name","小江");//设置session的值
String name = (String)session.getAttribute("name");//获取session的值
System.out.println(name);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
}
2.前台从Session中取出需要得数据
<%@ page import="java.net.URLDecoder" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--(3)前台从Cookie中取出需要得数据--%>
<h1>结果=${sessionScope.name.value}</h1> <%--//从cookie中取值--%>
<%--当cookie.name.value中的值需要中文转码时,可在前台将它转换为request,再进行取值(一般不建议这样做)--%>
<%
HttpSession ses=request.getSession();
String val = (String)ses.getAttribute("name");//获取session的值
val= URLDecoder.decode(val,"UTF-8");
request.setAttribute("name",val);
out.println("我找到了Session的name的值=" +val+" <br/>" );
%>
<h1>结果=${requestScope.name.toString()}</h1>
</body>
</html>
3.Session的优缺点
优点:
1.Session中可以写字符串、对象、数组等object
2.放在服务器端,信息安全
缺点:
1.用户禁止cookie时,就无法使用这个Session变量
2.随着站点访问量的增大,服务器将会因此而无法正常运行
3.过度使用session变量将会导致代码不可读而且不好维护
3、cookie与session区别
- cookie:(string,string)。存储在客户端中。cookies文件的内容大致上包括了诸如用户名、密码、设置等。cookie存储的数据不超过3 K
- session:(string,object)。存储在服务端。可以任意存储数据,但是数据过多会影响性能
- session是一种特殊的cookie。
- 当客户端第一次请求服务器的时候,服务器生成一份session保存在服务端,将该数据(session)的id以cookie的形式传递给客户端;以后的每次请求,浏览器都会自动的携带cookie来访问服务器(session数据id)。
- cookie的简单使用
- Session的简单使用