JavaWeb購物系統
- 專案描述
- 專案演示
- 部分代碼
- 相關檔案
專案描述
基于B/S三層架構設計的購物系統,可以更好地符合"高內聚,低耦合"的設計思想,表現層(UI)通過JSP在瀏覽器上實作界面展示,通過Servlet接受用戶請求并生成驗證碼等實時資訊;資料訪問層(DAL)通過JDBC對DBMS進行訪問;二者之間的業務邏輯層(BLL)通過Service進行連接,同時面向介面編程提高規范化,這只是我自己用兩三天的時間做的小專案,距離真正的購物系統差距還是很大的,僅供初學者參考,很多邏輯缺陷不必太糾結,以后有時間會再寫一篇博客對這個專案進行相關測驗,
如果只需要代碼可直接通過書簽欄跳轉至相關檔案,
專案演示
這是購物系統首頁,是仿斬訓為商城設計的,當然也可以說是仿照小米商城,這二者的頁面設計并無本質區別,具體實作借助于Bootstrap,商品資訊通過后臺資料庫讀取,商品表見下


點擊任意商品進入詳情界面

如果此時點擊加入購物車會呼叫Servlet中的doPost方法,進而通過登陸資訊是否讀取成功判斷登陸狀態,如果未登錄則轉至登錄界面并提示相關資訊,背景漸變色借助于webgradients選取,同時實作正則驗證與驗證碼相關功能

我們先注冊再登錄,這里注冊洛的相關資訊

注冊成功


之后我們登錄并將心儀的商品加入購物車,查看購物車,這里會一致顯示當前登錄用戶資訊

提交訂單后查看訂單,這里借助jQuery做了一個下拉框,可以查看后臺資料庫關于此訂單的全部資訊,這里提交訂單相當于付款,所以未設退貨功能,因此資料洗掉只能借助于后臺資料庫,

最后點擊注銷回傳主頁

部分代碼
JdbcUtils.java
用于加載驅動并獲得與資料庫的連接的工具類
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() {
//加載驅動
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
與資料庫中用戶表相匹配的用戶類
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
對用戶資訊進行相關操作的介面
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
對上述介面的實作
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
在業務邏輯層中將表現層與資料訪問層進行連接,由于專案本身并不復雜,所以只是簡單實作了方法傳遞
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
對上述介面的實作
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
在記憶體中生成驗證碼圖片并輸出到客戶端
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是客戶端瀏覽器發出的請求被封裝形成的一個HttpServletRequest公共介面類物件
* session物件存盤特定用戶會話所需的屬性及配置資訊, 這樣當用戶在應用程式的Web頁之間跳轉時, 存盤在session物件中的變數將不會丟失, 而是在整個用戶會話中一直存在下去
* getSession()與getSession(true)一樣, 獲取request物件關聯的session物件, 如果沒有session, 則回傳一個新的session
*/
HttpSession session=request.getSession();
response.setContentType("image/jpeg");// 設定生成的檔案型別為jpg
ServletOutputStream servletOutputStream = response.getOutputStream();
/*設定瀏覽器不要快取此圖片*/
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
/**
* 創建記憶體圖片并獲得其圖形背景關系
* Image是一個抽象類, BufferedImage是其實作類, 是一個帶緩沖區影像類, 主要作用是將一幅圖片加載到記憶體中
* BufferedImage生成的圖片在記憶體里有一個影像緩沖區, 利用這個緩沖區我們可以很方便地操作這個圖片
*/
BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics graphics=image.getGraphics();
char[] rands=generCode();// 產生隨機的驗證碼
drawRands(graphics, rands);// 產生影像
graphics.dispose();// 結束影像的繪制程序,完成影像
/*將影像輸出到客戶端*/
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));// 將當前的驗證碼寫入到session中
}
private char[] generCode() {
//定義驗證碼的字符表
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));
/*在不同高度上輸出驗證碼的每個字符*/
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("當前驗證碼:");
System.out.println(rands);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
相關檔案
專案相關檔案已經開源在github上,點此查看
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/278835.html
標籤:其他
