Эта статья делает сервлет понятным и понятным

Java задняя часть
Эта статья делает сервлет понятным и понятным

«Эта статья участвовала в мероприятии Haowen Convocation Order, щелкните, чтобы просмотреть:Двойные заявки на внутреннюю и внешнюю стороны, призовой фонд в 20 000 юаней ждет вас, чтобы бросить вызов!"

1. Файлы cookie

1.1. Обзор файлов cookie

Куки (cookie) — это технология, с помощью которой сервер уведомляет клиента о сохранении пары ключ-значение. После того, как у клиента есть файл cookie, каждый запрос отправляется на сервер.Размер каждого файла cookie не может превышать 4 КБ.

1.2. Создание файлов cookie

image-20210118212323112

protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException,	IOException {
	//1 创建 Cookie 对象
    Cookie cookie = new Cookie("key","value");
    //2 相应给浏览器(客户端)
    Cookie cookie1 = new Cookie("key2","value2");
}   

1.3 Сервер получает куки

image-20210118214300401

Серверу нужна только одна строка кода, чтобы получить файл cookie клиента:req.getCookies();, который возвращает массив файлов cookie.

1.4. Инструменты для файлов cookie

Мы просто создаем служебный класс для поиска объекта Cookie с указанным именем.

public class CookieUtils {
/**
* 查找指定名称的 Cookie 对象
* @param name
* @param cookies
* @return
*/
	public static Cookie findCookie(String name , Cookie[] cookies){
		if (name == null || cookies == null || cookies.length == 0) {
			return null;
		}
		for (Cookie cookie : cookies) {
			if (name.equals(cookie.getName())) {//getName 方法返回 Cookie 的 key(名)
				return cookie;// getValue 方法返回 Cookie 的 value 值
                	}
		}
			return null;
	}
}

1.5. Изменение значения файла cookie

1.5.1 Схема 1

  1. Сначала создайте объект Cookie с тем же именем (со ссылкой на ключ), который нужно изменить.
  2. вызов response.addCookie(Cookie);
// Cookie cookie = new Cookie("key1","Value1");
Cookie cookie = new Cookie("key1","newValue1");
// 调用 response.addCookie( Cookie ); 通知 客户端 保存修改
resp.addCookie(cookie);

1.5.2 Вариант 2

  1. Сначала найдите объект Cookie, который необходимо изменить.
  2. Вызовите метод setValue(), чтобы присвоить новое значение файла cookie.

1.6. Файлы cookie просмотра браузера

1.6.1, Гугл

image-20210119142227292

1.6.2, Фаерфокс

image-20210119142241876

1.7. Контроль срока службы файлов cookie

Мы можем управлять, когда файл cookie уничтожается, что является контролем жизни файла cookie. мы используемsetMaxAge()метод контроля.

значение параметра значение
Положительное число Указывает, что срок действия истекает через указанное количество секунд.
отрицательное число Указывает, что файл cookie будет удален, как только браузер будет закрыт (по умолчанию -1).
нуль Указывает, что файл cookie будет немедленно удален.
/**
* 设置存活 1 个小时的 Cooie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
	Cookie cookie = new Cookie("life3600", "life3600");
	cookie.setMaxAge(60 * 60); // 设置 Cookie 一小时之后被删除。无效
	resp.addCookie(cookie);
	resp.getWriter().write("已经创建了一个存活一小时的 Cookie");
}

/**
* 马上删除一个 Cookie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
    // 先找到你要删除的 Cookie 对象
Cookie cookie = CookieUtils.findCookie("key4", req.getCookies());
	if (cookie != null) {
		// 调用 setMaxAge(0);
		cookie.setMaxAge(0); // 表示马上删除,都不需要等待浏览器关闭
		// 调用 response.addCookie(cookie);
		resp.addCookie(cookie);
		resp.getWriter().write("key4 的 Cookie 已经被删除");
	}
}

/**
* 默认的会话级别的 Cookie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
	Cookie cookie = new Cookie("defalutLife","defaultLife");
	cookie.setMaxAge(-1);//设置存活时间,浏览器一关闭就销毁
	resp.addCookie(cookie);
}

1.8. Настройка действительного пути для файлов cookie

Атрибут пути файла cookie может эффективно фильтровать, какие файлы cookie могут быть отправлены на сервер, а какие нет. Атрибут пути эффективно фильтруется запрошенным адресом.

2. Сессия

2.1, Обзор сеанса

Сессия — это сессия, а Сессия — это, по сути, оправдание (HttpSession). Это метод, используемый для поддержания связи между клиентом и сервером.

У каждого клиента есть своя собственная сессия Session, которую мы часто используем для сохранения информации после входа пользователя в систему.

2.2, Доступ к данным сеансового домена

/**
* 往 Session 中保存数据
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
	req.getSession().setAttribute("key1", "value1");
	resp.getWriter().write("已经往 Session 中保存了数据");
}
/**
* 获取 Session 域中的数据
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
	Object attribute = req.getSession().getAttribute("key1");
	resp.getWriter().write("从 Session 中获取出 key1 的数据是:" + attribute);
}

2.3, Управление жизненным циклом сеанса

public void setMaxInactiveInterval(int interval): Установите время ожидания сеанса (в секундах).Если указанное время превышено, сеанс будет уничтожен.Когда значение положительное, устанавливает период ожидания сеанса. Отрицательное число означает отсутствие тайм-аута (используется редко).

public int getMaxInactiveInterval(): получить время ожидания сеанса. Время ожидания по умолчанию для сеанса составляет 30 минут.

public void invalidate() : Недопустимо немедленное истечение времени текущего сеанса.

image-20210119160945481

protected void life3(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
	// 先获取 Session 对象
	HttpSession session = req.getSession();
	// 设置当前 Session3 秒后超时
	session.setMaxInactiveInterval(3);
	resp.getWriter().write("当前 Session 已经设置为 3 秒后超时");
    // 让 Session 会话马上超时
	session.invalidate();
    resp.getWriter().write("Session 已经设置为超时(无效)");
}

2.4. Принцип сеанса

Сессионная технология,Нижний уровень фактически реализован на основе технологии Cookie.

image-20210119161129071