java web编程中 struts2+hibernate 实现B2C电子商务网站的登录 、注册中验证码的实现

下边只在注册中实现

1、首先是在Action中写出生成验证码所需的方法(下边是在MemberAction.java中写)

[java] view plaincopy

  1. package www.csdn.dbshop.action;
  2. import org.apache.struts2.ServletActionContext;
  3. import www.csdn.dbshop.domain.Admin;
  4. import www.csdn.dbshop.domain.Member;
  5. import www.csdn.dbshop.service.BaseService;
  6. import www.csdn.dbshop.service.MemberService;
  7. import www.csdn.dbshop.service.impl.BaseServiceImpl;
  8. import www.csdn.dbshop.service.impl.MemberServiceImpl;
  9. import www.csdn.dbshop.util.Pagination;
  10. import www.csdn.dbshop.util.StringUtil;
  11. import java.awt.Color;
  12. import java.awt.Font;
  13. import java.awt.Graphics;
  14. import java.awt.image.BufferedImage;
  15. import java.io.IOException;
  16. import java.util.Random;
  17. import javax.imageio.ImageIO;
  18. import javax.servlet.http.HttpServletRequest;
  19. import javax.servlet.http.HttpServletResponse;
  20. import javax.servlet.http.HttpSession;
  21. public class MemberAction extends BaseAction{
  22.     private BaseService baseService = new BaseServiceImpl();
  23.     private MemberService memberService = new MemberServiceImpl();
  24.     private String cuemail;
  25.     private boolean cueflag;
  26.     private Member member;
  27.     private String acodet;
  28.     private boolean cacodet;
  29.     private String sRand = “”;
  30.     private String acode;
  31.     public void setAcode(String acode) {
  32.         this.acode = acode;
  33.     }
  34.     public boolean isCacodet() {
  35.         return cacodet;
  36.     }
  37.     public void setAcodet(String acodet) {
  38.         this.acodet = acodet;
  39.     }
  40.     public void setMember(Member member) {
  41.         this.member = member;
  42.     }
  43.     public Member getMember() {
  44.         return member;
  45.     }
  46.     public boolean isCueflag() {
  47.         return cueflag;
  48.     }
  49.     public void setCacodet(boolean cacodet) {
  50.         this.cacodet = cacodet;
  51.     }
  52.     public void setCuemail(String cuemail) {
  53.         this.cuemail = cuemail;
  54.     }
  55.     public String checkuemail() {
  56.         cueflag = baseService.checkProperty(Member.class, “email”, cuemail,null);
  57.         return “cuemail”;
  58.     }
  59.     public void setCueflag(boolean cueflag) {
  60.         this.cueflag = cueflag;
  61.     }
  62.     public String register() {
  63.         if (((String) ServletActionContext.getRequest().getSession().getAttribute(“checkcode”)).equalsIgnoreCase(acode)) {
  64.             Member user = new Member();
  65.             user.setEmail(member.getEmail());
  66.             user.setPass(member.getPass());
  67.             boolean sflag = baseService.saveObject(user);
  68.             if (sflag) {
  69.                 return “register”;
  70.             } else {
  71.                 return “registererror”;
  72.             }
  73.         } else {
  74.             ServletActionContext.getRequest().setAttribute(“register”,”acerror”);
  75.             return “registererror”;
  76.         }
  77.     }
  78.     public String login() {
  79.         if (((String) ServletActionContext.getRequest().getSession().getAttribute(“checkcode”)).equalsIgnoreCase(acode)) {
  80.             Member user = memberService.login(member.getEmail(),member.getPass());
  81.             if (user == null) {
  82.                 ServletActionContext.getRequest().setAttribute(“login”, “error”);
  83.                 return “loginerror”;
  84.             } else {
  85.                 ServletActionContext.getRequest().getSession().setAttribute(“user”, user);
  86.                 return “login”;
  87.             }
  88.         } else {
  89.             ServletActionContext.getRequest().getSession().setAttribute(“login”, “acerror”);
  90.             return “loginerror”;
  91.         }
  92.     }
  93.     public String checkAcodet() {
  94.         if (((String) ServletActionContext.getRequest().getSession().getAttribute(“checkcode”)).equalsIgnoreCase(acodet)) {
  95.             cacodet = true;
  96.         } else {
  97.             cacodet = false;
  98.         }
  99.         return “checkacode”;
  100.     }
  101. /**
  102.      ******************** Action生成验证码* ******************
  103.      */
  104.     private Font imgFont = new Font(“Times New Roman”, Font.BOLD, 17);
  105.     Color getRandColor(int fc, int bc) {
  106.         Random random = new Random();
  107.         if (fc > 255) {
  108.             fc = 255;
  109.         }
  110.         if (bc > 255) {
  111.             bc = 255;
  112.         }
  113.         int r = fc + random.nextInt(bc – fc);
  114.         int g = fc + random.nextInt(bc – fc);
  115.         int b = fc + random.nextInt(bc – fc);
  116.         return new Color(r, g, b);
  117.     }
  118.     public void checkCodeImage() {
  119.         HttpServletRequest request = ServletActionContext.getRequest();
  120.         HttpServletResponse response = ServletActionContext.getResponse();
  121.         response.setHeader(“Pragma”, “No-cache”);
  122.         response.setHeader(“Cache-Control”, “no-cache”);
  123.         response.setDateHeader(“Expires”, 0);
  124.         response.setContentType(“image/jpeg”);
  125.         int width = 75, height = 20;
  126.         BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
  127.         Graphics g = image.getGraphics();
  128.         Random random = new Random();
  129.         g.setColor(getRandColor(200, 250));
  130.         g.fillRect(1, 1, width – 1, height – 1);
  131.         g.setColor(new Color(102, 102, 102));
  132.         g.drawRect(0, 0, width – 1, height – 1);
  133.         g.setFont(imgFont);
  134.         g.setColor(getRandColor(160, 200));
  135.         for (int i = 0; i < 155; i++) {
  136.             int x = random.nextInt(width – 1);
  137.             int y = random.nextInt(height – 1);
  138.             int xl = random.nextInt(6) + 1;
  139.             int yl = random.nextInt(12) + 1;
  140.             g.drawLine(x, y, x + xl, y + yl);
  141.         }
  142.         for (int i = 0; i < 70; i++) {
  143.             int x = random.nextInt(width – 1);
  144.             int y = random.nextInt(height – 1);
  145.             int xl = random.nextInt(12) + 1;
  146.             int yl = random.nextInt(6) + 1;
  147.             g.drawLine(x, y, x – xl, y – yl);
  148.         }
  149.         for (int i = 0; i < 4; i++) {
  150.             int itmp = 0;
  151.             if (random.nextInt(2) == 1) {
  152.                 itmp = random.nextInt(26) + 65;
  153.                 char ctmp = (char) itmp;
  154.                 sRand += String.valueOf(ctmp);
  155.                 g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
  156.                 g.drawString(String.valueOf(ctmp), 15 * i + 10, 16);
  157.             } else if (random.nextInt(3) == 1) {
  158.                 itmp = random.nextInt(26) + 97;
  159.                 char ctmp = (char) itmp;
  160.                 sRand += String.valueOf(ctmp);
  161.                 g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
  162.                 g.drawString(String.valueOf(ctmp), 15 * i + 10, 16);
  163.             } else {
  164.                 itmp = random.nextInt(9);
  165.                 sRand += String.valueOf(itmp);
  166.                 g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
  167.                 g.drawString(String.valueOf(itmp), 15 * i + 10, 16);
  168.             }
  169.         }
  170.         HttpSession session = request.getSession(true);
  171.         session.setAttribute(“checkcode”, sRand);
  172.         g.dispose();
  173.         try {
  174.             ImageIO.write(image, “JPEG”, response.getOutputStream());
  175.         } catch (IOException e) {
  176.             e.printStackTrace();
  177.         }
  178.     }
  179. }

