




已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
黑馬旅游網(wǎng)綜合案例1 前言為了鞏固web基礎(chǔ)知識,提升綜合運用能力,故而講解此案例。要求,每位同學能夠獨立完成此案例。2 項目導(dǎo)入點擊綠色按鈕選擇travel項目的pom.xml文件,點擊ok,完成項目導(dǎo)入。需要等待一小會,項目初始化完成。3 啟動項目3.1 方式一:3.2 方式二:配置maven快捷啟動4 技術(shù)選型4.1 Web層a) Servlet:前端控制器b) html:視圖c) Filter:過濾器d) BeanUtils:數(shù)據(jù)封裝e) Jackson:json序列化工具4.2 Service層f) Javamail:java發(fā)送郵件工具g) Redis:nosql內(nèi)存數(shù)據(jù)庫h) Jedis:java的redis客戶端4.3 Dao層i) Mysql:數(shù)據(jù)庫j) Druid:數(shù)據(jù)庫連接池k) JdbcTemplate:jdbc的工具5 創(chuàng)建數(shù)據(jù)庫- 創(chuàng)建數(shù)據(jù)庫CREATE DATABASE travel;- 使用數(shù)據(jù)庫USE travel;-創(chuàng)建表復(fù)制提供好的sql6 注冊功能6.1 頁面效果6.2 功能分析6.3 代碼實現(xiàn)6.3.1 前臺代碼實現(xiàn)6.3.2 表單校驗提升用戶體驗,并減輕服務(wù)器壓力。/校驗用戶名/單詞字符,長度8到20位function checkUsername() /1.獲取用戶名值 var username = $(#username).val(); /2.定義正則 var reg_username = /w8,20$/; /3.判斷,給出提示信息 var flag = reg_username.test(username); if(flag) /用戶名合法 $(#username).css(border,); else /用戶名非法,加一個紅色邊框 $(#username).css(border,1px solid red); return flag; /校驗密碼 function checkPassword() /1.獲取密碼值 var password = $(#password).val(); /2.定義正則 var reg_password = /w8,20$/; /3.判斷,給出提示信息 var flag = reg_password.test(password); if(flag) /密碼合法 $(#password).css(border,); else /密碼非法,加一個紅色邊框 $(#password).css(border,1px solid red); return flag; /校驗郵箱function checkEmail() /1.獲取郵箱 var email = $(#email).val(); /2.定義正則 var reg_email = /w+w+.w+$/; /3.判斷 var flag = reg_email.test(email); if(flag) $(#email).css(border,); else $(#email).css(border,1px solid red); return flag;$(function () /當表單提交時,調(diào)用所有的校驗方法 $(#registerForm).submit(function() return checkUsername() & checkPassword() & checkEmail(); /如果這個方法沒有返回值,或者返回為true,則表單提交,如果返回為false,則表單不提交 ); /當某一個組件失去焦點是,調(diào)用對應(yīng)的校驗方法 $(#username).blur(checkUsername); $(#password).blur(checkPassword); $(#email).blur(checkEmail); );6.3.3 異步(ajax)提交表單在此使用異步提交表單是為了獲取服務(wù)器響應(yīng)的數(shù)據(jù)。因為我們前臺使用的是html作為視圖層,不能夠直接從servlet相關(guān)的域?qū)ο螳@取值,只能通過ajax獲取響應(yīng)數(shù)據(jù)6.3.4 后臺代碼實現(xiàn)6.3.5 編寫RegistUserServletWebServlet(/registUserServlet)public class RegistUserServlet extends HttpServlet protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /驗證校驗 String check = request.getParameter(check); /從sesion中獲取驗證碼 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對象序列化為json ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(info); response.setContentType(application/json;charset=utf-8); response.getWriter().write(json); return; /1.獲取數(shù)據(jù) Map map = request.getParameterMap(); /2.封裝對象 User user = new User(); try BeanUtils.populate(user,map); catch (IllegalAccessException e) e.printStackTrace(); catch (InvocationTargetException e) e.printStackTrace(); /3.調(diào)用service完成注冊 UserService service = new UserServiceImpl(); boolean flag = service.regist(user); ResultInfo info = new ResultInfo(); /4.響應(yīng)結(jié)果 if(flag) /注冊成功 info.setFlag(true); else /注冊失敗 info.setFlag(false); info.setErrorMsg(注冊失敗!); /將info對象序列化為json ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(info); /將json數(shù)據(jù)寫回客戶端 /設(shè)置content-type response.setContentType(application/json;charset=utf-8); response.getWriter().write(json); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException this.doPost(request, response); 6.3.6 編寫UserService以及UserServiceImplpublic class UserServiceImpl implements UserService private UserDao userDao = new UserDaoImpl(); /* * 注冊用戶 * param user * return */ Override public boolean regist(User user) /1.根據(jù)用戶名查詢用戶對象 User u = userDao.findByUsername(user.getUsername(); /判斷u是否為null if(u != null) /用戶名存在,注冊失敗 return false; /2.保存用戶信息 userDao.save(user); return true; 6.3.7 編寫UserDao以及UserDaoImplpublic class UserDaoImpl implements UserDao private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource(); Override public User findByUsername(String username) User user = null; try /1.定義sql String sql = select * from tab_user where username = ?; /2.執(zhí)行sql user = template.queryForObject(sql, new BeanPropertyRowMapper(User.class), username); catch (Exception e) return user; Override public void save(User user) /1.定義sql String sql = insert into tab_user(username,password,name,birthday,sex,telephone,email) values(?,?,?,?,?,?,?); /2.執(zhí)行sql template.update(sql,user.getUsername(), user.getPassword(), user.getName(), user.getBirthday(), user.getSex(), user.getTelephone(), user.getEmail(); 6.3.8 郵件激活為什么要進行郵件激活?為了保證用戶填寫的郵箱是正確的。將來可以推廣一些宣傳信息,到用戶郵箱中。6.3.9 發(fā)送郵件1. 申請郵箱2. 開啟授權(quán)碼3. 在MailUtils中設(shè)置自己的郵箱賬號和密碼(授權(quán)碼)郵件工具類:MailUtils,調(diào)用其中sendMail方法可以完成郵件發(fā)送6.3.10 用戶點擊郵件激活經(jīng)過分析,發(fā)現(xiàn),用戶激活其實就是修改用戶表中的status為Y分析:發(fā)送郵件代碼:修改保存Dao代碼,加上存儲status和code 的代碼邏輯激活代碼實現(xiàn):ActiveUserServlet/1.獲取激活碼String code = request.getParameter(code);if(code != null) /2.調(diào)用service完成激活 UserService service = new UserServiceImpl(); boolean flag = service.active(code); /3.判斷標記 String msg = null; if(flag) /激活成功 msg = 激活成功,請登錄; else /激活失敗 msg = 激活失敗,請聯(lián)系管理員!; response.setContentType(text/html;charset=utf-8); response.getWriter().write(msg);UserService:activeOverridepublic boolean active(String code) /1.根據(jù)激活碼查詢用戶對象 User user = userDao.findByCode(code); if(user != null) /2.調(diào)用dao的修改激活狀態(tài)的方法 userDao.updateStatus(user); return true; else return false; UserDao:findByCodeupdateStatus/* * 根據(jù)激活碼查詢用戶對象 * param code * return */Overridepublic User findByCode(String code) User user = null; try String sql = select * from tab_user where code = ?; user = template.queryForObject(sql,new BeanPropertyRowMapper(User.class),code); catch (DataAccessException e) e.printStackTrace(); return user;/* * 修改指定用戶激活狀態(tài) * param user */Overridepublic void updateStatus(User user) String sql = update tab_user set status = Y where uid=?; template.update(sql,user.getUid();7 登錄7.1 分析7.2 代碼實現(xiàn)7.2.1 前臺代碼7.2.2 后臺代碼LoginServlet/1.獲取用戶名和密碼數(shù)據(jù)Map map = request.getParameterMap();/2.封裝User對象User user = new User();try BeanUtils.populate(user,map); catch (IllegalAccessException e) e.printStackTrace(); catch (InvocationTargetException e) e.printStackTrace();/3.調(diào)用Service查詢UserService service = new UserServiceImpl();User u = service.login(user);ResultInfo info = new ResultInfo();/4.判斷用戶對象是否為nullif(u = null) /用戶名密碼或錯誤 info.setFlag(false); info.setErrorMsg(用戶名密碼或錯誤);/5.判斷用戶是否激活if(u != null & !Y.equals(u.getStatus() /用戶尚未激活 info.setFlag(false); info.setErrorMsg(您尚未激活,請激活);/6.判斷登錄成功if(u != null & Y.equals(u.getStatus() /登錄成功 info.setFlag(true);/響應(yīng)數(shù)據(jù)ObjectMapper mapper = new ObjectMapper();response.setContentType(application/json;charset=utf-8);mapper.writeValue(response.getOutputStream(),info);UserServicepublic User login(User user) return userDao.findByUsernameAndPassword(user.getUsername(),user.getPassword();UserDaopublic User findByUsernameAndPassword(String username, String password) User user = null; try /1.定義sql String sql = select * from tab_user where username = ? and password = ?; /2.執(zhí)行sql user = template.queryForObject(sql, new BeanPropertyRowMapper(User.class), username,password); catch (Exception e) return user;7.2.3 index頁面中用戶姓名的提示信息功能效果:header.html代碼Servlet代碼/從session中獲取登錄用戶Object user = request.getSession().getAttribute(user);/將user寫回客戶端ObjectMapper mapper = new ObjectMapper();response.setContentType(application/json;charset=utf-8);mapper.writeValue(response.getOutputStream(),user);8 退出什么叫做登錄了?session中有user對象。實現(xiàn)步驟:1. 訪問servlet,將session銷毀2. 跳轉(zhuǎn)到登錄頁面代碼實現(xiàn):Header.htmlServlet:/1.銷毀sessionrequest.getSession().invalidate();/2.跳轉(zhuǎn)登錄頁面response.sendRedirect(request.getContextPath()+/login.html);9 優(yōu)化Servlet9.1 目的減少Servlet的數(shù)量,現(xiàn)在是一個功能一個Servlet,將其優(yōu)化為一個模塊一個Servlet,相當于在數(shù)據(jù)庫中一張表對應(yīng)一個Servlet,在Servlet中提供不同的方法,完成用戶的請求。Idea控制臺中文亂碼解決:-Dfile.encoding=gb23129.2 BaseServlet編寫:public class BaseServlet extends HttpServlet Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException /System.out.println(baseServlet的service方法被執(zhí)行了.); /完成方法分發(fā) /1.獲取請求路徑 String uri = req.getRequestURI(); / /travel/user/add System.out.println(請求uri:+uri);/ /travel/user/add /2.獲取方法名稱 String methodName = uri.substring(uri.lastIndexOf(/) + 1); System.out.println(方法名稱:+methodName); /3.獲取方法對象Method /誰調(diào)用我?我代表誰 System.out.println(this);/UserServlet的對象.web.servlet.UserServlet4903d97e try /獲取方法 Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); /4.執(zhí)行方法 /暴力反射 /method.setAccessible(true); method.invoke(this,req,resp); catch (NoSuchMethodException e) e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace(); catch (InvocationTargetException e) e.printStackTrace(); 9.3 UserServlet改寫將之前的Servlet實現(xiàn)的功能,抽取到UserServlet中的不同方法中實現(xiàn),并且將UserService創(chuàng)建抽取到成員變量位置WebServlet(/user/*) / /user/add /user/findpublic class UserServlet extends BaseServlet /聲明UserService業(yè)務(wù)對象 private UserService service = new UserServiceImpl(); /* * 注冊功能 * param request * param response * throws ServletException * throws IOException */ public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /驗證校驗 String check = request.getParameter(check); /從sesion中獲取驗證碼 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對象序列化為json ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(info); response.setContentType(application/json;charset=utf-8); response.getWriter().write(json); return; /1.獲取數(shù)據(jù) Map map = request.getParameterMap(); /2.封裝對象 User user = new User(); try BeanUtils.populate(user,map); catch (IllegalAccessException e) e.printStackTrace(); catch (InvocationTargetException e) e.printStackTrace(); /3.調(diào)用service完成注冊 /UserService service = new UserServiceImpl(); boolean flag = service.regist(user); ResultInfo info = new ResultInfo(); /4.響應(yīng)結(jié)果 if(flag) /注冊成功 info.setFlag(true); else /注冊失敗 info.setFlag(false); info.setErrorMsg(注冊失敗!); /將info對象序列化為json ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(info); /將json數(shù)據(jù)寫回客戶端 /設(shè)置content-type response.setContentType(application/json;charset=utf-8); response.getWriter().write(json); /* * 登錄功能 * param request * param response * throws ServletException * throws IOException */ public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /1.獲取用戶名和密碼數(shù)據(jù) Map map = request.getParameterMap(); /2.封裝User對象 User user = new User(); try BeanUtils.populate(user,map); catch (IllegalAccessException e) e.printStackTrace(); catch (InvocationTargetException e) e.printStackTrace(); /3.調(diào)用Service查詢 / UserService service = new UserServiceImpl(); User u = service.login(user); ResultInfo info = new ResultInfo(); /4.判斷用戶對象是否為null if(u = null) /用戶名密碼或錯誤 info.setFlag(false); info.setErrorMsg(用戶名密碼或錯誤); /5.判斷用戶是否激活 if(u != null & !Y.equals(u.getStatus() /用戶尚未激活 info.setFlag(false); info.setErrorMsg(您尚未激活,請激活); /6.判斷登錄成功 if(u != null & Y.equals(u.getStatus() request.getSession().setAttribute(user,u);/登錄成功標記 /登錄成功 info.setFlag(true); /響應(yīng)數(shù)據(jù) ObjectMapper mapper = new ObjectMapper(); response.setContentType(application/json;charset=utf-8); mapper.writeValue(response.getOutputStream(),info); /* * 查詢單個對象 * param request * param response * throws ServletException * throws IOException */ public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /從session中獲取登錄用戶 Object user = request.getSession().getAttribute(user); /將user寫回客戶端 ObjectMapper mapper = new ObjectMapper(); response.setContentType(application/json;charset=utf-8); mapper.writeValue(response.getOutputStream(),user); /* * 退出功能 * param request * param response * throws ServletException * throws IOException */ public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /1.銷毀session request.getSession().invalidate(); /2.跳轉(zhuǎn)登錄頁面 response.sendRedirect(request.getContextPath()+/login.html); /* * 激活功能 * param request * param response * throws ServletException * throws IOException */ public void active(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /1.獲取激活碼 String code = request.getParameter(code); if(code != null) /2.調(diào)用service完成激活 /UserService service = new UserServiceImpl(); boolean flag = service.active(code); /3.判斷標記 String msg = null; if(flag) /激活成功 msg = 激活成功,請登錄; else /激活失敗 msg = 激活失敗,請聯(lián)系管理員!; response.setContentType(text/html;charset=utf-8); response.getWriter().write(msg); 9.4 頁面路徑改寫register.htmllogin.htmlheader.htmlUserServiceImpl發(fā)送郵件10 分類數(shù)據(jù)展示10.1 效果:10.2 分析:10.3 代碼實現(xiàn):10.3.1 后臺代碼CategoryServletWebServlet(/category/*)public class CategoryServlet extends BaseServlet private CategoryService service = new CategoryServiceImpl(); /* * 查詢所有 * param request * param response * throws ServletException * throws IOExcept
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技園配套基礎(chǔ)設(shè)施建設(shè)項目規(guī)劃設(shè)計方案(僅供參考)
- 鄉(xiāng)村醫(yī)療衛(wèi)生人才隊伍建設(shè)面臨的主要問題與障礙
- 繁星春水:詩歌意境與情感表達教學教案
- 農(nóng)村農(nóng)戶綠色生態(tài)種植協(xié)議規(guī)范
- 元宇宙概論 課件 -第十講 元宇宙應(yīng)用-數(shù)字人
- 生態(tài)產(chǎn)品產(chǎn)業(yè)鏈協(xié)同與資源整合路徑
- 企業(yè)新聞發(fā)布記錄表
- 顧客群體:消費者年齡分布表
- 中醫(yī)藥適宜技術(shù)推廣的健康管理與服務(wù)模式
- 2025年音樂表演藝術(shù)專業(yè)綜合能力考試試卷及答案
- 醫(yī)院檢驗科實驗室生物安全程序文件SOP
- 最小作戰(zhàn)單元-以盾棍叉戰(zhàn)法為例
- 小學老師述職報告ppt
- LY/T 1704-2007白蛾周氏嚙小蜂人工繁育及應(yīng)用技術(shù)規(guī)程
- JJF 1078-2002光學測角比較儀校準規(guī)范
- GB/T 22843-2009枕、墊類產(chǎn)品
- GB 1903.21-2016食品安全國家標準食品營養(yǎng)強化劑富硒酵母
- 藝術(shù)碩士論證報告
- 帕金森病患者的睡眠障礙課件
- 公司質(zhì)量目標過程績效評價表
- 2022 年湖南省長沙市雨花區(qū)金海中學小升初數(shù)學試卷
評論
0/150
提交評論