1. 程式人生 > >表單中獲取資料及cookie的一些方法

表單中獲取資料及cookie的一些方法

一:從表單中獲取資料
public class Demo01 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
  //防止請求過來的資料亂碼(解決post請求亂碼)
    request.setCharacterEncoding("UTF-8");                
    //獲取表單請求過來的引數
    //傳入的引數  就是表單中 name標籤
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    System.out.println(username+" "+password);		

}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}

二:利用beanuitls封裝一個物件
public class Demo02 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	response.setContentType("text/html;charset=UTF-8");
	request.setCharacterEncoding("UTF-8");
				
	//利用beanuitls直接將請求的引數封裝成一個物件
	//引數2 從請求中獲取的引數的map集合
	//注意:1.使用的實體類物件 必須符合javabean規範
	//    2.實體類的成員變數 要跟獲取的引數一樣
	//    3.實體類的成員變數名 和 name標籤名要相同
	User user=new User();		
	try {
		BeanUtils.populate(user, request.getParameterMap());
		System.out.println(user);
	} catch (IllegalAccessException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (InvocationTargetException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

private void fun4(HttpServletRequest request) {
	//將獲取的引數 封裝成一個物件
 String username = request.getParameter("username");
    String password = request.getParameter("password");
    String sex = request.getParameter("sex");
    //獲取多個值
    String[] hobby = request.getParameterValues("hobby");
    String city = request.getParameter("city");
    //放入物件中
    User user =new User(username, password, sex, hobby, city);
    System.out.println(user);
}

private void fun3(HttpServletRequest request) {
	//獲取引數的map集合
	Map<String, String[]> map = request.getParameterMap();
	for (String key  : map.keySet()) {
		String[] values = map.get(key);
		for (String value : values) {
			System.out.println(key+" = "+value);
		}
	}
}

private void fun2(HttpServletRequest request) {
	//獲取引數的所有name 
	Enumeration<String> names = request.getParameterNames();
	while (names.hasMoreElements()) {
		System.out.println(names.nextElement());
	}
}

private void fun1(HttpServletRequest request) {
	String username = request.getParameter("username");
    String password = request.getParameter("password");
    String sex = request.getParameter("sex");
    //獲取多個值
    String[] hobby = request.getParameterValues("hobby");
    String city = request.getParameter("city");
    System.out.println(username);
    System.out.println(password);
    for (String string : hobby) {
		System.out.println(string);
	}
	System.out.println(city);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// TODO Auto-generated method stub
	doGet(request, response);
}

}
三:request域物件 作用範圍 只在一次請求中有效
public class Demo03 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	response.setContentType("text/hyml;charset=UTF-8");
	request.setCharacterEncoding("UTF-8");		
	//獲取字元流
	PrintWriter writer = response.getWriter();
	request.setAttribute("feifei", "pang");
	//請求包含(一次請求  並且兩個頁面的響應都會返回給瀏覽器)
	//獲取轉發器
	RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04");
	//包含方法
	dispatcher.include(request, response);		
	//響應回瀏覽器
	writer.write("123");
	System.out.println("是demo03");
}

private void fun2(HttpServletResponse response) throws IOException {
	//測試請求重定向(兩次請求 超出request的範圍)
	response.sendRedirect("/sh-web-03/demo04");
}

private void fun1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//測試域物件的使用範圍
	//請求轉發(一次請求)
	//注意  最終響應回瀏覽器的內容是 轉發到的頁面的響應
	//在request域中儲存值
	request.setAttribute("feifei", "pang");
	//使用request物件 進行請求轉發
	//獲取請求轉發器
	RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04");
	dispatcher.forward(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// TODO Auto-generated method stub
	doGet(request, response);
}

}
四:會話技術

  • 指的是客戶端(使用者/瀏覽器)和服務端(servlet)進行的互動

  • 一次會話 只有當關閉瀏覽器時 這次會話算結束

  • 1.客戶端技術(瀏覽器實現) Cookie

  • Cookie使用流程

  •         1.當用戶第一次訪問伺服器時  伺服器可以建立一個Cookie出來
    
  •         並且新增到響應中  響應回用戶(瀏覽器)
    
  •         2.當瀏覽器 接收到 攜帶了Cookie的響應後   會將cookie儲存到本地檔案
    
  •        3.當用戶再次訪問伺服器時   會攜帶著cookie一起去訪問  這時服務端拿到cookie可以使用
    
  •     4.預設當瀏覽器關閉時  會話結束   瀏覽器銷燬儲存cookie(可以設定cookie存活時間  時間到  才銷燬)
    
  • Cookie的使用

  • 1.每個網站最多可以儲存20個cookie到瀏覽器中
    
  • 2.每個cookie最多隻能儲存4kb(只能儲存小資料)
    
  • 3.每個瀏覽器最多可以儲存300個cookie
    
  • 4.cookie中不能儲存中文
    
  • 設定cookie的存活時間

  • setMaxAge 以秒為單位

  • 正值 cookie到時間被銷燬

  • 負值 瀏覽器不會儲存cookie 會話結束 直接銷燬cookie

  • 0值 立即刪除cookie

  • public class Demo04 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType(“text/html;charset=UTF-8”);
    request.setCharacterEncoding(“UTF-8”);

     //從請求中獲取cookie
     Cookie[] cookies = request.getCookies();
     if (cookies!=null) {
     	for (Cookie cookie : cookies) {
     		//找出剛才儲存的lastTime的cookie
     		if (cookie.getName().equals("lastTime")) {
     			//獲取cookie儲存的值
     			String value = cookie.getValue();
     			//字串轉long型
     			long time = Long.parseLong(value);
     			//字串轉時間
     			Date date=new Date(time);
     			//將日期物件格式化
     			SimpleDateFormat sdf=new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
     			//格式化
     			String stringTime = sdf.format(date);
     			//將時間顯示到瀏覽器
     			response.getWriter().println(stringTime);
     		}
     	}
     }
     
     
     //建立cookie
     Cookie cookie=new Cookie("lastTime", System.currentTimeMillis()+"");
     //設定存活時間
     cookie.setMaxAge(60*1);
     //設定儲存路徑
     //  /表示工程下所有的servlet類都能拿到這個cookie
     //  /sh-web-03/servlet表示只有訪問路徑是servlet下的類才能獲取到cookie
     cookie.setPath("/sh-web-03/servlet");
     //儲存到響應中
     response.addCookie(cookie);				
    

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
    }

}