首頁 » 原創 » 正文

[原創]JavaWeb簡易購物系統

最近使用JAVAWEB搭建了一個簡易的購物系統,基本上是課堂學的,但也加了不少系統,因為oracle還在學,所以數據庫使用數組仿真。
首先是預覽圖1026
生成驗證碼
package abc;

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

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


@WebServlet("/verify")
public class verify extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private int imageType;
	private final int Height=30;
	private final int Width=120;
    public verify() {
        super();
    
    }

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

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		BufferedImage img = new BufferedImage(Width,Height,BufferedImage.TYPE_INT_RGB);
		Graphics2D g=(Graphics2D)img.getGraphics();
		g.fillRect(0, 0, Width, Height);
		g.setColor(Color.blue);
		g.drawRect(0, 0, Width, Height);
		String base="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		Random r=new Random();
		int m=20;
		g.setFont(new Font("宋體",Font.BOLD,18));
		String verify="";
		for(int i=1;i<=4;i++){
			int index=r.nextInt(base.length());
			int degree=r.nextInt(60)-30;
			double theta=degree*(Math.PI/180);
			g.rotate(theta,m,20);
			String temp=base.charAt(index)+"";
			g.drawString(temp, m, 20);
			g.rotate(-theta,m,20);
			m+=20;
			verify+=temp;
		}
		request.getSession().setAttribute("verify",verify);
		
		System.out.println(request.getSession().getAttribute("verify"));
		g.setColor(Color.gray);
		for(int i=0;i<8;i++){
			int x1,x2,y1,y2;
			x1=r.nextInt(Width);
			y1=r.nextInt(Height);
			x2=r.nextInt(Width);
			y2=r.nextInt(Height);
			g.drawLine(x1, y1, x2, y2);
		}
		ImageIO.write(img, "jpg", response.getOutputStream());
	}
}
註冊後台處理頁
package abc;

import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/reg")
public class reg extends HttpServlet {
	private static final long serialVersionUID = 1L;
        public reg() {
        super();
      
    }

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

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String verify=request.getParameter("verify").toUpperCase();
		String verify2=(String)request.getSession().getAttribute("verify");
		PrintWriter out=response.getWriter();
		int stateA=0,stateB=0;
		if(verify==null){stateA=1;}
		if(verify2==null){stateA=2;}
		if(verify.equals(verify2)){stateA=3;}else{stateA=4;}
		if(check(request, response)){stateB=5;}else{stateB=6;}
		switch(stateA){
		case 1:out.print("<h3>您輸入的驗證碼為空,請檢查後輸入</h3>");break;
		case 2:out.print("<h3>驗證碼生成失敗,無法校驗</h3>");break;
		case 3:out.print("<h3>驗證碼輸入正確</h3>");break;
		case 4:out.print("<h3>驗證碼輸入錯誤</h3>");break;}
		switch(stateB){
		case 5:out.print("<h3>密碼輸入一致</h3>");break;
		case 6:out.print("<h3>密碼輸入不一致</h3>");break;}
		if(stateA==3&&stateB==5){
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		String password2=request.getParameter("password2");
		String[] habbies=request.getParameterValues("habbies");
		String province=request.getParameter("province");
		out.println("用戶名:"+username+"
"); out.println("密碼:"+password+"
"); out.println("確認密碼:"+password2+"
"); out.print("愛好:"); if(habbies!=null){ for(int i=0;i");} out.println("籍貫:"+province+"
"); request.getSession().setAttribute("name",username); request.getSession().setAttribute("pw",password); out.println("<h3>信息已保存,您可以<a href='login.jsp'>登陸</a></h3>"); }else{ out.print("程序發生一個或多個錯誤,無法顯示和保存數據!請<a herf='reg.jsp'>返回</a>"); } } static boolean check(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if(request.getParameter("password").equals(request.getParameter("password2"))){return true;} return false; } }
註冊前台頁
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<Script language="javascript">
function changeImg(){
	document.getElementById("image").src="verify";
}

</Script>
</head>
<body>
<form method="post" action=reg>
<table border="1">
<tr><td>用戶名</td><td><input name="username"></input></td></tr>
<tr><td>密     碼</td><td><input type="password" name="password"></input></td></tr>
<tr><td>確認密碼</td><td><input type="password" name="password2"></input></td></tr>
<tr><td>愛    好</td><td><input type="checkbox" name="habbies" value="閱讀"></input>閱讀
<input type="checkbox" name="habbies" value="寫字"></input>寫字
<input type="checkbox" name="habbies" value="打球"></input>打球</td></tr>
<tr><td>籍貫</td><td><select name="province"><option>上海</option><option>北京</option><option>南京</option><option>廣州</option><option>武漢</option></select></td></tr>
<tr>
<td>驗證碼</td>
<td><img src="verify" id="image" onclick="changeImg()" ></td>
</tr>
<tr><td>填寫驗證碼</td><td><input name="verify" onblur="checkVerify()"></input></td></tr>
<tr><td colspan=2><button type="submit" name="submit">提交</button>
    <button type="reset" name="reset">重置</button></td></tr>
   </table>
</form>



登陸後台頁
package abc;

import java.io.IOException;
import java.io.PrintWriter;

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

@WebServlet("/login")
public class login extends HttpServlet {
	private static final long serialVersionUID = 1L;
  
    public login() {
        super();
      
    }

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

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String verify=request.getParameter("verify").toUpperCase();
		String verify2=(String)request.getSession().getAttribute("verify");
		PrintWriter out=response.getWriter();
		int stateA=0,stateB=0;
		if(verify==null){stateA=1;}
		if(verify2==null){stateA=2;}
		if(verify.equals(verify2)){stateA=3;}else{stateA=4;}
		if(check(request, response)){stateB=5;}else{stateB=6;}
		switch(stateA){
		case 1:out.print("<h3>您輸入的驗證碼為空,請檢查後輸入</h3>");break;
		case 2:out.print("<h3>驗證碼生成失敗,無法校驗</h3>");break;
		case 3:out.print("<h3>驗證碼輸入正確</h3>");break;
		case 4:out.print("<h3>驗證碼輸入錯誤</h3>");break;}
		switch(stateB){
		case 5:out.print("<h3>登陸成功!</h3>");break;
		case 6:out.print("<h3>用戶名或密碼錯誤!</h3>");break;}
		if(stateA==3&&stateB==5){
		String username=request.getParameter("username");
		out.println("<h2>用戶名:"+username+"<br/></h2>");
		out.println("<a href='shop.jsp'>開始購物</a>");
		}else{
		out.print("<h2>錯誤,無法顯示和保存數據!請<a href='login.jsp'>返回</a><h2>");
		}
		
	}
	static boolean check(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		if(request.getParameter("username").equals(request.getSession().getAttribute("name"))&&
				request.getParameter("password").equals(request.getSession().getAttribute("pw"))){return true;}
		return false;
	}
}

登陸前台頁
package abc;

import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/login")
public class login extends HttpServlet {
	private static final long serialVersionUID = 1L;
  
