1. 程式人生 > >Session實現簡單購物車

Session實現簡單購物車

主要用於對Session物件的使用,大致過程由建立到銷燬,即購物車的加入商品和清除購物車等一系列動作。Image類實現動態驗證碼。

(原始碼可以直接使用,注意路徑問題)

Image類實現驗證碼功能

package com.ayit.session;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;

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

public class Image extends HttpServlet {

	/**
	 *使用response實現驗證碼
	 *	-生成圖片
	 *	-生成隨機的數字和字母
	 *	-把數字和字母畫到圖片上
	 *	-把圖片顯示到頁面上
	 */
	Random r = new Random();
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		
		//生成圖片
		BufferedImage image = new BufferedImage(200,50,BufferedImage.TYPE_3BYTE_BGR);
		
		
		//設定背景顏色
		Graphics2D g2d = (Graphics2D) image.getGraphics();
		g2d.setColor(Color.white);
		g2d.fillRect(0, 0, 200, 50);
		
		
		//建立一個StringBuffer儲存字串
		StringBuffer sb = new StringBuffer();
		
		//生成隨機數
		String word="23456789abcdefghjkmnopqrstuvwxyz";
		g2d.setColor(Color.red);
		int x =50,y=30;		
		for (int i = 0; i < 4; i++) {
			//設定字型的樣式
			Font font = randomFont();
			g2d.setFont(font);

			//返回字串裡面字元的下標
			int len = r.nextInt(word.length());
			//根據位置得到具體的字元
			char ch = word.charAt(len);
			sb.append(ch);
			//旋轉的效果rotate(弧度,x,y)
			//+-30度旋轉
			int jiaodu = r.nextInt(60)-30;
			double h = jiaodu*Math.PI/180;
			g2d.rotate(h, x, y);//旋轉
			
			g2d.setColor(randomColor());
			//把生成的字元畫到圖片上
			g2d.drawString(ch+"", x, y);

			//旋轉之後在轉回去
			g2d.rotate(-h,x,y);
			
			x+=25;
			
			
			
		}
		
		
		// 把驗證碼放到session裡面
		request.getSession().setAttribute("image1", sb.toString());
		
		//增加三條幹擾線
		int x1,x2,y1,y2;
		
		for(int i=1;i<4;i++)
		{
			x1 = r.nextInt(200);
			x2 = r.nextInt(200);
			y1 = r.nextInt(50);
			y2 = r.nextInt(50);
			
			g2d.setColor(randomColor());
			//劃線
			g2d.drawLine(x1,y1,x2,y2);
		}

		OutputImage(response, image);

	}



	private void OutputImage(HttpServletResponse response, BufferedImage image)
			throws IOException, FileNotFoundException {
		//把圖片顯示到頁面上
		ImageIO.write(image,"jpg",response.getOutputStream());
//		int mc = r.nextInt(800);
//		ImageIO.write(image,"jpg",new FileOutputStream("D:/"+mc+".jpg"));
	}
	
	
	
	private Font randomFont () {
		String[] fontNames  = {"宋體", "黑體", "楷體","方正舒體","華文彩雲","華文琥珀"};
		int index = r.nextInt(fontNames.length);
		String fontName = fontNames[index];
		int style = r.nextInt(4);
		int size = r.nextInt(5) + 24; 
		return new Font(fontName, style, size);
	}
		
	private Color randomColor () {
	
		int red = r.nextInt(150);
		int green = r.nextInt(150);
		int blue = r.nextInt(150);
		return new Color(red, green, blue);
	}

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

}

login.jsp實現看不清換一張功能

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Login.html</title>
	
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
    <h1>登入頁面</h1>
    <h2>${msg12}</h2>
    <form action="/day10/Login" method="post">
    	Username:<input type="text" name="username"/><br/>
    	Password:<input type="password" name="pwd"/><br/>
    	image:<input type="text" name="image"/><br/>
    	<img  id ="img1" alt="code" src="/day10/Image"/><br/>
    	<a href="javascript:void(0)" onclick="loadCode()">看不清,換一張</a>
    	
    	<input type="submit" value="登入"/>
    </form>
  </body>
  <script type="text/javascript">
 		function loadCode(){
 		//實現看不清換一張
 			var img1 = document.getElementById("img1");
 			//向src重新設定地址
 			img1.src = "/day10/Image?"+new Date().getTime();
 		} 
  </script>
</html>

Login類實現驗證碼判斷功能,學過資料庫以後,實現使用者名稱和密碼的驗證

package com.ayit.session;

import java.io.IOException;

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

