




已閱讀5頁,還剩57頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
黑馬旅游網綜合案例1 前言為了鞏固web基礎知識,提升綜合運用能力,故而講解此案例。要求,每位同學能夠獨立完成此案例。2 項目導入點擊綠色按鈕選擇travel項目的pom.xml文件,點擊ok,完成項目導入。需要等待一小會,項目初始化完成。3 啟動項目3.1 方式一:3.2 方式二:配置maven快捷啟動4 技術選型4.1 Web層a) Servlet:前端控制器b) html:視圖c) Filter:過濾器d) BeanUtils:數據封裝e) Jackson:json序列化工具4.2 Service層f) Javamail:java發送郵件工具g) Redis:nosql內存數據庫h) Jedis:java的redis客戶端4.3 Dao層i) Mysql:數據庫j) Druid:數據庫連接池k) JdbcTemplate:jdbc的工具5 創建數據庫- 創建數據庫CREATE DATABASE travel;- 使用數據庫USE travel;-創建表復制提供好的sql6 注冊功能6.1 頁面效果6.2 功能分析6.3 代碼實現6.3.1 前臺代碼實現6.3.2 表單校驗提升用戶體驗,并減輕服務器壓力。/校驗用戶名/單詞字符,長度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 () /當表單提交時,調用所有的校驗方法 $(#registerForm).submit(function() return checkUsername() & checkPassword() & checkEmail(); /如果這個方法沒有返回值,或者返回為true,則表單提交,如果返回為false,則表單不提交 ); /當某一個組件失去焦點是,調用對應的校驗方法 $(#username).blur(checkUsername); $(#password).blur(checkPassword); $(#email).blur(checkEmail); );6.3.3 異步(ajax)提交表單在此使用異步提交表單是為了獲取服務器響應的數據。因為我們前臺使用的是html作為視圖層,不能夠直接從servlet相關的域對象獲取值,只能通過ajax獲取響應數據6.3.4 后臺代碼實現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.獲取數據 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.調用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對象序列化為json ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(info); /將json數據寫回客戶端 /設置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.根據用戶名查詢用戶對象 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.執行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.執行sql template.update(sql,user.getUsername(), user.getPassword(), user.getName(), user.getBirthday(), user.getSex(), user.getTelephone(), user.getEmail(); 6.3.8 郵件激活為什么要進行郵件激活?為了保證用戶填寫的郵箱是正確的。將來可以推廣一些宣傳信息,到用戶郵箱中。6.3.9 發送郵件1. 申請郵箱2. 開啟授權碼3. 在MailUtils中設置自己的郵箱賬號和密碼(授權碼)郵件工具類:MailUtils,調用其中sendMail方法可以完成郵件發送6.3.10 用戶點擊郵件激活經過分析,發現,用戶激活其實就是修改用戶表中的status為Y分析:發送郵件代碼:修改保存Dao代碼,加上存儲status和code 的代碼邏輯激活代碼實現:ActiveUserServlet/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 = 激活成功,請登錄; else /激活失敗 msg = 激活失敗,請聯系管理員!; response.setContentType(text/html;charset=utf-8); response.getWriter().write(msg);UserService:activeOverridepublic boolean active(String code) /1.根據激活碼查詢用戶對象 User user = userDao.findByCode(code); if(user != null) /2.調用dao的修改激活狀態的方法 userDao.updateStatus(user); return true; else return false; UserDao:findByCodeupdateStatus/* * 根據激活碼查詢用戶對象 * 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;/* * 修改指定用戶激活狀態 * 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 代碼實現7.2.1 前臺代碼7.2.2 后臺代碼LoginServlet/1.獲取用戶名和密碼數據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.調用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);/響應數據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.執行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對象。實現步驟:1. 訪問servlet,將session銷毀2. 跳轉到登錄頁面代碼實現:Header.htmlServlet:/1.銷毀sessionrequest.getSession().invalidate();/2.跳轉登錄頁面response.sendRedirect(request.getContextPath()+/login.html);9 優化Servlet9.1 目的減少Servlet的數量,現在是一個功能一個Servlet,將其優化為一個模塊一個Servlet,相當于在數據庫中一張表對應一個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方法被執行了.); /完成方法分發 /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 /誰調用我?我代表誰 System.out.println(this);/UserServlet的對象.web.servlet.UserServlet4903d97e try /獲取方法 Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); /4.執行方法 /暴力反射 /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實現的功能,抽取到UserServlet中的不同方法中實現,并且將UserService創建抽取到成員變量位置WebServlet(/user/*) / /user/add /user/findpublic class UserServlet extends BaseServlet /聲明UserService業務對象 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.獲取數據 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.調用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對象序列化為json ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(info); /將json數據寫回客戶端 /設置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.獲取用戶名和密碼數據 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.調用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); /響應數據 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.跳轉登錄頁面 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.調用service完成激活 /UserService service = new UserServiceImpl(); boolean flag = service.active(code); /3.判斷標記 String msg = null; if(flag) /激活成功 msg = 激活成功,請登錄; else /激活失敗 msg = 激活失敗,請聯系管理員!; response.setContentType(text/html;charset=utf-8); response.getWriter().write(msg); 9.4 頁面路徑改寫register.htmllogin.htmlheader.htmlUserServiceImpl發送郵件10 分類數據展示10.1 效果:10.2 分析:10.3 代碼實現: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 焊接試件培訓課件內容
- 幼兒園主題活動中的游戲化設計
- 教育培訓機構的預算規劃與執行
- 提升參與度的策略研究
- 廣告落地頁設計與用戶體驗優化
- 戰略規劃與企業發展質量的提升
- 教育性旅行的設計及其市場需求分析
- 2025年醫療器械臨床試驗質量管理規范化與臨床試驗報告審核報告
- 提升新零售企業財務報告質量的方法
- 技術創新推動文化產業升級的策略
- 部編四下語文《口語交際:轉述》公開課教案教學設計【一等獎】
- 第八屆全國職工職業技能大賽(網約配送員賽項)必背考試題庫500題(含答案)
- 中藥材良種培育與品質提升
- 湖南省邵陽2024-2025高一物理下學期第一次聯考試題
- 心理咨詢室整改報告
- 湖北省武漢市東西湖區2023-2024學年八年級下學期期末考試語文試題
- 內蒙古錦山蒙古族中學2024年數學高一下期末綜合測試模擬試題含解析
- 醫院檢驗科實驗室生物安全程序文件SOP
- 醫療設備儀器的清潔消毒
- 基于Matlab的巴特沃斯濾波器設計
- 兒童發展心理學全套課件
評論
0/150
提交評論