Cookie+Session+ServletContentext的区别和用法

来源:互联网 发布:网络教育学制 编辑:程序博客网 时间:2024/05/20 08:26
//总结一下:Cookie和Session都是通过request得到,ServletContext是通过this得到。Cookie通过getValue取值,Session和ServletContext通过getAttribute取值。Cookie通过setMaxAge来清空,Session通过setMaxActiveInterval来清空。

Cookie的创建:Cookie通过new,add,setMaxAge的方式设定值,Session和ServletContext通过setAttribute的方式设定值。
//演示了一个Cookie的创建的案例
package Model;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class CookieTest1 extends HttpServlet{
//处理doGet请求
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{
try{
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter pw=response.getWriter();
//当有用户访问该Servlet时,就将信息创建到该用户的Cookie中
//1.现在服务器端创建一个cookie
Cookie myCookie =new Cookie("color1","red");
Cookie name=new Cookie("myname",u);
Cookie pass=new Cookie("mypasswd",p);
//2.设置改cookie存在的时间,如果你不设置存在时间,那么该cookie将不会保存
myCookie.setMaxAge(30);
name.setMaxAge(14*24*3600);
pass.setMaxAge(14*24*3600);
//3.将该cookie写回到客户端
response.addCookie(myCookie);
res.addCookie(name);
res.addCookie(pass);
pw.println("已经创建了cookie");
}catch(Exception e){
e.printStackTrace();
}
}
}

//如何读取cookie案例
package Model;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.*;

public class CookieTest2 extends HttpServlet{
//处理get请求
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{
try{
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw=response.getWriter();
//从客户端得到所有的cookie信息
Cookie[] allCookie=request.getCookies();
int i=0;
//如果allCookie不为空..
if(allCookie!=null){
//从中取出cookie
for(i=0;i<allCookie.length;i++){
//依次取出
Cookie temp=allCookie[i];
if(temp.getName().equals("color1")){
//得到cookie的值
String val=temp.getValue();
pw.println("color1="+val);
break;
}
if(allCookie.length==i){
pw.println("Cookie已过期!!!");
}
}
}else{
pw.println("不存在color1这个cookie或者已经过期了!!!");
}
}catch(Exception e){
e.printStackTrace();
}
}
}



//如何删除cookie案例
package Model;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.*;

public class CookieTest3 extends HttpServlet{
//处理get请求
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw=response.getWriter();
//从客户端得到所有cookie信息
Cookie[] allCookies=request.getCookies();
int i=0;
//如果allCookies不为空..
if(allCookies!=null){
//从中取出cookie
for(i=0;i<allCookies.length;i++){
Cookie temp=allCookies[i];
if(temp.getName().equals("color1")){
//如果取出的是该cookie则将其删除
temp.setMaxAge(0);
pw.println("删除了color这个cookie");
break;
}
}
}else{
pw.println("所有cookie都为空!!!");
}
}
}


Session:
//session案例--如何得到session/和在session中添加属性
package Model;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class SessionTest1 extends HttpServlet{
//处理get请求
//request:用于获得客户端(浏览器)信息
//response:用于向客户端(浏览器)返回信息
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{
//处理中文乱码
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw=response.getWriter();
//得到和request相关联的session,如果没有就创建session
HttpSession hs=request.getSession(true);
//得到session的id,这是由容器分配的
String sessionId=hs.getId();
pw.println("sessionTest1的session id="+sessionId);
//向session中添加一个属性(String类型的)
hs.setAttribute("name", "李世荣");
//如果不指定时间,那么该session的有效期是30秒
hs.setMaxInactiveInterval(20);
pw.println("在session中放入了一个属性 name=李世荣");
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{
this.doGet(request, response);
}
}

package Model;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SessionTest2 {
//处理get请求
//request:用于获得客户端(浏览器)的信息
//response:用于向客户端(浏览器)返回信息
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw=response.getWriter();
//得到和req相关联的session,如果没有就创建session
HttpSession ht=request.getSession(true);
//得到sessionId
String sessionId=ht.getId();
pw.println("sessionTest2的session id="+sessionId);
//得到session中的某个属性
String myName=(String)ht.getAttribute("name");
pw.println("name="+myName);
}
}


package Model;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SessionTest3 extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw=response.getWriter();
//得到和request相关联的session,如果没有就创建session
HttpSession ht=request.getSession(true);
//向session中添加一个属性(String类型的)
ht.setAttribute("you", "周星星");
ht.setAttribute("I", "lishirong");
pw.println("在没有删除you属性前you的值="+ht.getAttribute("you")+"<br>");
//从session中删除you属性
ht.removeAttribute("you");
ht.setMaxInactiveInterval(0);
pw.println("删除you属性后you的值="+ht.getAttribute("you")+"<br>");
pw.println("删除you属性后he的值="+ht.getAttribute("he")+"<br>");
}
}


ServletContext:

package Model;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletContext extends HttpServlet{
public void init(){
//重写init函数
try{
//只会被调用一次
//创建一个FileReader
FileReader fr=new FileReader("F:\\counter.txt");
BufferedReader br=new BufferedReader(fr);
//读出一行数据
String numVal=br.readLine();
//一定要关闭文件流
br.close();
//将times放入到ServletContext
this.getServletContext().setAttribute("visitTimes",numVal);
System.out.println("init被调用!");
}catch(Exception e){
e.printStackTrace();
}
}
//重写destroy函数
public void destroy(){
try{
FileWriter fw=new FileWriter("f:\\counter.txt");
BufferedWriter bw=new BufferedWriter(fw);
//在文件中写入数据
bw.write(this.getServletContext().getAttribute("visitTimes").toString());
//关闭文件流
bw.close();
System.out.println("destroy被调用");
}catch(Exception e){
e.printStackTrace();
}
}
//处理get请求
public void doGet(HttpServletRequest request,HttpServletResponse response){
try{
String u=request.getParameter("username");
String p=request.getParameter("password");
//将servletContext中的visitTime所对应的值++
String times=this.getServletContext().getAttribute("visitTimes").toString();
//对times++再重新放回servlet
this.getServletContext().setAttribute("visitTimes", (Integer.parseInt(times)+1)+"");
//跳转到wel
response.sendRedirect("Main");
}catch(Exception e){
e.printStackTrace();
}
}
}







0 0