servlet+javabean+service+dao完成注冊登錄


domain

package cn.code.domain;
/*
 * 實體類
 * */
public class User {
    private String username;
    private String password;
    private String verifyCode;
    
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password
                + ", verifyCode=" + verifyCode + "]";
    }

    public User(String username, String password, String verifyCode) {
        super();
        this.username = username;
        this.password = password;
        this.verifyCode = verifyCode;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getVerifyCode() {
        return verifyCode;
    }

    public void setVerifyCode(String verifyCode) {
        this.verifyCode = verifyCode;
    }

    public User() {
    }
    
}

dao

package cn.code.dao;


import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import cn.code.domain.User;

/**
 * 數據類
 * */
public class UserDao {
    private String path="G:/users.xml";
    public User findByUsername(String username){
        /**
         * 得到Document
         * xpath查詢
         * 校驗查詢結果是否為null,如果為null,返回null;
         * 如果不為null,需要把Element封裝到user對象中。
         * */
        SAXReader r = new SAXReader();
        try{
            Document document = r.read(path);
            Element element = (Element) document.selectSingleNode("//user[@username='"+username+"']");
            if(element==null){return null;}
            
            User user = new User();
            String attrUsername = element.attributeValue("username");
            String attrPassword = element.attributeValue("password");
            
            user.setUsername(attrUsername);
            user.setPassword(attrPassword);
            
            return user;
        }catch(Exception e){
            throw new RuntimeException(e);
        }
        
    }
    public void add(User user){
    /**
     * 得到document
     * 通過document得到root元素!
     * 將參數user轉換成user標簽
     * 添加屬性並賦值
     * 保存document
     * */
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(path);
            Element root = document.getRootElement();
            Element userEle = root.addElement("user");
            userEle.addAttribute("username", user.getUsername());
            userEle.addAttribute("password", user.getPassword());
            
            OutputFormat format = OutputFormat.createPrettyPrint();
//            OutputFormat format = new OutputFormat("\t",true);//縮進,是否換行
//            format.setTrimText(true);//清空所有換行跟縮進
            
            XMLWriter writer = null;
            try {
                writer = new XMLWriter(
                        new OutputStreamWriter(
                        new FileOutputStream(path),"utf-8"),format); //注意字符編碼,默認使用電腦默認編碼保存,這里我們使用utf-8;
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                writer.write(document);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                writer.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (DocumentException e) {
            throw new RuntimeException(e);
        }
    }
}

service

package cn.code.service;

import cn.code.dao.UserDao;
import cn.code.domain.User;

public class UserService {
    private UserDao userDao = new UserDao();
    public void regist(User user)throws UserException{
        /**
         * 使用用戶名去查詢,如果返回null,完成添加
         * 如果返回布市null,拋出異常!
         * */
        User u = userDao.findByUsername(user.getUsername());
        if(u!=null)throw new UserException("用戶名"+user.getUsername()+"已經被注冊!");
        userDao.add(user);
        
    }
    public User login(User user) throws UserException {
        User u = userDao.findByUsername(user.getUsername());
        if(u==null)throw new UserException("用戶名不存在!");
        if(!u.getPassword().equals(user.getPassword())){
            throw new UserException("密碼錯誤");
        }
        return u;
    }
}
package cn.code.service;

public class UserException extends Exception {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;



    public UserException() {
        super();
        // TODO Auto-generated constructor stub
    }



