zoukankan      html  css  js  c++  java
  • 想忘又忘不了--易买网项目总结

     项目名称:易买网

     指导老师:原玉明      

     负责功能点:登录,前台商品信息展示带分页,新闻动态,最近浏览,购物车,后台订单管理。

          说实话刚开始拿到这个项目我不知如何下手,只感觉到这个项目真的很庞大,有很多的知识没有学习过,这次做这个易买网项目涉及到团队合作,应该也是学习过程中做的

    最大的一次项目。所有下定决心好好完成这次的项目。这不仅代表了个人的能力,还代表着团队的合作能力。

          登录模块:

              

       登录模块:用户名,登录名,验证码的校验,如果用户名,密码,验证码输入的不合法,会给出相应的提示。

    有人会觉得登录模块验证码是一个难点,下面看一下关键代码,其实这个东西不难,百度上一搜一堆,主要是你搜到的东西如何能正确的运用到你的项目上是关键。

    01.首先是一个script标签的内容在login.jsp页面,其实前面一部分这是判断ajax的兼容性,不必太过关注,主要的是checkcode()这个方法。

    <script type="text/javascript">
     //取得XMLHttpRequest对象是AJAX的要点  
     //此getXMLRequest()方法是根据不同浏览器来取得XMLHttpRequest对象  
     function getXMLRequest(){  
         var request;  
         try{  
             //for火狐等浏览器  
             request = new XMLHttpRequest();  
         }catch(e){  
             try{  
                 //for IE  
                 request = new ActiveXObject("Microsoft.XMLHttp");    
             }catch(e){  
                 alert("您的浏览器不支持AJAX!!!");  
                 return null;  
             }  
         }  
         return request;  
     }  
       
     //此checkcode()方法是更换验证码图片的要点  
     function checkcode(){ 
         var request = getXMLRequest();//得到XMLHttpRequest对象  
         request.onreadystatechange = function(){  
             if(request.readyState == 4){  
                 document.getElementById("safeCode").src = "servlet/LoginServlet_hyj?opr=Login";//改变验证码图片  
             }; 
         }; 
                     //将请求发送出去  
         request.open("GET","servlet/LoginServlet_hyj?opr=Login",true);  
         request.send(null);  
    
         
     } 
     
       </script>

    02.然后那个验证码事实上是一个图片路径,默认这个图片路径去访问一个servlet获取这个路径,当用户点击看不清换一张的时候,会调用checkcode方法,checkcode方法发送一个ajax请求,去访问servlet,然后通过js的手段动态改变img的图片路径。

    <td class="field">验证码:</td>
                                <td>
                                    <img src="<%=path %>/servlet/LoginServlet_hyj?opr=Login" id="safeCode"/>
                                    <a id="changeCode"  onclick="checkcode()">看不清,换一张</a><br>
                                    <input type="text" name="code"><div class="mess">${message}</div>
                                    <span></span>
                                </td>

    03.上面一直说访问servlet获取验证,下面来揭秘一下这个servlet

    package servlet;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.List;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import dao.impl.ProoductCategoryDaoImpl_hyj;
    import dao.impl.UserDaoimpl;
    
    import entity.Cart;
    import entity.ProductCategory;
    import entity.User;
    
    public class LoginServlet_hyj extends HttpServlet {
      ProoductCategoryDaoImpl_hyj pcd=new ProoductCategoryDaoImpl_hyj();
    	/**
    		 HYJ Success
    	 */
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		doPost(request, response);
    	}
    
    	
    	  public void LoadData(HttpServletRequest request,HttpServletResponse response){
    		          try {
    		        	  // 1获取一级菜单的集合放到作用域中
    						List<ProductCategory> listOne = pcd.getAllOneLeveInfo(0);
    						// 2.获取二级菜单的集合放到作用域中
    						List<ProductCategory> listTwo = pcd.getAllTowLeveInfo(0);
    			          request.setAttribute("listOne", listOne);
    			           request.setAttribute("listTwoType", listTwo);
    		          } catch (Exception e) {
    					// TODO: handle exception
    					e.getMessage();
    				}
    					
    		
    	  }
    	/**
    		 HYJ Success
    	 */
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		          LoadData(request, response);
                     String opr=request.getParameter("opr");//获取opr的值
                     if(opr!=null){
                    	 if(opr.equals("Login")){//证明执行登录操作返回验证码
                    		 getCheckNum(request, response);
                    	
                    	 }else if(opr.equals("doLogin")){//登录验证
                    		 String message="";//定义变量保存错误信息
                    		 //获取用户信息
                    		 String userId=request.getParameter("userId");
                    		 String passworkd=request.getParameter("password");
                    		 request.setAttribute("userId", userId);
                    		 request.setAttribute("passworkd", passworkd);
                    		 
                    		 //获取用户输入的验证码
                    		 String checkNum=request.getParameter("code");
                    		 if(checkNum==null||checkNum.equals("")){//证明用户没有输入验证码,提示用户输入验证码
                    			 message="验证码不能为空";
                    			 request.setAttribute("message",message);
                    			//跳转到登录页面
                    			 request.getRequestDispatcher("/login.jsp").forward(request,response);
                    		 }else{
                    			 //获取每一次生成在session中的验证码
                        		 String sessionCheckNum=(String)request.getSession().getAttribute("numrand");
                        		 if(checkNum.equals(sessionCheckNum)){//验证相同
                        			 //实例化User对象
                            		 User user=new User();
                            		 user.setUserId(userId);
                            		 user.setPassword(passworkd);
                            		 //实例化用户接口实现类
                            		 UserDaoimpl ud=new UserDaoimpl();
                            		try {
                            			 if(ud.selectUserInfo(user)){//证明登录成功
                            				 //用户信息id保存到session中
                            				 request.getSession().setAttribute("userId",userId);
                            				
                            				 response.sendRedirect("IndexServlet");
                            				 //request.getRequestDispatcher("IndexServlet").forward(request, response);
                            				 
                            			 }else{
                            				 message="用户名或密码错误";
                                 			request.setAttribute("message",message);
                            				 //登录失败
                            				//跳转到登录页面
                                			 request.getRequestDispatcher("/login.jsp").forward(request,response);
                            			 }
            						} catch (Exception e) {
            							e.getMessage();
            						} 
                        			 
                        		 }else{//证明验证码不同,没有必要再判断用户名和密码
                        			message="验证码输入错误";
                        			request.setAttribute("message",message);
                        			 //跳转到登录页面
                        			 request.getRequestDispatcher("/login.jsp").forward(request,response);
                        			 
                        		 }
                        		
                    		 }
                    		
                    		 
                    		 
                    	 }else if(opr.equals("Out")){//证明是注销
                    		 //清除session
                    		 request.getSession().removeAttribute("userId");
                    		 //获取session中的数据Cart
                    		Cart cart= (Cart)request.getSession().getAttribute("cart");
                    		if(cart!=null){
                    			request.getSession().removeAttribute("cart");
                    		} //重定向到首页
                      		 String path=request.getContextPath();
                      		 response.sendRedirect(path+"/servlet/IndexServlet");
                    		
                    		 
                    	 }
                     }else{
                    	 request.getRequestDispatcher("/login.jsp").forward(request, response);
                    	 
                     }
    		
    	}
    	
    	/**
    	 * 获取的的登录时的验证码
    	 * @param request
    	 * @param response
    	 */
    	public void getCheckNum(HttpServletRequest request,HttpServletResponse response){
    		//设置页面不缓存  
    				response.setHeader("Pragma", "No-cache");
    				response.setHeader("Cache-Control", "no-cache");
    				response.setDateHeader("Expires", 0);
    				// 在内存中创建图象  
    				int width = 60, height = 20;
    				BufferedImage image = new BufferedImage(width, height,
    						BufferedImage.TYPE_INT_RGB);
    				// 获取图形上下文  
    				Graphics g = image.getGraphics();
    				//生成随机类  
    				Random random = new Random();
    				// 设定背景色  
    				g.setColor(getRandColor(200, 250));
    				g.fillRect(0, 0, width, height);
    				//设定字体  
    				g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
    				//画边框  
    				//g.setColor(new Color());  
    				//g.drawRect(0,0,width-1,height-1);  
    				
    				g.setColor(getRandColor(160, 200));
    				// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到  
    				for (int i = 0; i < 155; i++) {
    					int x = random.nextInt(width);
    					int y = random.nextInt(height);
    					int xl = random.nextInt(12);
    					int yl = random.nextInt(12);
    					g.drawLine(x, y, x + xl, y + yl);
    				}
    				// 取随机产生的认证码(4位数字)  
    				String sRand = "";
    				for (int i = 0; i < 4; i++) {
    					String rand = String.valueOf(random.nextInt(10));
    					sRand += rand;
    					// 将认证码显示到图象中  
    					g.setColor(new Color(20 + random.nextInt(110), 20 + random
    							.nextInt(110), 20 + random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成  
    					g.drawString(rand, 13 * i + 6, 16);
    				}
    				// 将认证码存入SESSION  
    				request.getSession().setAttribute("numrand", sRand);
    				// 图象生效  
    				g.dispose();  
    				// 输出图象到页面  
    			try {
    				ImageIO.write(image, "JPEG", response.getOutputStream());
    			} catch (Exception e) {
    				e.getMessage();
    			}
    				
    				
    			}
    			public Color getRandColor(int fc, int bc) {//给定范围获得随机颜色  
    				Random random = new Random();
    				if (fc > 255)
    					fc = 255;
    				if (bc > 255)
    					bc = 255;
    				int r = fc + random.nextInt(bc - fc);
    				int g = fc + random.nextInt(bc - fc);
    				int b = fc + random.nextInt(bc - fc);
    				return new Color(r, g, b);
    			}
    
    
    }
    

    2.前台商品信息展示带分页功能。这个功能就不做详细介绍(主要就是访问servlet,获取一个list集合,放到request作用域中,首页通过jstl表达是进行遍历)

    3.新闻动态

    01访问servlet获取集合,通过jstl表达是遍历出来数据。

     

     02.如果用户点击的是哪个新闻就获取该新闻的编号,让后访问servlet,在servlet中获取新闻编号,然后调用dao查询出该编号对应的信息详情,然后封装到集合中放到request作用域中,然后转发到新闻详情页,最后也是通过jstl表达是来遍历集合,在界面上显示新闻标题和内容。

    后续内容.....正在更新,请读者耐心等待,不会太常时间

     

              

  • 相关阅读:
    python全栈开发 * 继承性 层叠性 盒模型 标准文档流 * 180809
    python全栈开发 * css 选择器 浮动 * 180808
    python全栈开发 * 表格标签 表单标签 css 引入方式 * 180807
    python全栈开发 * 线程队列 线程池 协程 * 180731
    saltstack的jinjia模板
    saltstack cmd状态模块和条件判断
    saltstack 配置管理之状态间关系
    saltstack lamp自动化案例实战
    saltstack 配置管理之状态模块
    saltstack 远程执行之返回写入到mysql
  • 原文地址:https://www.cnblogs.com/hyjj/p/5714160.html
Copyright © 2011-2022 走看看