最近使用JAVAWEB搭建了一个简易的购物系统,基本上是课堂学的,但也加了不少系统,因为oracle还在学,所以数据库使用数组仿真。
生成验证码
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
缺憾/未完成
由于时间和水平的问题,并被没有很好地完成购物车单项的删除与修改。我尝试将jsp参数传递给处理页,总是不成功,期待今后解决。
out.println("<td><a href='remove.jsp?id='+i>删除</a> 修改</td>");(其中i为变量)
Comments 4 条评论
要我给你MyEclips 和破解器吗?
@啊雷 谢谢!
好厉害..有点高端-0-以至于我看不懂了,不过,我还喜欢桌面应用的开发,网页什么的,完全不懂 :cry:
@某宅部 桌面我也用java写 安利一下https://www.dmjsz.com/archives/1102