    public UserException(String message) {
        super(message);
        // TODO Auto-generated constructor stub
    }

    
    
}

servlet

package cn.code.web.servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.code.CommonUtils.CommonUtils;
import cn.code.domain.User;
import cn.code.service.UserException;
import cn.code.service.UserService;

public class RegistServlet extends HttpServlet {

        
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        /**
         * 封裝表單數據(封裝到user對象中)
         * */
        User user = CommonUtils.toBean(request.getParameterMap(), User.class);
        /**
         * 表單校驗
         * */
        String sessionVerifyCode = (String)request.getSession().getAttribute("session_vcode");
//        if(!sessionVerifyCode.equalsIgnoreCase(user.getVerifyCode())){
//            request.setAttribute("msg", "驗證碼不一致");
//            request.setAttribute("user", user);
//            request.getRequestDispatcher("/regist.jsp").forward(request, response);
//            return;
//        }
        String username = user.getUsername();
        String password = user.getPassword();
        Map<String,String>errors = new HashMap<String, String>();
        if(username==null||username.trim().isEmpty()){
            errors.put("username", "用戶名不能為空");
        }else if(username.length()<3||username.length()>15){
            errors.put("username", "請輸入3-15為用戶名");
        }
        if(password==null||password.trim().isEmpty()){
            errors.put("password", "用戶名不能為空");
        }else if(password.length()<3||password.length()>15){
            errors.put("password", "請輸入3-15為用戶名");
        }
        if(!sessionVerifyCode.equalsIgnoreCase(user.getVerifyCode())){
            errors.put("msg", "驗證碼不一致");
        }
        if(errors!=null&&errors.size()>0){
            request.setAttribute("errors", errors);
            request.setAttribute("user", user);
            request.getRequestDispatcher("/regist.jsp").forward(request, response);
            return;
        }
        
        UserService userService = new UserService();
        try {
            userService.regist(user);
            response.getWriter().print("注冊成功!<a href='"+request.getContextPath()+"/login.jsp"+"'>登錄</a>");
        } catch (UserException e) {
            request.setAttribute("msg", e.getMessage());
            request.setAttribute("user", user);
            request.getRequestDispatcher("/regist.jsp").forward(request, response);
        }
    }

}
package cn.code.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.code.CommonUtils.CommonUtils;
import cn.code.domain.User;
import cn.code.service.UserException;
import cn.code.service.UserService;

public class LoginServlet extends HttpServlet {
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");//請求編碼
        response.setContentType("text/html;charset=utf-8");//響應編碼
        //依賴UserService
        /**
         * 封裝表單數據到user
         * 調用sevice的login()方法,得到返回的user對象
         *     如果拋出異常:獲取異常信息,保存到request域中,再保存user,轉發到login.jsp
         *     如果沒有異常;保存返回值到session中,重定向到welcome.jsp
         * */
        User user =CommonUtils.toBean(request.getParameterMap(), User.class);
        UserService userService = new UserService();
        try{
            User u= userService.login(user);
            request.getSession().setAttribute("sessionUser", u);
            response.sendRedirect(request.getContextPath()+"/index.jsp");
        }catch(UserException e){
            request.setAttribute("msg", e.getMessage());
            request.setAttribute("user", user);
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }

}
package cn.code.web.servlet;

import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.code.image.VerifyCode;

public class VerifyCodeServlet extends HttpServlet {

    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //驗證碼類
            VerifyCode vc = new VerifyCode();
            //生成圖片
            BufferedImage image = vc.getImage();
            //保存圖片文本到session中
            request.getSession().setAttribute("session_vcode", vc.getText());
            //把圖片響應給客戶端
            VerifyCode.output(image, response.getOutputStream());
    }

}

驗證碼類

package cn.code.image;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;