public class Login extends HttpServlet {

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

		// 得到輸入的驗證碼
		request.setCharacterEncoding("utf-8");
		String imageText = request.getParameter("image");

		// 得到圖片的驗證碼
		String imageCode = (String) request.getSession().getAttribute("image1");

		if (!imageText.equals(imageCode)) {
			// 設定一個值request
			request.setAttribute("msg12", "驗證碼錯誤");

			// 轉發到登入頁面
			request.getRequestDispatcher("/session/login.jsp").forward(request,
					response);
			return;
		} else {
			request.getRequestDispatcher("/session/product.jsp").forward(
					request, response);
		}
	}

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

}

登入成功後來到product.jsp頁面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.ayit.utils.MyCookieUtils"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'product.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

</head>

<body>
	<img alt="1" src="/day10/img/1.jpg" />
	<a href="/day10/SessionDemo1?id=1" />手電
	</a>
	<img alt="2" src="/day10/img/2.jpg" />
	<a href="/day10/SessionDemo1?id=2" />手機
	</a>
	<img alt="3" src="/day10/img/3.jpg" />
	<a href="/day10/SessionDemo1?id=3" />電視
	</a>
	<img alt="4" src="/day10/img/4.jpg" />
	<a href="/day10/SessionDemo1?id=4" />冰箱
	</a>
</body>
</html>

SessionDemo1類實現加入購物車功能,該類主要體現了Session物件的用法

package com.ayit.session;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

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

public class SessionDemo1 extends HttpServlet {