    public login() {
        super();
      
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		doPost(request, response);
		<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<Script language="javascript">
function changeImg(){
	document.getElementById("image").src="verify";
}

</Script>
</head>
<body>
<form method="post" action=login>
<table border="1">
<tr><th>登陸</th></tr>
<tr><td>用戶名</td><td><input name="username"></input></td></tr>
<tr><td>密     碼</td><td><input type="password" name="password"></input></td></tr>

<tr>
<td>驗證碼</td>
<td><img src="verify" id="image" onclick="changeImg()" ></td>
</tr>
<tr><td>填寫驗證碼</td><td><input name="verify" onblur="checkVerify()"></input></td></tr>
<tr><td colspan=2><button type="submit" name="submit">提交</button>
    <button type="reset" name="reset">重置</button></td></tr>
    
</table>

</form>

</body>
</html>
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String verify=request.getParameter("verify").toUpperCase();
		String verify2=(String)request.getSession().getAttribute("verify");
		PrintWriter out=response.getWriter();
		int stateA=0,stateB=0;
		if(verify==null){stateA=1;}
		if(verify2==null){stateA=2;}
		if(verify.equals(verify2)){stateA=3;}else{stateA=4;}
		if(check(request, response)){stateB=5;}else{stateB=6;}
		switch(stateA){
		case 1:out.print("<h3>您輸入的驗證碼為空,請檢查後輸入</h3>");break;
		case 2:out.print("<h3>驗證碼生成失敗,無法校驗</h3>");break;
		case 3:out.print("<h3>驗證碼輸入正確</h3>");break;
		case 4:out.print("<h3>驗證碼輸入錯誤</h3>");break;}
		switch(stateB){
		case 5:out.print("<h3>登陸成功!</h3>");break;
		case 6:out.print("<h3>用戶名或密碼錯誤!</h3>");break;}
		if(stateA==3&&stateB==5){
		String username=request.getParameter("username");
		out.println("<h2>用戶名:"+username+"<br/></h2>");
		out.println("<a href='shop.jsp'>開始購物</a>");
		}else{
		out.print("<h2>錯誤,無法顯示和保存數據!請<a href='login.jsp'>返回</a><h2>");
		}
		
	}
	static boolean check(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		if(request.getParameter("username").equals(request.getSession().getAttribute("name"))&&
				request.getParameter("password").equals(request.getSession().getAttribute("pw"))){return true;}
		return false;
	}
}

購物前台
<%@ page language="java" contentType="text/html;charset=utf-8" import="javax.servlet.http.*" 
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<% 

if(request.getSession().getAttribute("name")==null){
	response.getWriter().println("你好,您還沒有登錄,請<a href='reg.jsp'>註冊</a>或<a href='login.jsp'>登陸!</a>");
}else{
	response.getWriter().println("歡迎!您的用戶名是:"+request.getSession().getAttribute("name"));
}
%>
<h3>
商品1<a href="buy?id=0">加入購物車</a><br/>
商品2<a href="buy?id=1">加入購物車</a><br/>
商品3<a href="buy?id=2">加入購物車</a><br/>
商品4<a href="buy?id=3">加入購物車</a><br/>
商品5<a href="buy?id=4">加入購物車</a><br/>
<a href="cart.jsp">查看購物車清單</a><br/>
</h3>
</body>
</html>
購物後台
<%@ page language="java" contentType="text/html;charset=utf-8" import="javax.servlet.http.*" 
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<% 

if(request.getSession().getAttribute("name")==null){
	response.getWriter().println("你好,您還沒有登錄,請<a href='reg.jsp'>註冊</a>或<a href='login.jsp'>登陸!</a>");
}else{
	response.getWriter().println("歡迎!您的用戶名是:"+request.getSession().getAttribute("name"));
}
%>
<h3>
商品1<a href="buy?id=0">加入購物車</a><br/>
商品2<a href="buy?id=1">加入購物車</a><br/>
商品3<a href="buy?id=2">加入購物車</a><br/>
商品4<a href="buy?id=3">加入購物車</a><br/>
商品5<a href="buy?id=4">加入購物車</a><br/>
<a href="cart.jsp">查看購物車清單</a><br/>
</h3>
</body>
</html>package abc;

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

import javax.servlet.ServletException;
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;

/**
 * Servlet implementation class buy
 */
@WebServlet("/buy")
public class buy extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public buy() {
        super();
     
    }

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

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html;charset=utf-8");
	PrintWriter out = response.getWriter();
	String id=request.getParameter("id");
	String products[]={"商品1","商品2","商品3","商品4","商品5"};
	String product=products[Integer.parseInt(id)];
	HttpSession session =request.getSession();
	Map <String,Integer> map = (Map<String,Integer>)session.getAttribute("cart");
	if(map==null){map=new HashMap<String,Integer>();}
	if(map.containsKey(product)){
		int count=map.get(product);
		map.put(product, count+1);
	}else{
		map.put(product, 1);
	}
	session.setAttribute("cart", map);
	out.println("加入購物車成功!");
	out.println("<a href='shop.jsp'>繼續購物</a>");
	out.println("<a href='cart.jsp'>結算</a>");
	
	}

}

