第74节:第74节:Java中的Cookie和Sessionhtml
ServletContext
:什么是ServletContext
,有什么用哦,怎么用呢?java
启动服务器后,会给每一个应用程序建立一个ServletContext
,而且这个ServletContext
对象只有一个。能够用于获取全局参数,工程下的资源,和存取数据,共享数据。web
例子,如何获取全局参数,如何获取工程下的资源,如何进行存取数据,用例子代码进行展现。数组
getServletContext().getInitParams();
和getServletConfig().getInitParams();
浏览器
getServletContext().getRealPath()
getServletContext().getReasourceAsStream()
tomcat
InputStream is = getClass().getClassLoader().getReasourceAsStream();
安全
相对路径和绝对路径bash
getServletContext().setAttribute()
服务器
getServletContext().getAttribute()
cookie
获取登陆成功次数
HttpServletRequest
:请求对象,用于封装客户端提交过来的数据或者信息。 能够获取头信息,提交过来的数据: `request.getParameter("name"); // dashucoding url链接拼接
中文乱码状况
HttpServletResponse
:响应对象,服务器要返回给客户端的数据
跳转页面: response.setStatus(302);
response.setHeader("Location","success.html");
文件下载:输出流和输入流的对接
下载中文名字的资源:
// index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
默认servlet去下载<br>
<a href="download/aa.jpg">aa.jpg</a><br>
<a href="download/bb.txt">bb.txt</a><br>
<a href="download/cc.rar">cc.rar</a><br>
<br>手动下载<br>
<a href="Demo01?filename=aa.jpg">aa.jpg</a><br>
<a href="Demo01?filename=bb.txt">bb.txt</a><br>
<a href="Demo01?filename=cc.rar">cc.rar</a><br>
<a href="Demo01?filename=达叔.png">达叔.png</a><br>
</body>
</html>
复制代码
// Demo01.java
package com.dashucoding.servlet;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Demo01
*/
public class Demo01 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 获取要下载的文件名字
String fileName = request.getParameter("filename");
// 获取这个文件在tomcat里面的绝对路径地址
String path = getServletContext().getRealPath("download/"+fileName);
// 用于用户下载
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
// 转化成输入流
InputStream is = new FileInputStream(path);
OutputStream os = response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while( (len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
os.close();
is.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
复制代码
浏览器
// Demo01.java
package com.dashucoding.servlet;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Demo01
*/
public class Demo01 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 获取要下载的文件名字
String fileName = request.getParameter("filename");
// get请求有中文
//byte[] bytes = fileName.getBytes("ISO-8859-1");
//new String(bytes, "UTF-8");
fileName = new String(fileName.getBytes("ISO-8859-1"), "UTF-8");
System.out.println("fileName="+fileName);
// 获取这个文件在tomcat里面的绝对路径地址
String path = getServletContext().getRealPath("download/"+fileName);
// 对中文的名字进行编码处理
// 获取来访客户端的类型
String clientType = request.getHeader("User-Agent");
if (clientType.contains("Firefox")) {
fileName = DownLoadUtil.base64EncodeFileName(fileName);
}else {
fileName = URLEncoder.encode(fileName, "UTF-8");
}
// 用于用户下载
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
// 转化成输入流
InputStream is = new FileInputStream(path);
OutputStream os = response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while( (len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
os.close();
is.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
复制代码
// DownLoadUtil
package com.dashucoding.servlet;
import java.io.UnsupportedEncodingException;
import sun.misc.BASE64Encoder;
public class DownLoadUtil {
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
复制代码
登陆
// LoginServlet
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// public void setContextType(String type)
// 设置将发送到客户端的响应的内容类型,若是该响应还没有提交,给定内容类型可能包含字符编码规范,例如
// text/html;charseet=UTF-8,若是在调用 getWriter以前调用此方法,则只根据给定内容类型设置响应的字符编码
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(userName) && "123".equals(password)) {
response.getWriter().write("登陆成功");
}else {
response.getWriter().write("登陆失败");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
复制代码
// web
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>RequestRedirctionDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.dashucoding.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
复制代码
// login
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login">
帐号: <input type="text" name="username"/><br>
密码: <input type="text" name="password"/><br>
<input type="submit" value="登陆"/><br>
</form>
</body>
</html>
复制代码
// LoginServlet
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// public void setContextType(String type)
// 设置将发送到客户端的响应的内容类型,若是该响应还没有提交,给定内容类型可能包含字符编码规范,例如
// text/html;charseet=UTF-8,若是在调用 getWriter以前调用此方法,则只根据给定内容类型设置响应的字符编码
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(userName) && "123".equals(password)) {
// response.getWriter().write("登陆成功");
response.setStatus(302);
response.setHeader("Location", "login_success.html");
}else {
response.getWriter().write("登陆失败");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
复制代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>登陆成功!!!</h1>
</body>
</html>
复制代码
重定向
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// public void setContextType(String type)
// 设置将发送到客户端的响应的内容类型,若是该响应还没有提交,给定内容类型可能包含字符编码规范,例如
// text/html;charseet=UTF-8,若是在调用 getWriter以前调用此方法,则只根据给定内容类型设置响应的字符编码
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(userName) && "123".equals(password)) {
// response.getWriter().write("登陆成功");
/*response.setStatus(302);
response.setHeader("Location", "login_success.html");*/
// 重定向写法,从新定位方向
// response.sendRedirect("login_success.html");
// 请求转发的写法
request.getRequestDispatcher("login_success.html").forward(request, response);
}else {
response.getWriter().write("登陆失败");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
复制代码
Cookie
用于自动登陆,浏览记录等,是服务器给客户端的.
Cookie cookie = new Cookie("a","b");
// 响应
response.addCookie(cookie);
复制代码
获取
Cookie
package com.dashucoding.servlet;
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;
/**
* Servlet implementation class Demo01
*/
public class Demo01 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Cookie的简单使用。
//cookie 发送给客户端,而且保存在客户端上的一份小数据
response.setContentType("text/html;charset=utf-8");
//发送cookie给客户端
Cookie cookie = new Cookie("aa", "bb");
//给响应,添加一个cookie
response.addCookie(cookie);
response.getWriter().write("请求成功了...");
//获取客户端带过来的cookie
Cookie[] cookies = request.getCookies();
if(cookies != null){
for (Cookie c : cookies) {
String cookieName = c.getName();
String cookieValue = c.getValue();
System.out.println(cookieName + " = "+ cookieValue);
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
复制代码
Cookie
是一份小数据,是服务器给客户端,存储在客户端上的一份小数据.
http
请求是无状态的.
在响应的时候添加Cookie
Cookie cookie = new Cookie("name", "value");
// 添加cookie
response.addCookie(cookie);
复制代码
在客户端信息里,响应头中多了Set-Cookie
获取客户端带来的Cookie
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie c : cookies){
String cookieName = c.getName();
String cookieValue = c.getValue();
System.out.println(cookieName + " = " + cookieValue);
}
}
复制代码
cookie
过时
public int getMaxAge()
返回以秒为单位指定的cookie
的最大生存时间.
public void setMaxAge(int expiry)
设置cookie
的最大生存时间,以秒为单位.
如何显示上次登陆时间
能够进行判断帐号密码,若是上次有登陆过,那么显示上次的登陆时间.这里分两种状况,获取带过来的cookie
进行判断,第一种是没有cookie
的,第一次登陆,输出登陆成功或者失败,而后给客户端添加cookie
,new Cookie()
,第二种的登陆过的,仍是要输出登陆成功或者是失败,获取之前的cookie
.时间戳要重置怎么理解?
package com.dashucoding.servlet;
import java.io.IOException;
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;
import com.dashucoding.util.CookieUtil;
/**
* Servlet implementation class Demo03
*/
public class Demo03 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(userName) && "123".equals(password)){
//获取cookie last-name --- >
Cookie [] cookies = request.getCookies();
//从数组里面找出咱们想要的cookie
Cookie cookie = CookieUtil.findCookie(cookies, "last");
//是第一次登陆,没有cookie
if(cookie == null){
Cookie c = new Cookie("last", System.currentTimeMillis()+"");
c.setMaxAge(60*60); //一个小时
response.addCookie(c);
response.getWriter().write("欢迎您, "+userName);
}else{
//1. 去之前的cookie第二次登陆,有cookie
long lastVisitTime = Long.parseLong(cookie.getValue());
//2. 输出到界面,
response.getWriter().write("欢迎您, "+userName +",上次来访时间是:"+new Date(lastVisitTime));
//3. 重置登陆的时间
cookie.setValue(System.currentTimeMillis()+"");
response.addCookie(cookie);
}
}else{
response.getWriter().write("登录失败 ");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
复制代码
如何显示商品浏览记录
获取提交过来的id
,把id
放入到cookie
里,跳转界面.
servlet?id=1;
servlet?id=2;
获取cookie 1
1#2
setValue("1#2");
复制代码
jsp
// index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<br>---------1------------<br>
<%! int a = 123; %>
<br>---------2------------<br>
<% int b = 123456; %>
<br>---------3------------<br>
<%=a %><br>
<%=b %>
</body>
</html>
复制代码
浏览记录
package com.dashucoding.util;
import javax.servlet.http.Cookie;
public class CookieUtil {
/**
* 从一个cookie数组中找到具体咱们想要的cookie对象
* @param cookies
* @param name
* @return
*/
public static Cookie findCookie(Cookie[] cookies , String name){
if(cookies != null){
for (Cookie cookie : cookies) {
if(name.equals(cookie.getName())){
return cookie;
}
}
}
return null;
}
}
复制代码
<!-- 显示浏览记录 -->
<%
Cookie[] cookies = request.getCookies();
Cookie cookie = CookieUtil.findCookie(cookies, "history");
// 若是cookie是空,代表没有浏览商品
if(cookie == null){
%>
<h2> 您尚未浏览任何商品! </h2>
<%
}else{
// 不是空,代表有浏览记录
String[] ids = cookie.getValue().split("#");
for(String id : ids){
%>
<li style="width: 150px;height: 216;text-align: center;"><img src="products/1/cs1000<%=id %>.jpg" width="130px" height="130px" /></li>
<%
}
}
%>
复制代码
package com.dashucoding.servlet;
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;
import com.dashucoding.util.CookieUtil;
public class ProductInfoServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
Cookie[] cookies = request.getCookies();
Cookie cookie = CookieUtil.findCookie(cookies, "history");
if (cookie==null) {
Cookie cook = new Cookie("history", id);
cook.setMaxAge(60*60*24*7);
response.addCookie(cook);
}else{
String id2 = cookie.getValue();
cookie.setValue(id+"#"+id2);
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
}
response.sendRedirect("product_info.htm");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
复制代码
清除浏览记录
清除cookie
package com.dashucoding.servlet;
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;
/**
* Servlet implementation class ClearHistory
*/
public class ClearHistory extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 清除cookie
Cookie c = new Cookie("history", "");
c.setMaxAge(0);
// c.setPath("/demo1");
response.addCookie(c);
response.sendRedirect("product_list.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
复制代码
获取cookie
,添加cookie
request.getCookie();
response.addCookie();
复制代码
Cookie
分类
cookie.setMaxAge(0); // 删除
cookie.setMaxAge(100); // 100秒
复制代码
Cloneable
建立一个cookie
,cookie
是servlet
发送到web
浏览器中的少许信息,这些信息是由浏览器保存,而后发送回到服务器中.
cookie
的值是惟一标识客户端的,能够用于cookie
会话管理.一个cookie
拥有一个名,值,能够有一些可选属性.但又cookie
也存在一些问题.浏览器支持每一个web
服务器又20个cookie
,共有300个cookie
,每一个限制在4KB.
安全隐患,大小与个数限制.
Session
会话,Session
是基于Cookie
的一种会话机制.Cookie
是服务器返回一部分小数据在客户端,存放在客户端上.
Session
是把数据存放在服务端.
interface httpsession
public interface httpSession
复制代码
经常使用的方法
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Demo01
*/
public class Demo01 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = request.getSession();
// 获得会话ID
session.getId();
// 存值
session.setAttribute(name, value);
// 取值
session.getAttribute(name);
// 移植
session.removeAttribute(name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
复制代码
// web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SessionDemo02</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.dashucoding.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
复制代码
// LoginServlet
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("收到请求了");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
复制代码
// login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="login">
帐号: <input type="text" name="username"/><br>
密码: <input type="text" name="password"/><br>
<input type="submit" value="登陆"/><br>
</form>
</body>
</html>
复制代码
session
建立与销毁
建立 request.getSession();
销毁 Redis session 存放在服务器内存中的数据
session关闭服务器销毁
session会话时间过时
复制代码
// 能够改的 conf\web.xml 有效期30分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
复制代码
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
String sessionid = request.getSession().getId();
System.out.println("sessionid="+sessionid);
// cookid id -> sessionid
response.getWriter().write("收到请求了");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
复制代码
session
分析
商品列表添加商品,点击商品添加到购物车,到servlet
.
获取点击商品标识id
,存储到购物车,跳转界面.
判断购物车是否有商品,有数量加1,没有数量等于1.
购物车
package com.dashucoding.servlet;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class CarServlet
*/
public class CarServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
// 获取添加到购物车的商品id
int id = Integer.parseInt(request.getParameter("id"));
// cat dog big pig
String [] names = {"cat","dog","big","pig"};
// 取到id对应商品
String name = names[id];
// 获取购物车存放东西的session
// 把一个map 对象存放到session里面去,保证只有一次
Map<String, Integer> map = (Map<String, Integer>) request.getSession().getAttribute("cat");
if(map == null) {
// value -> map
map = new LinkedHashMap<String, Integer>();
request.getSession().setAttribute("cat", map);
}
// 判断购物车里有没有该商品
if(map.containsKey(name)) {
// 在原来基础上 +1
map.put(name, map.get(name)+1);
}else {
map.put(name, 1);
}
response.getWriter().write("<a href='product_list.jsp'><h2>继续购物</h2></a>");
response.getWriter().write("<a href='cart.jsp'><h2>去购物车结算</h2></a>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="CarServlet?id=0"><h2>cat</h2></a><br>
<a href="CarServlet?id=1"><h2>dog</h2></a><br>
<a href="CarServlet?id=2"><h2>big</h2></a><br>
<a href="CarServlet?id=3"><h2>pig</h2></a><br>
</body>
</html>
复制代码
// cart.jsp
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
您的购物车商品以下:
<%
// 获取到map
Map<String,Integer> map = (Map<String,Integer>)session.getAttribute("cat");
// 遍历
if(map != null){
for(String key : map.keySet()){
int value = map.get(key);
// key:商品名称 value:商品名称
// <h3>名称: 数量: </h3>
%>
<h3>名称: <%=key %> 数量: <%=value %></h3><br>
<%
}
}
%>
</body>
</html>
复制代码
package com.dashucoding.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class ClearCartServlet
*/
public class ClearCartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = request.getSession();
// cat购物车
session.removeAttribute("cat");
response.sendRedirect("cart.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
复制代码
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
您的购物车商品以下:
<%
// 获取到map
Map<String,Integer> map = (Map<String,Integer>)session.getAttribute("cat");
// 遍历
if(map != null){
for(String key : map.keySet()){
int value = map.get(key);
// key:商品名称 value:商品名称
// <h3>名称: 数量: </h3>
%>
<h3>名称: <%=key %> 数量: <%=value %></h3><br>
<%
}
}
%>
<a href="ClearCartServlet"><h4>清空购物车</h4></a>
</body>
</html>
复制代码
public void invalidate()
使用,会话无效,取消对任何绑定到它的对象.
// 强制干掉会话
// session.invalidate();
复制代码
cookie和session
复制代码
Cookie
获取上一次访问时间,获取浏览记录,数据存放在客户端
Session
会话技术,数据存放在服务端
setAttribute 存放数据
getAttribute 取数据
removeAttribute 移除
getSessionId() 获取会话id
invalidate() 让会话失效
复制代码
response.addCookie(new Cookie())
request.getSession 建立
复制代码
若是看了以为不错
点赞!转发!
达叔小生:日后余生,惟独有你 You and me, we are family ! 90后帅气小伙,良好的开发习惯;独立思考的能力;主动而且善于沟通 简书博客: 达叔小生 www.jianshu.com/u/c785ece60…