一、Cookie的应用:
Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
细节问题:
- 一个网站cookie是否存在上限 一个cookie只能保存一个信息;
- 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
- cookiw大小有限制4kb;
- 300个cookie浏览器上限;
举例一些关于cookie的使用代码
创建ServletCookie.java代码如下:
package com.llp.cookie;//包的名称
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Date;
public class ServletCookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文乱码问题
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
PrintWriter out=resp.getWriter();
//Cookie,服务器端从客户端获取呀
Cookie[] cookies=req.getCookies();//这里返回数组,说明Cookie可能存在多个
//判断Cookie是否存在
if(cookies!=null){
out.write("上次访问时间:");
for(int i=0;i<cookies.length;i++){
Cookie cookie=cookies[i];
//获取cookie的名字
if(cookie.getName().equals("lastLoginTime")){
//获取cookie中的值
long LastLoginTime=Long.parseLong(cookie.getValue());//转化为long型
Date date=new Date(LastLoginTime);//设置为时间格式
out.write(date.toLocaleString());
}
}
}
else{
out.write("第一次访问网页");
}
Cookie cookie=new Cookie("lastLoginTime",System.currentTimeMillis()+"");
cookie.setMaxAge(24*60*60);//设置Cookie有效时间为一天
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
销毁Cookie记录ServletCookie02.java
package com.llp.cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.HttpCookie;
public class ServletCookie02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建一个Cookie,名字必须要和想要删除的cookie名字相同
Cookie cookie=new Cookie("lastLoginTime",System.currentTimeMillis()+"");
//将cookie有效期设置为0
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
web.xml配置如下
<servlet>
<servlet-name>ServletCookie</servlet-name>
<servlet-class>com.llp.cookie.ServletCookie</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletCookie</servlet-name>
<url-pattern>/cc1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ServletCookie02</servlet-name>
<servlet-class>com.llp.cookie.ServletCookie02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletCookie02</servlet-name>
<url-pattern>/cc2</url-pattern>
</servlet-mapping>
代码测试:
第一次调用cc1网页
因为第一次进去cc1页面的时候,是最新创建的cookie。
第二次调用cc1网页
消除cookie
再次调用cc1页面查看是否消除成功
二、Seesion的使用:
Session把用户的数据写到独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
举例一些关于cookie的使用代码
首先创建一个Person类(为了更好的面向对象) person.java代码如下
package com.llp.person;
public class Person {
private int age;
private String name;
Person(){}
public Person(String name, int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
向session里存入信息,ServletSession.java代码如下:
package com.llp.session;
import com.llp.person.Person;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class ServletSession extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文乱码问题
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
//得到session
HttpSession session=req.getSession();
//给session存入东西
session.setAttribute("name",new Person("llp",23));
//获取session的ID
String sesssionID=session.getId();
//判断session是否为新
if(session.isNew()){
resp.getWriter().write("session创建成功!"+sesssionID);
}
else{
resp.getWriter().write("session已经创建过!"+sesssionID);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
创建ServletSession.java,获取Session里面的信息
package com.llp.session;
import com.llp.person.Person;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class ServletSession02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
//得到session
HttpSession session=req.getSession();
Person person=(Person) session.getAttribute("name");
System.out.println(person.toString());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
ServletSession.java,手动注销session
package com.llp.session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class ServletSession03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session=req.getSession();
session.removeAttribute("name");
//手动注销session
session.invalidate();
resp.getWriter().write("注销session!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
web.xm配置如下
<servlet>
<servlet-name>ServletSession</servlet-name>
<servlet-class>com.llp.session.ServletSession</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletSession</servlet-name>
<url-pattern>/ss1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ServletSession02</servlet-name>
<servlet-class>com.llp.session.ServletSession02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletSession02</servlet-name>
<url-pattern>/ss2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ServletSession03</servlet-name>
<servlet-class>com.llp.session.ServletSession03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletSession03</servlet-name>
<url-pattern>/ss3</url-pattern>
</servlet-mapping>
<!--设置session失效时间,以分钟为单位-->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
最后web.xml的配置的是自动设置session失效时间
代码测试
首先调用页面ss1,向session存入信息
调用页面ss2,向session读取信息,后台能后看到信息
调用页面ss3,删除session