servlet+javabean+service+dao完成注册登录
生活随笔
收集整理的這篇文章主要介紹了
servlet+javabean+service+dao完成注册登录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
domain
package cn.code.domain; /** 實體類* */ public class User {private String username;private String password;private String verifyCode;@Overridepublic 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-28return 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);}//創建bufferedImageprivate 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.textdrawLine(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>?
轉載于:https://www.cnblogs.com/wangyinxu/p/7402324.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的servlet+javabean+service+dao完成注册登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS线程
- 下一篇: UVA 1646 Edge Case