public class VerifyCode {
    private int w=70;
    private int h=35;
    private Random r = new Random();
    private String[] fontNames = {"宋體","華文楷體","黑體","微軟雅黑","楷體_GB2321"};
    private String codes = "23456789abcdefghjkmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM";
    private Color bgColor = new Color(255,255,255);//顏色類對象,背景色白色
    private String text;
    //生成隨機顏色
    private Color randomColor(){
        int red = r.nextInt(150);
        int green = r.nextInt(150);
        int blue = r.nextInt(150);
        return new Color(red,green,blue);
    }
    //生成隨機字體
    private Font randomFont(){
        int index = r.nextInt(fontNames.length);
        String fontName = fontNames[index];//生成隨機的字體名稱
        int style = r.nextInt(4);//生成隨機樣式,0(無樣式),1(粗體),2(斜體),3(粗體+斜體)
        int size = r.nextInt(5)+24;//生成隨機字號,24-28
        return new Font(fontName,style,size);
    }
    //畫干擾線
    private void drawLine(BufferedImage image){
        int num = 3;//一共畫三條
        Graphics2D g2 = (Graphics2D)image.getGraphics();
        for(int i = 0;i<num;i++){//生成2個點的坐標,即4個值;
            int x1 = r.nextInt(w);
            int y1 = r.nextInt(h);
            int x2 = r.nextInt(w);
            int y2 = r.nextInt(h);
            g2.setStroke(new BasicStroke(1.5F));
            g2.setColor(Color.BLUE);//干擾線是藍色
            g2.drawLine(x1, y1, x2, y2);//畫線
        }
    }
    //隨機生成一個字符
    private char randomChar(){
        int index = r.nextInt(codes.length());
        return codes.charAt(index);
    }
    //創建bufferedImage
    private BufferedImage createImage(){
        BufferedImage image = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = (Graphics2D)image.getGraphics();
        g2.setColor(this.bgColor);
        g2.fillRect(0, 0, w, h);
        return image;
    }
    //外界調用這個方法得到驗證碼
    public BufferedImage getImage(){
        //創建圖片緩沖區
        BufferedImage image = createImage();
        //得到繪制環境
        Graphics2D g2 = (Graphics2D)image.getGraphics();
        //用來裝載生成的驗證碼文本
        StringBuilder sb = new StringBuilder();
        //向圖片中畫4個字符
        for(int i = 0;i<4;i++){
            String s = randomChar()+"";//隨機生成一個字符
            sb.append(s);//把字母添加到sb中
            float x = i * 1.0F * w / 4;//設置當前字符x軸坐標
            g2.setFont(randomFont());//設置隨即字體
            g2.setColor(randomColor());//設置隨機顏色
            g2.drawString(s,x,h-5);//畫圖
        }
        this.text=sb.toString();//把生成的字符串賦給this.text
        drawLine(image);//添加干擾線
        return image;
    }
    //返回驗證碼圖片上的文本
    public String getText(){
        return text;
    }
    //保存圖片到指定的輸出流
    public static void output(BufferedImage image,OutputStream out) throws IOException{
        ImageIO.write(image, "JPEG", out);
    }
}

jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'regist.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    <script type="text/javascript">
        function change(){
            var ele = document.getElementById("vCode");
            ele.src="<c:url value='/servlet/VerifyCodeServlet'/>?xxx="+new Date().getTime();
            //alert(ele.src);
        }
    
    </script>

  </head>
  
  <body>
    <h1>注冊</h1>
    <p style="color:red;font=weigth:900">${msg}</p>
    <!-- ${pageContext.request.contextPath}/RegistServlet } -->
    <form action="<c:url value='/RegistServlet'/>" method="post">
    用戶名:<input type="text" name="username" value='${user.username}'/>${errors.username}<br/>
    密     碼:<input type="password" name="password" value="${user.password}"/>${errors.password}<br/>
    驗證碼:<input type="text" name="verifyCode" value="${user.verifyCode }" size="3"/>
    <img id="vCode" src="<c:url value='/servlet/VerifyCodeServlet' /> "/>
    <a href="javascript:change()">換一張</a><br/>
    <input type="submit" value="注冊"/>
    </form>
  </body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'login.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <h1>登錄</h1>
    <p>${msg}</p>
    <form action=<c:url value='/LoginServlet'/> method="post">
    用戶名:<input type="text" name="username" value='${user.username}'/><br/>
    密     碼:<input type="password" name="password" value="${user.password}"/><br/>
    <input type="submit" value="登錄"/>
    </form>
  </body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  
  <body>
    <h1>歡迎登錄本網站:</h1>
<c:choose>
    <c:when test="${empty sessionScope.sessionUser }">請先登錄</c:when>
    <c:otherwise>
        ${sessionScope.sessionUser }
    </c:otherwise>
</c:choose>
  </body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM