首页 » 原創 » 正文

[原创]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-以至于我看不懂了,不过,我还喜欢桌面应用的开发,网页什么的,完全不懂 😥

发表评论