Cookie是用户访问web服务器时,服务器在用户硬盘上存放的信息。可以根据Cookie来跟踪用户
构造方法:Cookie(String name,String value)在服务器端构造,通过响应返回给客户端,方法为response.addCookie()通过request.getCookie()得到一个Cookie【】数组。还可以通过方法setMaxAge()设置Cookie的最大存活时间
CookieServlet代码:
import java.io.IOException;
import java.io.PrintWriter;
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 CookieServlet extends HttpServlet
{
private int count1;
private int count2;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
Cookie cookie=new Cookie("CookieName"+count1++,"CookieValue"+count2++);
cookie.setMaxAge(15);
response.addCookie(cookie);
Cookie[] cookies=request.getCookies();
if(null==cookies)
{
return;
}
for(Cookie c:cookies)
{
System.out.println("CookieName"+c.getName());
System.out.println("CookieValue"+c.getValue());
}
}
}
JspCookie代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
</head>
<body>
<%!
int count1;
int count2;
%>
<%
Cookie cookie=new Cookie("CookieName"+count1++,"CookieValue"+count2++);
cookie.setMaxAge(15);
response.addCookie(cookie);
Cookie[] cookies=request.getCookies();
if(null==cookies)
{
return;
}
for(Cookie c:cookies)
{
%>
<h1>CookieName:</h1><%=c.getName() %>
<h1>CookieValue</h1><%=c.getValue() %>
<%} %>
</body>
</html>
比较Servlet和jsp:
相同:都可以生成动态页面
不同:jsp优点是擅长于网页制作,生成动态页面。Jsp缺点是不容易跟踪和排错。
Servlet是纯java语言,擅长于处理流程和业务逻辑。Servlet缺点是生成动态网页不直观。
request.getAttribute() 和request.getParameter()方法的异同:
1. 前者返回Object类型的对象,后者返回String类型的对象;
2. 当两个web组件之间为链接关系时,被链接的组件通过getParameter()方法来获得请求参数
3. 当两个web组件之间为转发关系时,转发目标组件通过getAttribute()方法来和转发源组件共享request范围内的数据。
4. request.getParameter()方法传递的数据,会从web客户端传到web服务器端,代表http请求数据。
5. request.setAttribute()和getAttribute()方法传递的数据只会存在于web容器内部,在具体转发关系的web组件之间共享。
Web服务器跟踪客户状态有四种方法:
1.建立含有跟踪数据的隐藏字段
2.重写包含额外参数的URL
3.使用持续的Cookie
4.使用Servlet API中的Session(会话)机制
Session运行机制:
1.当一个Seesion开始时,Servlet容器将创建一个HttpSession对象,在HttpSession对象中可以存放客户状态的信息
2.Servlet容器为HttpSession分配一个唯一标识符,称为Session ID。Servlet容器把Session ID作为Cookie保存在客户的浏览器中。
3.每次客户发出Http请求时,Servlet容器可以从HttpServletRequest对象中读取Session ID,然后根据Session ID找到相应的HttpSession对象,从而获取客户的状态信息。
Session方法摘要:
1. void setAttribute(String name,Object value)
2.Object getAttribute(String name)
3.boolean isNew()判断是否是新创建的Session。如果是新创建的Session,返回true,否则返回false。
4.void invalidate()
5.void setMaxInactiveInterval(int interval)设定一个Session可以处于不活动状态的最大时间间隔,以秒为单位。如果超过这个时间,Session自动
失效。如果设置为负数,表示不限制Session处于不活动状态的时间。
6.String getID()返回一个惟一的标示符。
Session生命周期:
1. Session过期
2. 服务器端调用了HttpSession的invalidate()方法。