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()miiylRBtp { 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 address); public abstract int deletePeople(String id); public abstract int updatePeople(String id,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 address) { String sql = "mistake"; if (id != "" && password != "" && name != "" && email != "" && address != "") { sql = "insert into people (id,password,name,email,address)" + "vhttp://www.cppcns.comalues('" + 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 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,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,Shttp://www.cppcns.comtring name,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 PeopleSmiiylRBtpervice() {
peopleDao = new PeopleDao();
}
@Override
public int insertPeople(String id,String address) {
return peopleDao.insertPeople(id,address);
}
@Override
public int deletePeople(String id) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int updatePeople(String id,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],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,IOException { doGet(request,response); } }
到此這篇關於Java實戰之利用JavaWeb開發購物系統(超詳細)的文章就介紹到這了,更多相關JavaWeb購物系統內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!