交友系統(tǒng)論文設(shè)計報告_第1頁
交友系統(tǒng)論文設(shè)計報告_第2頁
交友系統(tǒng)論文設(shè)計報告_第3頁
交友系統(tǒng)論文設(shè)計報告_第4頁
交友系統(tǒng)論文設(shè)計報告_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

大型軟件項目實訓報告題目:交友網(wǎng)站系統(tǒng)選題來源:校外指導(dǎo)教師:姓名:班級:學號:遼寧工程技術(shù)大學軟件學院目錄1.序言 31.1選題背景 31.2選題目的及意義 31.3選題完成情況 32.項目需求分析 32.1項目功能需求 32.2項目性能需求 33.項目概要設(shè)計 43.1系統(tǒng)功能結(jié)構(gòu)設(shè)計 44.項目詳細設(shè)計 54.1模塊1描述 54.1.1功能描述 54.1.2性能描述 54.2界面構(gòu)建 54.3詳細設(shè)計 64.3.1利用工廠化模型 64.3.2servlet跳轉(zhuǎn)界面優(yōu)化設(shè)計 64.3.3用戶登錄時session驗證設(shè)計 64.3.4文件上傳設(shè)計 74.3.4用戶登錄設(shè)計 8表1:包與類定義 84.3.5模塊設(shè)計 94.3.6功能界面 94.3.7主要源代碼 125.總結(jié)與展望 19參考文獻 20成績評定 204.項目詳細設(shè)計4.1模塊1描述4.1.1功能描述(一)必備功能說明:用戶登錄設(shè)置:查詢數(shù)據(jù)庫,匹配密碼,驗證碼。用戶注冊設(shè)置:插入用戶基本信息,設(shè)置驗證碼?;拘畔旃芾恚夯拘畔⒎譃?,用戶的基本信息,和圖片信息。驗證用戶的安全性:對非登錄用戶,不能修改用戶信息。(二)開發(fā)語言與開發(fā)環(huán)境:MyEclipse、Java、MySql數(shù)據(jù)庫4.1.2性能描述要實現(xiàn)一個軟件系統(tǒng),首先應(yīng)該進行需求分析,這樣才能令設(shè)計出的軟件滿足用戶的各項功能。該系統(tǒng)可以實現(xiàn)多個用戶同時登錄并參看全部用戶的信息。實現(xiàn)在本地上傳圖片功能。登錄和注冊時進行安全驗證使網(wǎng)友能夠安全和真實的交到朋友。4.2界面構(gòu)建1、應(yīng)用了4個基本的靜態(tài)的頁面,分別是login,list。Regist,listdetial。2、登陸界面的主要功能是查詢數(shù)據(jù)庫信息,并進行判斷,返回錯誤或者跳轉(zhuǎn)到用戶類表界面。3、注冊界的主要功能是向數(shù)據(jù)庫插入數(shù)據(jù),并進行安全驗證,注冊成功跳轉(zhuǎn)到登錄界面,并創(chuàng)建保存用戶圖片的文件夾。4、當用戶在進行個別錄入、刪除或錯誤輸入操作時,會彈出相應(yīng)對話框提示用戶。如當錄入成功或刪除成功會跳轉(zhuǎn)到登陸界面中,當錄入、刪除失敗以及輸入不當時,彈出錯誤以及簡單的錯誤原因提示用戶重新操作。5、頁面布局盡量合理,各組件位置分布均勻美觀。6、用戶列表界面,可以查看所有用戶的基本信息,對當前用戶的基本信息進行修改和查看。7、用戶詳細界面,可以對當前用戶的信息進行修改和刪除,并向數(shù)據(jù)庫進行修改,同時添加或刪除當前用戶圖片。4.3詳細設(shè)計4.3.1利用工廠化模型如果dao中不只是一個接口的話,我們在service調(diào)用實現(xiàn)類就有一定的麻煩,不知道那個實現(xiàn)類完成那個接口。所以就有了工廠模型,factory定義一個工廠工具類,再定一個,configutil工具類,用configutil讀perties配置文件,并且提供相應(yīng)的方法,來方便獲得該配置文件的內(nèi)容。當中ClassLoader類類加載器負責查找.class文件,并且將該文件的內(nèi)容讀入到,方法區(qū),然后依據(jù)這些內(nèi)容構(gòu)造一個對應(yīng)的class對象。(ClassLoaderloaderConfigUtil.class.getClassLoader();)類加載器的getResourceAsStream方法,會依據(jù)classpath搜索資源文件,并且轉(zhuǎn)換成一個輸入流。這樣就可以通過接口找出實現(xiàn)類的名稱,在通過factroy類,利用反射創(chuàng)建出一個實例。反射可以應(yīng)用一個類的名字創(chuàng)建一個實例。4.3.2servlet跳轉(zhuǎn)界面優(yōu)化設(shè)計我們現(xiàn)在在web.xml文件中用到了太多的跳轉(zhuǎn),代碼太多。如何讓一個servlet處理多種不同的請求,首先獲取到地址頁面的名稱,Stringaction=uri.substring(uri.indexOf("/"),uri.lastIndexOf("."));在service方法里面,分析請求資源路徑。然后用ifelse判斷頁面的action名稱就可以了。在web.xml文件中<url-pattern>*.action</url-pattern>,匹配所有以.action結(jié)尾的請求。這樣就實現(xiàn)了讓一個servlet處理多種不同的請求。4.3.3用戶登錄時session驗證設(shè)計在進行登錄操作中,如果直接輸入list.jsp訪問,會直接進入到列表界面,登錄就失去意義了,所以要在登錄時增加一個驗證,session驗證,瀏覽器在訪問服務(wù)器的時候,服務(wù)器會先創(chuàng)建一個

