1. Cookies
Cookie是服务器端写在客户端的信息,可以保存在客户端内存中或者客户端本地文件中。可以通过Request对象获得,也可以通过Response向客户端写Cookies。用名值对的方式保存。
2. Session 存储在服务器端,唯一的sessionId区别不同的session 应用的场景用户登录,购物车等。
a) Session 实现方式,回话跟踪
i. 把sessionid 放在cookies中
ii. 通过url重写response.encodeURL()跟踪会话
3. Application。Web应用程序运行的内存环境,
a) 所有客户端都能访问的对象
贴上一些设置和读取Cookies,Session的代码,
package testSource;
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;
/**
* 向cookies中添加内容并读取
* @author zhengwu
*
*/
public class WRCookies extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Cookie ck=new Cookie("testCookie","cookieValue");
// ck.setMaxAge(1000);
resp.addCookie(ck);
Cookie[] getCk=req.getCookies();
PrintWriter pw=new PrintWriter(resp.getOutputStream());
}
}
package testSource;
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;
/**
* 获得请求中的cookies
* @author zhengwu
*
*/
public class ShowCookies extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter pw=new PrintWriter(resp.getOutputStream());
resp.setContentType("text/html ;charset=utf-8");
for(Cookie ck:req.getCookies()){
System.out.println(ck.getName());
System.out.println(ck.getValue());
pw.print(ck.getName());
pw.println(ck.getValue());
}
pw.flush();
}
}
package testSource;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Application 其实也就是和ServletContext一一对相应的一个东西,只不过application是存在于jsp文件中的(网上查找的)就相当于
* jsp将ServletContext封装成了appLicaton 每个web应用或虚拟机会有一个ServletContext 每个servlet会 对应一个servletConfig(
* ( A servlet configuration object used by a servlet container to pass
* information to a servlet during initialization.)
*
* 什么是ServletContext 我们来看源码中的注释,大致翻译如下:
* 定义一些方法,供Servlet调用,用来和servlet容器回话 例如:to get the MIME type of a file 处理请求,写日志等等
* 每个web引用(一些servlet的集合和安装在subset中的内容这些内容用url 命名空间指定)
* 当web 应用是分布式的时候 每个虚拟机会有一个congtext就不能用servletContext来共享Globle信息,需要使用database等外部资源
*
* @author zhengwu
*
*/
public class Application extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session=req.getSession(true);
ServletContext sc=this.getServletContext();
Integer accessCount =(Integer)sc.getAttribute("accessCount");
if(accessCount==null){
accessCount=new Integer(0);
}else{
accessCount++;
}
sc.setAttribute("accessCount", accessCount);
System.out.println(accessCount);
}
}