转发和重定向的区别:
1)地址:转发地址必须是同一个应用内部的某个组件,重定向的地址没有限制
2)共享request:转发可以,而重定向不可以。原因是转发是一次请求,重定向是两次请求,request的

生命周期只能在一次请求内,请求结束,request被删除。
3)浏览器地址栏地址变化:转发不变,而重定向会变
4)事件是否处理完毕:转发是一件事没做完,重定向是一件事已经做完。
5)使用:删除操作用重定向;查询相关用转发。

2状态管理之一:Cookie(在客户端管理用户 的状态)
1)what:浏览器在访问服务器时,服务器将一些数据以set-cookie消息头的形式发给浏览器,浏览器将

这些数据保存起来。当浏览器再次访问服务器时,会将这些数据以cookie 消息头形式发给服务器。
2)创建cookie

public class AddCookieServlet extends HttpServlet{ 

 public void service(HttpServletRequest request, HttpServletResponse response)throws 


 ServletException,IOException{ 

 response.setContentType("text/html;charset=utf-8"); 

 PrintWriter out = response.getWriter(); 

 Cookie cookie = new Cookie("username","aaa"); 

 Cookie cookie2 = new Cookie("pwd","123"); 

 response.addCookie(cookie); 

 response.addCookie(cookie2); 

 out.close(); 

 } 

 } 


 3)查找Cookie 

 public class AddCookieServlet extends HttpServlet{ 

 public void service(HttpServletRequest request, HttpServletResponse response)throws 


 ServletException,IOException{ 

 response.setContentType("text/html;charset=utf-8"); 

 PrintWriter out = response.getWriter(); 

 Cookie[] cookies = request.getCookies(); 

 if(cookies != null){ 

 for(int i=0;i<cookies.length;i++){ 

 Cookie curr = cookies[i]; 

 String name = curr.getName(); 

 String value = curr.getValue(); 

 out.println("name:"+name+"value:"+value); 

 } 

 }else{ 

 out.println("no cookie"); 

 } 

 out.close(); 

 } 

 } 

 4)cookie 的编码问题 

 cookie 的值只能是ASCII字符。可以使用URLEncoder.encode()方法和URLDecoder.decode()方法来进行 


 这种转换。 

 如:String name = URLEncoder.encode("张三","utf-8"); 


 5)Cookie 的保存时间 


 cookie.setMaxAge(int seconds) 

 seconds>0:表示超过指定时间后,删除文件 

        =0:表示立刻删除该文件 

        <0:表示浏览器关闭,删除文件。 


 6)删除cookie 

 步骤1:创建一个同名且内容为空的cookie  如:Cookie c = new Cookie("username",""); 

 步骤2:调用时间方法,参数为0。          如:c.setMaxAge(0); 

 步骤3:调用返回方法。                   如:response.addCookie(c) 


 7)Cookie的限制: 
  可以被禁止;大小有限制(4K);数量有限制(约300个);其值只能为字符串;不安全。


Session
 1)浏览器访问服务器时,服务器会创建一个Session对象。服务器在缺省情况下,会将sessionId以

 cookie机制发送给浏览器。当浏览器再次访问服务器时,会将sessionId发送给服务器。服务器依据

 sessionId就可以找到session对象。
 2)获得session对象   HttpSession session = request.getSession(boolean flag)
 3)HttpSession接口提供的一些方法
     a.获得sessionId.   String session.getId();
     b.绑定服务器。     session.setAttribute(String name,Object obj)

 session实现访问计数

 public class CountServlet extends HttpServlet{
 public void service(HttpServletRequest request, HttpServletResponse response)throws 

 ServletException,IOException{
 response.setContentType("text/html;charset=utf-8");
 PrintWriter out = response.getWriter();
 HttpSession session = request.getSession();
 System.out.println(session.getId());
 Integer count = (Integer)session.getAttribute("count");
 if(count==null){
 count=1;
 }else{
 count++;
 }
 session.setAttribute("count",count);
 out.println("您是第"+count+"次访问");
 out.close();
 }
 }

 4)session超时
 服务器会将超过指定时间的session对象删除
 session.setMaxInactiveInterval(int seconds);

 5)删除session
 session.invalidate()方法可立即删除对象

 6)session验证:防止非登陆用户通过地址栏输入直接访问受保护页面
 step1  在登陆成功后,在session上绑定一些数据。绑定的数据时自定义的,一般情况下我们绑定用户

 信息,比如session.setAttribute("user",user)
 step2   在访问需要保护的页面或者资源,执行Object obj = session.getAttribute("user");如果obj

 为null,说明没有登陆,一般重定向到登陆页面