Java基础学习之cookie

一: 保存表单数据到对象中:

  • getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。

  • getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
  • getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法
private void fun1(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=UTF-8");
		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)

//根据表单属性新建一个对象类用来保存表单数据
private void fun2(HttpServletRequest request) {
		//把请求中的参数 放到map中
		Map<String, String[]> map = request.getParameterMap();
		for (String key : map.keySet()) {
			System.out.println(key);
			String[] str = map.get(key);
			for (String value : str) {
				System.out.println(value);
			}
		}
	}
username
vlin_fan
password
5201314
sex
女
hobby
唱歌
city
北京
		Enumeration<String> Names = request.getParameterNames();
		while (Names.hasMoreElements()) {
			System.out.println(Names.nextElement());
		}
	
username
password
sex
hobby
city

请求转发

 一次请求 并且响应到网页的是 转发后的响应结果

请求重定向

  两次请求 超出Request域的作用范围 不能使用

  request域传值

请求包含

  1.几次请求? 一次请求 (可以用request域传值)

  2.最终响应的浏览器的内容是什么?

  两个servlet 的响应结果会一起返回给浏览器


package com.lanou3g;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Demo02 extends HttpServlet {

	/**
	 * Request  域对象
	 * 内部维护了一个map集合 可以添加获取删除 值
	 * 作用范围:只对一次请求有效
	 */
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=UTF-8");
		
		//获取响应中字符流
		PrintWriter writer = response.getWriter();
		  //向域对象中保存个值
		  request.setAttribute("name", "阿凡达");
		//fun1(request, response);
		 // fun2(response);
		  //请求包含
		  //1 获取请求转化器
		  RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
		  //2 包含方法
		  dispatcher.include(request, response);
		  
		writer.write("123");
		System.out.println("我是demo02");
	}

	private void fun2(HttpServletResponse response) throws IOException {
		//进行请求重定向
		  //参数是重定向的地址
		  response.sendRedirect("/sh-web-03/demo03");
	}

	private void fun1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//请求转发
		//获取请求转发器
		RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
		//转发
		dispatcher.forward(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
package com.lanou3g;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Demo03 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=UTF-8");
		
		PrintWriter writer = response.getWriter();
		writer.write("456");
		//取出存在request域中的值
		String nString =(String)request.getAttribute("name");
		System.out.println(nString);
		System.out.println("我是demo03");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
配置的xml文件
<servlet>
  	<servlet-name>demo02</servlet-name>
  	<servlet-class>com.lanou3g.Demo02</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo02</servlet-name>
  	<url-pattern>/demo02</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>demo03</servlet-name>
  	<servlet-class>com.lanou3g.Demo03</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo03</servlet-name>
  	<url-pattern>/demo03</url-pattern>
  </servlet-mapping>

会话技术:

客户端与服务端的交互 就是会话

  什么是会话? 

   相当于访问网页时 只要浏览器不关闭 点击多次连接也属于一次会话. 

   关闭浏览器就叫结束会话

  1.客户端技术   Cookie 保存着浏览器当中 实际上就是一个文件  第一次访问cooKie 是没有内容的

  每个站点(网站) 可以保存20个cookie 

  每个浏览器可以保存300个cookie

  每个cookie大概可以保存4kb 的数据

  cookie的默认存活时间为一次会话 关闭浏览器 cookie被清除

  默认是保存在 浏览器的内存当中  可以设置cookie的存活时间 

  一旦设置时间 浏览器会将cookie保存到硬盘当中 (保存到文件中)

  注意 不能保存中文

  设置cookie的存活时间

  setMaxAge(int 时间 以秒为单位) 

  正值: 值是多少 浏览器就保存多少秒

  负值: 浏览器不会存储cookie到硬盘当中

        当浏览器关闭 会话结束 这个cookie 被删除    

  0  : cookie 被删除

一 :看一个cookie保存时间的例子

需求:显示上一次(最后一次)的登录时间 (关闭浏览器之后 在访问还能显示)

   第一次访问时将时间保存到cookie中再响应会浏览器 让浏览器存储起来

   下一次在访问时 可以通过request 请求获取之前保存的cookie 显示之前存储的时间

package com.lanou3g;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo04 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=UTF-8");
		
		//接到请求 先读取cookie
		//获取请求中的cookie
		Cookie[] cookies = request.getCookies();
		if (cookies!=null) {
			//遍历cookie的数组
			for (Cookie cookie : cookies) {
				//找出之前保存的cookie按名字
				if (cookie.getName().equals("lastTime")) {
					//获取cookie 的值
					String value = cookie.getValue();
					//将字符串转化成long型
					long time = Long.parseLong(value);
					//转化成时间
					Date date = new Date(time);
					//转化时间的格式(格式化输出时间)
					SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
					//格式化date对象
					String lastTime = dateFormat.format(date);
					//打印前一次的登录时间写的网页上
					PrintWriter writer = response.getWriter();
					writer.write("上次登录时间为"+lastTime);
				}
			}
		}
		
		//创建一个cookie对象
		Cookie cookie = new Cookie("lastTime", System.currentTimeMillis()+"");
		//设置cookie的保存路径
		// "/" 表示该工程下的所有servlet 都能访问 保存时相当于按工程名存储
		//  "/sh-web-03/servlet" 相当于 只有servlet 目录下的网页才能访问
		cookie.setPath("/sh-web-03/servlet");
		//设置cookie的存活时间
		cookie.setMaxAge(60*5);
		//添加cookie到响应中
		response.addCookie(cookie);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
package com.lanou3g;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Demo05 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=UTF-8");
		Cookie[] cookies = request.getCookies();
		if (cookies!=null) {
			//遍历cookie的数组
			for (Cookie cookie : cookies) {
				//找出之前保存的cookie按名字
				if (cookie.getName().equals("lastTime")) {
					//获取cookie 的值
					String value = cookie.getValue();
					//将字符串转化成long型
					long time = Long.parseLong(value);
					//转化成时间
					Date date = new Date(time);
					//转化时间的格式(格式化输出时间)
					SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
					//格式化date对象
					String lastTime = dateFormat.format(date);
					//打印前一次的登录时间写的网页上
					PrintWriter writer = response.getWriter();
					writer.write("上次登录时间为"+lastTime);
				}
			}
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

配置的XML文件

 <servlet>
  	<servlet-name>demo04</servlet-name>
  	<servlet-class>com.lanou3g.Demo04</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo04</servlet-name>
  	<url-pattern>/servlet/demo04</url-pattern>
  </servlet-mapping>
  
   <servlet>
  	<servlet-name>demo05</servlet-name>
  	<servlet-class>com.lanou3g.Demo05</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo05</servlet-name>
  	<url-pattern>/servlet/demo05</url-pattern>
  </servlet-mapping>

需求 :

 * 登录后 下次再打开浏览器 还能记录用户名

package com.lanou4g;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Demn06 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=UTF-8");
		String username = "";
		String remember = "";
		Cookie[] cookies = request.getCookies();
		if (cookies!=null) {
			for (Cookie cookie : cookies) {
				if (cookie.getName().equals("username")) {
					 username = cookie.getValue();
					 remember = "checked=\'checked\'";
					 
				}
			}
		}
		
		//将HTML表单写入浏览器
		String str = "<form action=\"/sh-web-03/demn07\" method=\"post\">\n" + 
				"		用户:<input type=\"text\" name=\"username\""+
				" value="+username+" /><br/>\n" + 
				"		密码:<input type=\"text\" name=\"password\"/><br/>\n" + 
				"		记住:<input type=\"checkbox\" name=\"remember\""+
				remember+ "/><br/>\n" + 
				"		<input type=\"submit\"  value=\"提交\"/>\n" + 
				"	</form>";
		
		response.getWriter().println(str);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
package com.lanou3g;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
 * 处理登录的请求
 * 判断账户wanglong 密码123 就算登录成功
 * 点记住 就保存cookie 设置存活时间 没点 就把cookie删除
 */
public class Demo07 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=UTF-8");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		 String[] values = request.getParameterValues("remember");
		 //单选框 选中返回 on 不选 返回 null
		 //创建密码保存用户名
		 Cookie cookie = new Cookie("username", username);
		 //设置cookie的路径
		 cookie.setPath("/sh-web-03/servlet");
		if (username.equals("wanglong")&&password.equals("123")) {
		
			//点记住 就保存cookie 设置存活时间 没点 就把cookie删除
			if (values!=null) {
				//设置存活时间
				cookie.setMaxAge(Integer.MAX_VALUE);
				
			}else {
				//删除cookie
				cookie.setMaxAge(0);
			}
			//显示登录成功
			response.getWriter().write("登录成功");
			//响应中添加cookie 
			response.addCookie(cookie);
		}else {
			//登录失败 3 秒返回登录界面
			response.getWriter().write("登录失败");
			response.setHeader("refresh", "3;url=/sh-web-03/servlet/demo06");
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}




猜你喜欢

转载自blog.csdn.net/vlin_fan/article/details/80783151