2.在struts.xml中

[html] view plaincopy

  1. <result name=”checkacode” type=”json”>
  2.        <param name=”root”>cacodet</param>
  3. </result>
  4. <result name=”register”>/login.jsp</result>
  5. <result name=”registererror”>/personreg.jsp</result>
  6. <result name=”login”>/index.jsp</result>
  7. <result name=”loginerror”>/login.jsp</result>

3.在register.jsp中

[javascript] view plaincopy

  1. <script type=”text/javascript”>
  2.   function reImg(){
  3.     var img = document.getElementById(“picture”);
  4.     img.src=img.src + “?”;
  5.   }
  6. </script>
  7. <TR>
  8.     <TD class=mustcontent><SPAN>*</SPAN>验证码:</TD>
  9.     <td>
  10. lt;input type=”text” id=”acodet” name=”acode” style=”width:110px” value=”${randomCode}”>
  11.  <span id=”acode”>
  12.   <a href=”javascript:void(0);” onclick=”reImg();” class=”changeacode”>
  13.            <img id=”picture”
  14.                 src=”${pageContext.request.contextPath }/csdn/MemberAction_checkCodeImage.action?nowtime=”
  15.                 style=”position:relative;top:5px;border:0;”>
  16.          </a>
  17.         </span>
  18.         <span style=”font-size:12px;color:rgb(150,150,150);margin-left:5px”>看不清?
  19.           <a class=”changeacode”   href=”javascript:void(0);” onclick=”reImg();”>换一张
  20.           </a>
  21.         </span>
  22.     </td>
  23. </TR>

4.效果如下:

标签