結算前台
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script language="JavaScript">
function inf(){
	alert("清空成功!")
}

</script>

</head>
<body>
<%Map<String ,Integer> map =(Map<String,Integer>)session.getAttribute("cart");

	if(map==null){out.println("未購買任何商品!");}
	else if(request.getSession().getAttribute("name")==null){
		response.getWriter().println("你好,您還沒有登錄,請<a href='reg.jsp'>註冊</a>或<a href='login.jsp'>登陸</a>");}
	else{
		Set<String>set=map.keySet();
		response.getWriter().println("歡迎!您的用戶名是:"+request.getSession().getAttribute("name"));
		out.println("<table border='1'>");
		out.println("<tr><th>商品名稱</th><th>數量</th><th>操作</th></tr>");
		int i=0;
		for(String name:set){
			int count=map.get(name);
			out.println("<tr>");
			out.println("<td>"+name+"</td>");
			out.println("<td>"+count+"</td>");
		
			out.println("<td><a href='remove.jsp?id='+i>刪除</a>  修改</td>");
			out.println("</tr>");
			System.out.print(i);
			i++;
	}out.println("</table>");
}

%>
<a href="clear.jsp" onclick="inf()">清空購物車</a>
</body>
</html>
清空購物車後台
<%@ page language="java" import="java.util.*" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%Map<String,Integer> map=(Map<String,Integer>)session.getAttribute("clear");
session.getAttribute("clear");
session.invalidate();
response.sendRedirect("shop.jsp");
%>
</body>
</html>
解決的問題

1.因為課上我們使用的是MyEclips而我使用的是EclipsEE,所以還是有一些區別,在部署時,需要導入Tomcat的jar包,否則會發生錯誤。
右擊項目,選擇Java Build Path->Libraries->Add External JARs,找到你計算機中tomcat的安裝路徑,在common\lib文件夾下選中"servlet-api.jar",添加點擊“確定”
2.EclipsEE我並沒有找到類似server.xml和web.xml的文件,而是靠代碼中的“@WebServlet("/abc")”實現目錄綁定,而如果將文件重命名,默認是不改變這個標識的,需要手動變更,否則tomcat將無法啟動,且不告知錯誤原因。
3.指定字符集的時候text/html不能寫顛倒,否則會出錯。
4.當出現NullPointerException異常時,除了初始值未賦值外,很有可能是沒有過濾null值。
比如缺少if(map==null){map=new HashMap();}語句,而直接使用map.containsKey(product)當map==null時會報錯。

缺憾/未完成

由於時間和水平的問題,並被沒有很好地完成購物車單項的刪除與修改。我嘗試將jsp參數傳遞給處理頁,總是不成功,期待今後解決。
out.println("<td><a href='remove.jsp?id='+i>刪除</a> 修改</td>");(其中i為變量)

本文共 4 個回復

  • 啊雷 2015/11/25 21:14

    要我給你MyEclips 和破解器嗎?

  • 某宅部 2015/12/04 17:31

    好厲害..有點高端-0-以至於我看不懂了,不過,我還喜歡桌面應用的開發,網頁什麼的,完全不懂 😥

發表評論