session對象(該對象有一個id,其值是唯一的,一般稱之為sessionId) ,接下來服務(wù)器默認會使用cookie機制將sessionId發(fā)送給瀏覽器,瀏覽器會將這個sessionId保存在內(nèi)存里面;當瀏覽器再次訪問服務(wù)器的時候,會將sessionId發(fā)送給服務(wù)器,服務(wù)器會依據(jù)sessionId找到之前創(chuàng)建的session對象。具體的步驟,首先獲得一個session,HttpSessions=request.getSession(booleanflag);flag=true時,服務(wù)器會檢查請求當中是否包含sessionId,如果沒有,則創(chuàng)建一個session對象;如果有,服務(wù)器會依據(jù)sessionId查找對應(yīng)的session對象,如果找到了,則返回,找不到,會創(chuàng)建一個新的session對象。當flag=false時,找不到,返回null。 進行session驗證,在登錄成功以后,在session對象上綁訂相關(guān)的數(shù)據(jù)。session.setAttribute("user",user);綁定一個user,然后對list頁面進行session驗證,Objectobj=session.getAttribute("user"); if(obj==null){ //沒有登錄,則跳轉(zhuǎn)到登錄頁面 response.sendRedirect("login.jsp"); return; }4.3.4文件上傳設(shè)計首先些個上傳所要用到的jsp。其中用到瀏覽框,設(shè)置時要注意對于表單,設(shè)置enctype="multipart/form-data",并且,表單的提交方式必須是"post"。這是html里面的規(guī)定。寫好jsp后在服務(wù)器端注意,不能夠直接使用requset.getParameter(Stringname)獲取參數(shù)值。需要用InputStreamips=request.getInputStream//獲得一個2進制字節(jié)碼。具體步驟,首先創(chuàng)建一個解釋器,提供解析是的缺省配置。FileItemFactoryfactory=newDiskFileItemFactory();ServletFileUploadsfu=newServletFileUpload(factory);這樣對象sfu.parseRequest(request)將每一個jsp中表單的數(shù)據(jù)封裝到一個對應(yīng)的FileItem對象當中。我們這里集合中就有兩個類型的數(shù)據(jù),一個是普通的文本框,另一個要上傳文件的瀏覽框。判斷是否是普通的表單域item.isFormField()。item是個集合,在判斷時需要對它進行遍歷。根據(jù)邏輯路徑獲得實際部署的物理路徑ServletContextsctx=getServletContext();獲得實際部署時的物理路徑Stringpath=sctx.getRealPath("upload");獲得文件名,Stringfilename=item.getName();生成文件寫入到硬盤當中Filefile=newFile(path+"http://"+filename);item.write(file);這樣就不用生硬的寫出絕對路徑,形成了動態(tài)的生成。4.3.4用戶登錄設(shè)計應(yīng)用以前些的findbyusername()方法,根據(jù)username查詢所有的user屬性,在service方法中獲得username和pwd,調(diào)用findbyusername()看看所得到的密碼是否相同,如果相同則成功登錄跳轉(zhuǎn)到list界面,不同報錯,寫個轉(zhuǎn)發(fā),用request綁定一句話,轉(zhuǎn)發(fā)到login。jsp頁面,在用戶登錄文本框后面轉(zhuǎn)發(fā)error-jsp,輸出寫好的話,加上<%=(msg==null?"用戶名不能為空":msg)%>解決用戶為空的問題。本系統(tǒng)采用java編程,主要編程類與頁面信息的設(shè)計如下:表1:包與類定義包名類名功能daoPicDAO.java圖片功能實現(xiàn)類UserDAO.java用戶功能實現(xiàn)類EntitiyPic.java圖片實體類User.java用戶實體類TagDateTag.java時間標簽類SessionValidate.javaSession驗證標簽UtilDBUtil.java數(shù)據(jù)庫連接工具類WebActionServlet.javaServlet實現(xiàn)類CheckCodeServlet.java驗證碼類表2:頁面定義包名類名功能Jsp頁面head.jsp頁面的表頭Index.jsp頁面索引Login.jsp登錄頁面Regist.jsp注冊界面User_list.jsp用戶列表界面userDetail.jsp用戶詳細界面4.3.5模塊設(shè)計(1)用戶注冊模塊此模塊是添加新的用戶,填寫用戶個人基本信息,包括姓名、性別、電話、密碼、年齡、對方基本要求,并添加到用戶數(shù)據(jù)庫中。(2)用戶登錄模塊如果用戶要使用為注冊用戶提供的功能,那么在使用之前必須登錄。用戶只要輸入用戶名、密碼就可以了。若用戶輸入的以上兩項與數(shù)據(jù)庫中保存的相符,則表明用戶登錄成功,可以開放全部前臺子系統(tǒng);如果不符,則登錄失敗。(3)用戶,圖片文件實現(xiàn)類模塊在此模塊中包含通過用戶名,用戶id查找用戶全部信息,保存用戶信息。用戶登錄時通過用戶名查找用戶密碼,并進行驗證,注冊用戶時調(diào)用save()方法,保存數(shù)據(jù)信息。在上傳文件中通過PicDAO中保存圖片文件到注冊時指定的文件夾。(4)用戶詳細資料模塊用戶詳細資料模塊對用戶的基本信息進行,刪除、修改和添加圖片的操作。4.3.6功能界面登陸界面注冊界面用戶列表界面詳細介紹界面4.3.7主要源代碼主要servlet代碼:packageweb;importjava.io.File;importjava.io.IOException;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importmons.fileupload.FileItem;importmons.fileupload.FileUploadException;importmons.fileupload.disk.DiskFileItemFactory;importmons.fileupload.servlet.ServletFileUpload;importmons.beanutils.BeanUtils;importdao.PicDAO;importdao.UserDAO;importentity.Pic;importentity.User;publicclassActionServletextendsHttpServlet{ publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ request.setCharacterEncoding("utf-8"); Stringuri=request.getRequestURI(); Stringaction=uri.substring( uri.lastIndexOf("/"),uri.lastIndexOf(".")); if(action.equals("/regist")){ Stringusername=request.getParameter("username"); UserDAOdao=newUserDAO(); try{ Useruser=dao.findByUsername(username); if(user!=null){ request.setAttribute( "regist_error","注冊錯誤"); request.getRequestDispatcher("regist.jsp") .forward(request,response); }else{ user=newUser(); BeanUtils.populate(user, request.getParameterMap()); intid=dao.save(user); /*Stringpath=getServletContext().getRealPath("upload"); Filefile=newFile(path+"http://"+"pic_"+id); if(!file.exists()) file.mkdirs();*/ response.sendRedirect("login.jsp"); } }catch(Exceptione){ e.printStackTrace(); thrownewServletException(e); } }elseif(action.equals("/login")){ Stringusername=request.getParameter("username"); Stringpwd=request.getParameter("pwd"); UserDAOdao=newUserDAO(); try{ Useruser=dao.findByUsername(username); if(user!=null&&user.getPwd().equals(pwd)){ HttpSessionsession= request.getSession(); session.setAttribute("user",user); response.sendRedirect("list.do"); }else{ request.setAttribute("login_error", "登陸錯誤"); request.getRequestDispatcher("login.jsp") .forward(request,response); } }catch(Exceptione){ e.printStackTrace(); } }elseif(action.equals("/list")){ UserDAOdao=newUserDAO(); try{ List<User>users=dao.findAll(); request.setAttribute("users",users); request.getRequestDispatcher("user_list.jsp") .forward(request,response); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(e); } }elseif(action.equals("/userDetail")){ intid=Integer.parseInt(request.getParameter("id")); UserDAOdao=newUserDAO(); PicDAOdao2=newPicDAO(); try{ Useruser=dao.findByUserId(id); List<Pic>pics=dao2.findPics(id); request.setAttribute("user",user); request.setAttribute("pics",pics); request.getRequestDispatcher("userDetail.jsp") .forward(request,response); }catch(Exceptione){ e.printStackTrace(); thrownewServletException(e); } }elseif(action.equals("/upload")){ intuserId=Integer.parseInt(request.getParameter("id")); DiskFileItemFactoryfactory= newDiskFileItemFactory(); ServletFileUploadsfu= newServletFileUpload(factory); try{ List<FileItem>items= sfu.parseRequest(request); for(inti=0;i<items.size();i++){ FileItemcurr=items.get(i); if(curr.isFormField()){ // }else{ Stringpath= getServletContext().getRealPath("upload"); StringfileName=curr.getName(); Filefile=newFile(path+"/pic_"+userId); if(!file.exists()){ file.mkdirs(); } System.out.println(file); fileName=fileName .substring(fileName.lastIndexOf("/")+1); curr.write(newFile(path+"http://"+"pic_"+userId +"http://"+fileName)); PicDAOdao=newPicDAO(); Picpic=newPic(); pic.setPicName(fileName); pic.setUserId(userId); dao.save(pic); response.sendRedirect( "userDetail.do?id="+userId); } } }catch(Exceptione){ e.printStackTrace(); } }elseif(action.equals("/delete")){ intuserId=Integer.parseInt(request.getParameter("userId")); PicDAOdao=newPicDAO(); try{ List<Pic>pic=dao.findPics(userId); // dao.delete(pic.get(userId)); }catch(Exceptione){ e.printStackTr

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論