想忘又忘不了--易买网项目总结

 项目名称:易买网

 指导老师:原玉明      

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

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

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

      登录模块:

          

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

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

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表达是来遍历集合,在界面上显示新闻标题和内容。

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

 

          

原文地址:https://www.cnblogs.com/hyjj/p/5714160.html