	/**
	 * 根據id得到商品名稱
	 * 1、判斷是否是第一次購物
	 * 2、如果是,建立購物車,把商品名稱和數量放到購物車
	 * 3、如果不是
	 * 		-判斷購物車是否存在相同的商品
	 * 			--存在,原來的商品數量+1,放到購物車
	 * 			--不存在,把名稱和數量加到購物車
	 *
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//根據id得到商品名稱
		String id1 = request.getParameter("id");
		int id = Integer.parseInt(id1);
		String[] names = {"手電","手機","電視","冰箱"};
		String name = names[id-1];
		
		//判斷是否是第一次購物
		Map<String,Integer> map = (Map<String,Integer>)request.getSession().getAttribute("cart");
		if(map==null)
		{
			map = new HashMap<String, Integer>();
			map.put(name, 1);
		}
		else
		{
			//不是第一次,判斷購物車是否有相同名稱的商品
			if(map.containsKey(name))
			{
				int num = map.get(name);
				map.put(name, num+1);
			}else
			{
				//直接放名稱和數量
				map.put(name, 1);
			}
		}
		
		//把購物車放到session裡面
		request.getSession().setAttribute("cart", map);
		
		//輸出兩個超連結,繼續購物和去結算
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().write("<a href='/day10/session/product.jsp'>繼續購物</a><br/>");
		response.getWriter().write("<a href='/day10/session/cart.jsp'>去結算</a>");
	}

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

}

cart.jsp結算頁面的實現

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'cart.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

</head>

<body>
	<h1>結算頁面</h1>
	<a href="/day10/clear">清空購物車</a>
	<%
  	   Map<String,Integer> map =( Map<String,Integer>) request.getSession().getAttribute("cart");
       if(map==null)
       {
     %>
	<h2>沒有任何購物資訊</h2>
	<% 
       }else
       {
       //有購物資訊,顯示名稱和數量
       Set<String> keys = map.keySet();
       for(String key : keys)
       {
       int num = map.get(key);
   %>
	<h3>
		名稱:<%=key%>
		, 數量:<%=num %></h3>
	<%
   		}
   	}
    %>
</body>
</html>

clear類最後實現的是清空購物車,主要用於銷燬Session物件

package com.ayit.session;

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;

public class clear extends HttpServlet {

	/**
	 *清空購物車
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		HttpSession session = request.getSession();
		
		//銷燬session
		session.invalidate();
		
		response.sendRedirect("/day10/session/cart.jsp");
	}

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

}

相關推薦

Session實現簡單購物車

主要用於對Session物件的使用,大致過程由建立到銷燬,即購物車的加入商品和清除購物車等一系列動作。Image類實現動態驗證碼。 (原始碼可以直接使用,注意路徑問題) Image類實現驗證碼功能 package com.ayit.session; import

SpringMVC使用session實現簡單登錄

mvc com 實現 技術 csdn 以及 自己 -c tex 1.首先為了能直觀地在jsp頁面體現session的內容,我使用了jstl表達式,首先在pom.xml中引入jstl的依賴 <!-- jstl所需要的依賴 --> <dependency

vue實現簡單購物車

效果圖如下 比較醜哈哈。。 程式碼如下 <template> <div class="user"> <div><input type="checkbox" v-model="checkAll" @click="ch

用List實現簡單購物車

import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpSession; /** * 購物車 * 現實中是用籃子或車來裝商品的 * 好比記憶體中的List

利用Html+JavaScript實現簡單購物車

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Shopping Car</title> <scr

一起學react native實現簡單購物車

前言 實現比較簡單的購物車例項http://www.jianshu.com/p/c581c48a601f 這裡寫圖片描述 程式碼 程式碼結構 這裡寫圖片描述 紅色部分儲存了listitem的資料跟檢視 黃色部分是對於其的引用 主體實現部分 這裡

一起學react native(4) Mobx實現簡單購物車

前言 知道mobx這個東西 很久了 大概也就1個多月了吧 但是從來沒有下筆寫過程式碼 這兩天嘗試了一下 大概去熟悉了一下Mobx的相關命令 從而實現了 這個比較簡單的購物車例項 如果有寫的不對的地方 可以直接聯絡我的QQ:469373256 專案

python實現簡單購物車

#Encoding = UTF-8 ''' @author:xianyt @vertion:python3 @date:20180723 ''' ''' 21、 模擬實現選購商品 1) 列出所有商品的編號、名稱和價格 2) 選擇多個商品 3)

實現簡單購物車功能

說明:選擇需要購買的物品,計算總價。 <!DOCTYPE html> <html> <head></body> <link href="sohud

Python Django實現簡單購物車功能

Django版本:1.11 作業系統:Windows Python:3.5 歡迎加入學習交流QQ群:657341423 這裡以淘寶為例 這是一個商品的詳情,這裡有2個按鈕功能,一個是立即購買,一個加入購物車,兩者都是生成一個訂單,但兩者實現的方法是不相同的

使用session實現新增購物車功能

session:    伺服器端會話技術.    當我們第一次訪問的伺服器的時候,伺服器獲取id,        能獲取id            要拿著這個id去伺服器中查詢有無此session                若查詢到了:直接拿過來時候,將資料儲存,需要將當

SpringMVC使用session實現簡單登入

1.首先為了能直觀地在jsp頁面體現session的內容,我使用了jstl表示式,首先在pom.xml中引入jstl的依賴 <!-- jstl所需要的依賴 --> <dependency> <groupId>jstl<

Asp.net基於session實現購物車的方法

lai 程序 clas contain ext info border mode man 本文實例講述了asp.net基於session實現購物車的方法。分享給大家供大家參考,具體如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1

session應用之購物車實現

har head 一維數組 empty img con 維數 htm http 現在網頁中的購物車功能的實現都是依賴的數據庫,相比之下,以前是依賴服務器端的session來儲存。今天來講一下session實現購物車的邏輯。 用一張水果信息表為例子來演示。 1.首先我們寫出來

python實現簡單的循環購物車小功能

iphone6s opp lose pre 選擇 小功能 alt else ret python實現簡單的循環購物車小功能 # -*- coding: utf-8 -*- __author__ = ‘hujianli‘ shopping = [ ("iphon

C#實現簡單獲取及設置Session

static 相互 如何 相互轉換 per body share line window 本文實例講述了C#實現簡單獲取及設置Session類。分享給大家供大家參考。具體分析如下: 這是一個簡單的C#獲取Session、設置Session類文件,本類主要實現大家最常用的兩

vue實現簡單購物車功能

src put turn tps html ted lis app content <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" />

Java 2種方法實現簡單session超時登出

    1、使用攔截器           使用者每次和後臺互動,如果使用者長時間未操作,則需要檢測使用者的登入狀態,這樣的場景已經是再正常不過了。   傳統的做法可以在每個controller裡先判斷user的狀態,然後再執行業務操作,但這樣比較程式

session 案例實現簡單的購物

使用session完成簡單的購物功能。 大型的上午網站一般使用cookie來實現,目的是減少伺服器的壓力。 package cn.itcast.shoping; import java.io.IOException; import java.io.PrintWriter; import j

spring-boot+Redis實現簡單的分散式叢集session共享

  寫在前面:      首先宣告,筆者是一名Java程式設計屆的小學生。前面一直在幾家公司裡面做開發,其實都是一些傳統的專案,對於像分散式啦,叢集啦一些大型的專案接觸的很少,所以一直沒有自己整合和實現過。由於最近幾天專案不是很忙,自己又有點時間