欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWeb實(shí)戰(zhàn)之開發(fā)網(wǎng)上購物系統(tǒng)(超詳細(xì))

 更新時(shí)間:2021年04月22日 09:46:37   作者:呦,又寫B(tài)UG呢  
這篇文章主要介紹了JavaWeb實(shí)戰(zhàn)之開發(fā)網(wǎng)上購物系統(tǒng)(超詳細(xì)),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下

一、項(xiàng)目描述

基于B/S三層架構(gòu)設(shè)計(jì)的購物系統(tǒng),可以更好地符合"高內(nèi)聚,低耦合"的設(shè)計(jì)思想。表現(xiàn)層(UI)通過JSP在瀏覽器上實(shí)現(xiàn)界面展示,通過Servlet接受用戶請(qǐng)求并生成驗(yàn)證碼等實(shí)時(shí)信息;數(shù)據(jù)訪問層(DAL)通過JDBC對(duì)DBMS進(jìn)行訪問;二者之間的業(yè)務(wù)邏輯層(BLL)通過Service進(jìn)行連接。同時(shí)面向接口編程提高規(guī)范化。這只是我自己用兩三天的時(shí)間做的小項(xiàng)目,距離真正的購物系統(tǒng)差距還是很大的,僅供初學(xué)者參考,很多邏輯缺陷不必太糾結(jié),以后有時(shí)間會(huì)再寫一篇博客對(duì)這個(gè)項(xiàng)目進(jìn)行相關(guān)測試。

如果只需要代碼可直接通過書簽欄跳轉(zhuǎn)至相關(guān)文件。

二、項(xiàng)目演示

這是購物系統(tǒng)首頁,是仿照華為商城設(shè)計(jì)的,當(dāng)然也可以說是仿照小米商城,這二者的頁面設(shè)計(jì)并無本質(zhì)區(qū)別,具體實(shí)現(xiàn)借助于Bootstrap,商品信息通過后臺(tái)數(shù)據(jù)庫讀取,商品表見下

在這里插入圖片描述
在這里插入圖片描述

點(diǎn)擊任意商品進(jìn)入詳情界面

在這里插入圖片描述

如果此時(shí)點(diǎn)擊加入購物車會(huì)調(diào)用Servlet中的doPost方法,進(jìn)而通過登陸信息是否讀取成功判斷登陸狀態(tài),如果未登錄則轉(zhuǎn)至登錄界面并提示相關(guān)信息,背景漸變色借助于webgradients選取,同時(shí)實(shí)現(xiàn)正則驗(yàn)證與驗(yàn)證碼相關(guān)功能

在這里插入圖片描述

我們先注冊(cè)再登錄,這里注冊(cè)洛的相關(guān)信息

在這里插入圖片描述

注冊(cè)成功

在這里插入圖片描述
在這里插入圖片描述

之后我們登錄并將心儀的商品加入購物車,查看購物車,這里會(huì)一致顯示當(dāng)前登錄用戶信息

在這里插入圖片描述

提交訂單后查看訂單,這里借助jQuery做了一個(gè)下拉框,可以查看后臺(tái)數(shù)據(jù)庫關(guān)于此訂單的全部信息,這里提交訂單相當(dāng)于付款,所以未設(shè)退貨功能,因此數(shù)據(jù)刪除只能借助于后臺(tái)數(shù)據(jù)庫。

在這里插入圖片描述

最后點(diǎn)擊注銷返回主頁

在這里插入圖片描述

三、部分代碼

JdbcUtils.java

用于加載驅(qū)動(dòng)并獲得與數(shù)據(jù)庫的連接的工具類

