日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaWeb黑马旅游网-学习笔记02【注册功能】

發布時間:2024/9/30 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb黑马旅游网-学习笔记02【注册功能】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • Java后端 學習路線 筆記匯總表【黑馬程序員】
  • JavaWeb黑馬旅游網-學習筆記01【準備工作】
  • JavaWeb黑馬旅游網-學習筆記02【注冊功能】
  • JavaWeb黑馬旅游網-學習筆記03【登陸和退出功能】
  • JavaWeb黑馬旅游網-學習筆記04【BaseServlet抽取】
  • JavaWeb黑馬旅游網-學習筆記05【分類數據展示功能】
  • JavaWeb黑馬旅游網-學習筆記06【旅游線路分頁展示分頁展示】
  • JavaWeb黑馬旅游網-學習筆記07【旅游線路查詢】
  • JavaWeb黑馬旅游網-學習筆記08【旅游線路詳情】
  • JavaWeb黑馬旅游網-學習筆記09【旅游線路收藏】
  • JavaWeb黑馬旅游網-學習筆記10【項目代碼】
  • 目錄

    05-注冊功能_功能分析

    06-注冊功能_前臺_表單校驗1

    07-注冊功能_前臺_表單校驗2

    08-注冊功能_前臺_異步提交表單

    09-注冊功能_后臺_Servlet代碼實現

    處理編碼過濾器Filter?CharchaterFilter.java

    其他Java代碼

    10-注冊功能_后臺_Dao代碼實現

    11-注冊功能_后臺_service代碼實現&測試

    12-注冊功能_后臺_驗證碼&前臺數據處理

    前臺驗證碼

    驗證碼 CheckCodeServlet.java

    后臺驗證碼校驗

    RegistUserServlet.java

    13-注冊功能_后臺_郵件激活分析

    14-注冊功能_郵件激活_發送郵件

    MailUtils.java 發送郵件工具類

    15-注冊功能_郵件激活_點擊激活分析

    發送郵件

    用戶點擊郵件激活

    發送郵件代碼

    UUID

    16-注冊功能_郵件激活_代碼實現_Servlet

    ActiveUserServlet.java

    17-注冊功能_郵件激活_代碼實現_Service&Dao

    UserDao.java

    UserDaoImpl.java

    修改保存Dao代碼,加上存儲status和code 的代碼邏輯


    05-注冊功能_功能分析

    頁面效果:

    注冊功能分析

    06-注冊功能_前臺_表單校驗1

    表單校驗:
    ? ? 1.用戶名:單詞字符,長度8到20位
    ? ? 2.密碼:單詞字符,長度8到20位
    ? ? 3.email:郵件格式
    ? ? 4.姓名:非空
    ? ? 5.手機號:手機號格式
    ? ? 6.出生日期:非空
    ? ? 7.驗證碼:非空

    07-注冊功能_前臺_表單校驗2

    提升用戶體驗,并減輕服務器壓力。

    ??

    ??

    08-注冊功能_前臺_異步提交表單

    異步(ajax)提交表單

    在此使用“異步提交表單”是為了獲取服務器響應的數據。因為我們前臺使用的是html作為視圖層,不能夠直接從servlet相關的域對象獲取值,只能通過ajax獲取響應數據。

    09-注冊功能_后臺_Servlet代碼實現

    6.3.5?? ?編寫RegistUserServlet

    6.3.6?? ?編寫UserService以及UserServiceImpl

    6.3.7?? ?編寫UserDao以及UserDaoImpl

    處理編碼過濾器Filter?CharchaterFilter.java

    package cn.itcast.travel.web.filter;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;/*** 解決全站亂碼問題,處理所有的請求*/ @WebFilter("/*") public class CharchaterFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse rep, FilterChain filterChain) throws IOException, ServletException {//將父接口轉為子接口HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) rep;//獲取請求方法String method = request.getMethod();//解決post請求中文數據亂碼問題if (method.equalsIgnoreCase("post")) {request.setCharacterEncoding("utf-8");}//處理響應亂碼response.setContentType("text/html;charset=utf-8");filterChain.doFilter(request, response);}@Overridepublic void destroy() {} }

    其他Java代碼

    10-注冊功能_后臺_Dao代碼實現

    11-注冊功能_后臺_service代碼實現&測試

    12-注冊功能_后臺_驗證碼&前臺數據處理

    前臺驗證碼

    驗證碼 CheckCodeServlet.java

    package cn.itcast.travel.web.servlet;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random;/*** 驗證碼*/ @WebServlet("/checkCode") public class CheckCodeServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//服務器通知瀏覽器不要緩存response.setHeader("pragma", "no-cache");response.setHeader("cache-control", "no-cache");response.setHeader("expires", "0");//在內存中創建一個長80,寬30的圖片,默認黑色背景//參數一:長//參數二:寬//參數三:顏色int width = 80;int height = 30;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//獲取畫筆Graphics g = image.getGraphics();//設置畫筆顏色為灰色g.setColor(Color.GRAY);//填充圖片g.fillRect(0, 0, width, height);//產生4個隨機驗證碼,12EyString checkCode = getCheckCode();//將驗證碼放入HttpSession中request.getSession().setAttribute("CHECKCODE_SERVER", checkCode);//設置畫筆顏色為黃色g.setColor(Color.YELLOW);//設置字體的小大g.setFont(new Font("黑體", Font.BOLD, 24));//向圖片上寫入驗證碼g.drawString(checkCode, 15, 25);//將內存中的圖片輸出到瀏覽器//參數一:圖片對象//參數二:圖片的格式,如PNG,JPG,GIF//參數三:圖片輸出到哪里去ImageIO.write(image, "PNG", response.getOutputStream());}/*** 產生4位隨機字符串*/private String getCheckCode() {String base = "0123456789ABCDEFGabcdefg";int size = base.length();Random r = new Random();StringBuffer sb = new StringBuffer();for (int i = 1; i <= 4; i++) {//產生0到size-1的隨機值int index = r.nextInt(size);//在base字符串中獲取下標為index的字符char c = base.charAt(index);//將c放入到StringBuffer中去sb.append(c);}return sb.toString();}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);} }

    后臺驗證碼校驗

    RegistUserServlet.java

    package cn.itcast.travel.web.servlet;import cn.itcast.travel.domain.ResultInfo; import cn.itcast.travel.domain.User; import cn.itcast.travel.service.UserService; import cn.itcast.travel.service.impl.UserServiceImpl; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Map;@WebServlet("/registUserServlet") public class RegistUserServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//驗證校驗String check = request.getParameter("check");//從session中獲取驗證碼HttpSession session = request.getSession();String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");session.removeAttribute("CHECKCODE_SERVER");//為了保證驗證碼只能使用一次//比較if (checkcode_server == null || !checkcode_server.equalsIgnoreCase(check)) {//驗證碼錯誤ResultInfo info = new ResultInfo();//注冊失敗info.setFlag(false);info.setErrorMsg("驗證碼錯誤");//將info對象序列化為jsonObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(info);response.setContentType("application/json;charset=utf-8");response.getWriter().write(json);return;}//1.獲取數據Map<String, String[]> map = request.getParameterMap();//2.封裝對象User user = new User();try {BeanUtils.populate(user, map); // 將map對應的數據封裝進user對應的屬性中} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//3.調用service完成注冊UserService service = new UserServiceImpl();boolean flag = service.regist(user);ResultInfo info = new ResultInfo();//4.響應結果if (flag) {//注冊成功info.setFlag(true);} else {//注冊失敗info.setFlag(false);info.setErrorMsg("注冊失敗!");}//將info對象序列化為jsonObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(info);//將json數據寫回客戶端//設置content-typeresponse.setContentType("application/json;charset=utf-8");response.getWriter().write(json);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);} }

    13-注冊功能_后臺_郵件激活分析

    為什么要進行郵件激活?為了保證用戶填寫的郵箱是正確的。將來可以推廣一些宣傳信息到用戶郵箱中。

    • 發送郵件。
    • 用戶點擊郵件,進行激活。

    14-注冊功能_郵件激活_發送郵件

    MailUtils.java 發送郵件工具類

    什么是授權碼,它又是如何設置?_QQ郵箱幫助中心

    package cn.itcast.travel.util;import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties;/*** 發郵件工具類*/ public final class MailUtils {private static final String USER = ""; // 發件人稱號,同郵箱地址private static final String PASSWORD = ""; // 如果是qq郵箱可以使戶端授權碼,或者登錄密碼/*** @param to 收件人郵箱* @param text 郵件正文* @param title 標題*//* 發送驗證信息的郵件 */public static boolean sendMail(String to, String text, String title) {try {final Properties props = new Properties();props.put("mail.smtp.auth", "true");props.put("mail.smtp.host", "smtp.qq.com");// 發件人的賬號props.put("mail.user", USER);//發件人的密碼props.put("mail.password", PASSWORD);// 構建授權信息,用于進行SMTP進行身份驗證Authenticator authenticator = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// 用戶名、密碼String userName = props.getProperty("mail.user");String password = props.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};// 使用環境屬性和授權信息,創建郵件會話Session mailSession = Session.getInstance(props, authenticator);// 創建郵件消息MimeMessage message = new MimeMessage(mailSession);// 設置發件人String username = props.getProperty("mail.user");InternetAddress form = new InternetAddress(username);message.setFrom(form);// 設置收件人InternetAddress toAddress = new InternetAddress(to);message.setRecipient(Message.RecipientType.TO, toAddress);// 設置郵件標題message.setSubject(title);// 設置郵件的內容體message.setContent(text, "text/html;charset=UTF-8");// 發送郵件Transport.send(message);return true;} catch (Exception e) {e.printStackTrace();}return false;}public static void main(String[] args) throws Exception { // 做測試用MailUtils.sendMail("itcast_xian@163.com", "你好,這是一封測試郵件!無需回復。", "測試郵件!");System.out.println("發送成功!!!");} }

    15-注冊功能_郵件激活_點擊激活分析

    發送郵件

  • 申請郵箱
  • 開啟授權碼
  • 在MailUtils中設置自己的郵箱賬號和密碼(授權碼)
  • 郵件工具類:MailUtils,調用其中sendMail方法可以完成郵件發送。

    用戶點擊郵件激活

    經過分析,發現,用戶激活其實就是修改用戶表中的status為‘Y’。

    分析:

    發送郵件代碼

    UUID

    package cn.itcast.travel.util;import java.util.UUID;/*** 產生UUID隨機字符串工具類*/ public final class UuidUtil {private UuidUtil() {}public static String getUuid() {return UUID.randomUUID().toString().replace("-", "");}/*** 測試*/public static void main(String[] args) {System.out.println(UuidUtil.getUuid());System.out.println(UuidUtil.getUuid());System.out.println(UuidUtil.getUuid());System.out.println(UuidUtil.getUuid());} }

    16-注冊功能_郵件激活_代碼實現_Servlet

    ActiveUserServlet

    • UserService:active
    • UserDao:findByCode、updateStatus

    ActiveUserServlet.java

    package cn.itcast.travel.web.servlet;import cn.itcast.travel.service.UserService; import cn.itcast.travel.service.impl.UserServiceImpl;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;@WebServlet("/activeUserServlet") public class ActiveUserServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.獲取激活碼String code = request.getParameter("code");if (code != null) {//2.調用service完成激活UserService service = new UserServiceImpl();boolean flag = service.active(code);//3.判斷標記String msg = null;if (flag) {//激活成功msg = "激活成功,請<a href='login.html'>登錄</a>";} else {//激活失敗msg = "激活失敗,請聯系管理員!";}response.setContentType("text/html;charset=utf-8");response.getWriter().write(msg);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);} }

    17-注冊功能_郵件激活_代碼實現_Service&Dao

    UserDao.java

    UserDaoImpl.java

    修改保存Dao代碼,加上存儲status和code 的代碼邏輯

    內心純潔的人是那么容易被觸動,會為了別人的幸福而喜悅,會為了別人的痛苦而悲傷,會為了有人關心而溫暖,會為了美好的事物而觸動。

    有平凡人的喜樂,也有平凡人的悲苦,也有平凡人的追求,希望活在愛中,也不吝嗇付出自己的愛。

    在孤單無助時會去尋求幫助或者自己努力解決問題,而不是一味逃避,活成行尸走肉。

    總結

    以上是生活随笔為你收集整理的JavaWeb黑马旅游网-学习笔记02【注册功能】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。