1服务器可以同时处理多个用户请求,而且,每个用户请求的东西都不一样,这个时候就要用到会话跟踪技术.
2HttpServletRequest的getSession() 方法用语创建会话对象,具体的语法如下:
Apublic HttpSession getSession(); 如果没有与当前请求关联的会话,则 getSession() 方法用于创建会话。
Bpublic HttpSession getSession(boolean value);
如果布尔值为 true 且当前没有与请求关联的会话,则使用 getSession(boolean value) 创建会话。如果布尔值为 false,如果没有与当前请求关联的会话,返回null。
3会话跟踪技术
用户授权 :会话跟踪的用户授权方法在用户登录之后跟踪用户。用户授权技术不允许未经授权的用户访问网站上的某些资源
隐藏表单域 : 将会话跟踪字段的隐藏表单域添加到 HTML 页面,但是不会显示在客户端浏览器中
<input type = “hidden” name=“productid” value=“123”>
</form>
URL 重写 :URL(统一资源定位) 重写技术将一个唯一的会话 ID 添加到 URL 结尾,以标识该会话。例如,重写以下 URL 传递会话 ID10
用附加信息重写的 URL:
http://server:post/servlet/Rewritten/10
用添加的参数重写的 URL:
http://server:post/servlet/Rewritten?sessionid=10
用自定义修改重写的 URL:
http://server:post/servlet/Rewritten;$sessionid$10
Cookie : Cookie 用于存储 Web 服务器发送给客户端的信息。服务器通过设置响应标题中的 Set-Cookie 方法来发送 cookie。其语法如下:
Set-Cookie: Name=VALUE; Comment=COMMENT; Domain=DOMAINNAME;
Max-age=SECONDS; Path=PATH; secure;
Name – 指定 Cookie 的名称
VALUE – 指定 Cookie 名称的值
Domain – 指定 Cookie 有效的 URL
Max-age – 指定 Cookie 的生命周期(以秒表示)
secure – HTTP 指定 Cookie 是否可以在 HTTP 上交换
javax.servlet.http.cookies 包提供由 Cookie 类实现的多种方法
public void setMaxAge(int age);设置 cookie 的最大生命周期(以秒表示)
public int getMaxAge(); 返回Cookie 的最大保存时间
Cookie[] cookies = request.getCookies();
boolean hasCookies = false;
if (cookies != null)
hasCookies = true;
if (hasCookies)
{
out.println(“<h2>找到的每个 cookie 的名称和值</h2>");
for (int i = 0; i < cookies.length; i++)
{
cookie = cookies[i];
cookie.getName();
cookie.getValue();
}
}
HttpSession session=request.getSession();
response.setContentType(CONTENT_TYPE);
if(session.isNew())
{
out.println(“新建的会话...<br/>");
}
else
{
out.println(“已有会话...<br/>");
}
out.println(“<br/>会话 ID: "+session.getId());
out.println("<br/>创建时间: ");
out.println(new Date(session.getCreationTime()));
out.println("<br/>最后访问日期: ");
out.println(new Date(session.getLastAccessedTime()));
4Servlet 通信方法
Servlet 访问网络资源以满足客户端请求
Servlet 使用 RequestDispatcher 接口的 forward() 和include() 方法访问网络资源
public void forward (ServletRequest req, ServletResponse res); 将请求从一个 Servlet 转送到同一个服务器上的另一个 Servlet
public void include (ServletRequest req, ServletResponse res);在一个 Servlet 中包含另一个 Servlet 的内容
5 RequestDispatcher 写道
if(dispatcher==null)
{
response.sendError(response.SC_NO_CONTENT);
}
dispatcher.forward(request,response);
6Servlet 上下文
将所有 Servlet 所共有的属性和资源存储于 ServletContext 接口对象。处理上下文属性的方法为:
1public Object getAttribute(String name); 返回 Servlet 容器属性名称。如果该名称没有属性则返回 null
2public void setAttribute(String name, Object object);将对象绑定到 Servlet 上下文中给定的属性名称
3public void removeAttribute(String name);删除给定名称的属性