package common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JdbcUtil {
	static Connection connection;
	public static Connection getCon() {
		//加載驅(qū)動(dòng)
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String url = "jdbc:mysql://localhost:3306/shoppingsystem?characterEncoding=utf-8";
		String username = "root";
		String password = "123";
		
		//獲得連接
		try {
			connection = DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return connection;
	}
	public static void closeAll(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
		if (resultSet != null) {
			try {
				resultSet.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (preparedStatement != null) {
			try {
				preparedStatement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (connection != null) {
			try {
				connection.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
、

People.java

與數(shù)據(jù)庫中用戶表相匹配的用戶類

package entity;

public class People {
	private String id;
	private String password;
	private String name;
	private String email;
	private String address;
	
	public People() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public People(String id, String password, String name, String email, String address) {
		super();
		this.id = id;
		this.password = password;
		this.name = name;
		this.email = email;
		this.address = address;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "People [id=" + id + ", password=" + password + ", name=" + name + ", email=" + email + ", address="
				+ address + "]";
	}
	
}

InterfacePeopleDao.java

對(duì)用戶信息進(jìn)行相關(guān)操作的接口

package dao;

import java.util.List;

import entity.People;

public interface InterfacePeopleDao {
	public abstract int insertPeople(String id, String password, String name, String email, String address);
	
	public abstract int deletePeople(String id);
	
	public abstract int updatePeople(String id, String password, String name, String email, String address);
	
	public abstract People checkPeople(String id, String password);
	
	public abstract List<People> findAllPeople();
}

PeopleDao.java

對(duì)上述接口的實(shí)現(xiàn)

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import common.JdbcUtil;
import entity.People;

public class PeopleDao implements InterfacePeopleDao {
	private Connection connection;
	private PreparedStatement preparedStatement;
	private ResultSet resultSet;

	@Override
	public int insertPeople(String id, String password, String name, String email, String address) {
		String sql = "mistake";
		if (id != "" && password != "" && name != "" && email != "" && address != "") {
			sql = "insert into people (id, password, name, email, address)" + "values('" + id + "','" + 
					password + "','" + name + "','" + email + "','" + address + "');";
		}
		System.out.println("insertPeople()的sql語句:" + sql);
		
		int result = 0;
		connection = JdbcUtil.getCon();
		try {
			preparedStatement = connection.prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			result = preparedStatement.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		JdbcUtil.closeAll(connection, preparedStatement, resultSet);
		return result;
	}

	@Override
	public int deletePeople(String id) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int updatePeople(String id, String password, String name, String email, String address) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public People checkPeople(String id, String password) {
		String sql = null;
		if (id != null && password != null) {
			sql = "select * from people where id = '" + id + "' and password = '" + password + "'";
		}
		System.out.println("checkPeople()的sql語句:" + sql);
		
		People people = null;
		connection = JdbcUtil.getCon();
		try {
			preparedStatement = connection.prepareStatement(sql);
			resultSet = preparedStatement.executeQuery();
			if (resultSet.next()) {
				people = new People();
				people.setId(resultSet.getString(1));
				people.setPassword(resultSet.getString(2));
				people.setName(resultSet.getString(3));
				people.setEmail(resultSet.getString(4));
				people.setAddress(resultSet.getString(5));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtil.closeAll(connection, preparedStatement, resultSet);
		}
		return people;
	}

	@Override
	public List<People> findAllPeople() {
		// TODO Auto-generated method stub
		return null;
	}

}

InterfacPeopleService.java

在業(yè)務(wù)邏輯層中將表現(xiàn)層與數(shù)據(jù)訪問層進(jìn)行連接,由于項(xiàng)目本身并不復(fù)雜,所以只是簡單實(shí)現(xiàn)了方法傳遞

package service;

import java.util.List;

import entity.People;

public interface InterfacePeopleService {
	public abstract int insertPeople(String id, String password, String name, String email, String address);
	
	public abstract int deletePeople(String id);
	
	public abstract int updatePeople(String id, String password, String name, String email, String address);
	
	public abstract People checkPeople(String id, String password);
	
	public abstract List<People> findAllPeople();
}

PeopleService.java

對(duì)上述接口的實(shí)現(xiàn)

package service;

import java.util.List;

import dao.InterfacePeopleDao;
import dao.PeopleDao;
import entity.People;

public class PeopleService implements InterfacePeopleService {
	private InterfacePeopleDao peopleDao;
	
	public PeopleService() {
		peopleDao = new PeopleDao();
	}

	@Override
	public int insertPeople(String id, String password, String name, String email, String address) {
		return peopleDao.insertPeople(id, password, name, email, address);
	}

	@Override
	public int deletePeople(String id) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int updatePeople(String id, String password, String name, String email, String address) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public People checkPeople(String id, String password) {
		return peopleDao.checkPeople(id, password);
	}

	@Override
	public List<People> findAllPeople() {
		// TODO Auto-generated method stub
		return null;
	}

}

CheckCode.java

在內(nèi)存中生成驗(yàn)證碼圖片并輸出到客戶端

package servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/CheckCode")
public class CheckCode extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static int width=70;
    private static int height=25;
       
	public CheckCode() {
		super();
		// TODO Auto-generated constructor stub
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/**
		 * request是客戶端瀏覽器發(fā)出的請(qǐng)求被封裝形成的一個(gè)HttpServletRequest公共接口類對(duì)象
		 * session對(duì)象存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息, 這樣當(dāng)用戶在應(yīng)用程序的Web頁之間跳轉(zhuǎn)時(shí), 存儲(chǔ)在session對(duì)象中的變量將不會(huì)丟失, 而是在整個(gè)用戶會(huì)話中一直存在下去
		 * getSession()與getSession(true)一樣, 獲取request對(duì)象關(guān)聯(lián)的session對(duì)象, 如果沒有session, 則返回一個(gè)新的session
		 */
		HttpSession session=request.getSession();
		response.setContentType("image/jpeg");// 設(shè)置生成的文檔類型為jpg
		ServletOutputStream servletOutputStream = response.getOutputStream();
		
		/*設(shè)置瀏覽器不要緩存此圖片*/
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);
		
		/**
		 * 創(chuàng)建內(nèi)存圖片并獲得其圖形上下文
		 * Image是一個(gè)抽象類, BufferedImage是其實(shí)現(xiàn)類, 是一個(gè)帶緩沖區(qū)圖像類, 主要作用是將一幅圖片加載到內(nèi)存中
		 * BufferedImage生成的圖片在內(nèi)存里有一個(gè)圖像緩沖區(qū), 利用這個(gè)緩沖區(qū)我們可以很方便地操作這個(gè)圖片
		 */
		BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		Graphics graphics=image.getGraphics();
		
		char[] rands=generCode();// 產(chǎn)生隨機(jī)的驗(yàn)證碼
		drawRands(graphics, rands);// 產(chǎn)生圖像
		graphics.dispose();// 結(jié)束圖像的繪制過程,完成圖像
		
		/*將圖像輸出到客戶端*/
		ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
		ImageIO.write(image, "jpeg", byteArrayOutputStream);
		byte[] buf=byteArrayOutputStream.toByteArray();
		response.setContentLength(buf.length);
		servletOutputStream.write(buf);
		byteArrayOutputStream.close();
		servletOutputStream.close();
		
		session.setAttribute("checkcode", new String(rands));// 將當(dāng)前的驗(yàn)證碼寫入到session中	
		
	}
	
	private char[] generCode() {
    	//定義驗(yàn)證碼的字符表
    	String chars="0123456789";
    	char[] rands=new char[5];
    	for(int i=0;i<5;i++) {
    		int rand=(int)(Math.random()*10);
    		rands[i]=chars.charAt(rand);
    	}
    	return rands;
    }
	
	private void drawRands(Graphics g,char[] rands) {
		g.setColor(Color.WHITE);
		g.setFont(new Font(null, Font.ITALIC|Font.BOLD, 18));
		
		/*在不同高度上輸出驗(yàn)證碼的每個(gè)字符*/
		g.drawString("" + rands[0], 0, 18);
		g.drawString("" + rands[1], 14, 18);
		g.drawString("" + rands[2], 28, 18);
		g.drawString("" + rands[3], 42, 18);
		g.drawString("" + rands[4], 56, 18);
		System.out.print("當(dāng)前驗(yàn)證碼:");
		System.out.println(rands);
	}

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

}

到此這篇關(guān)于Java實(shí)戰(zhàn)之利用JavaWeb開發(fā)購物系統(tǒng)(超詳細(xì))的文章就介紹到這了,更多相關(guān)JavaWeb購物系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論