JavaWeb網上商城的反思

不知道從何時起,我愛上了寫博客,對以前學得的只是進行反思。寫了幾天課程設計,代碼量量89千左右。

而後下面文字是我在博客上覆制過來的,說得很詳細css

MVC(Model View Controller)設計模式在JavaFX中有着比Swing更好的表現方式。它使得程序界面設計和程序邏輯設計徹底分開,便於代碼的可讀性和之後的可維護性。

JavaEE體系架構採用傳統的MVC設計模式,分爲Model、View、Controller三層,其中:Model即模型層,定義數據模型和業務邏輯。爲了將數據訪問與業務邏輯分離,提升業務精度,下降代碼之間的耦合,模型層又細分爲DAO層與業務層,DAO全稱爲Data Access Object(數據訪問對象),將數據庫訪問代碼封閉起來,Hibernate API也在此封裝,再也不出如今其餘層或向其餘層暴露;業務層是整個系統最核心也最具價值的一層,該層封裝應用程序的業務邏輯,處理數據,關注客戶需求,在業務處理過程當中會訪問原始數據或產生新數據,或者須要持久化數據,DAO層提供的DAO類能很好地幫助業務層完成數據處理,業務層自己則側重於對客戶需求的理解和業務規則的適應,天然也包括大部分的計算,整體說來,DAO不處理業務邏輯,只爲業務層提供輔助,獲取原始數據或持久化數據等操做。View即視圖層,爲最終用戶提供一個友好的交互界面,用戶能夠查看請求結果,也能夠經過表單等交互手段實現數據錄入。Controller層即控制器,控制器是Model與View的橋樑,將兩者很好的銜接,經過View接收用戶數據,Controller將數據傳輸給Model,Model對數據進行處理;或者Model讀取數據後,Controller將數據傳遞給View,View向用戶展現數據。一來一往,Controller成了Model與View之間的快樂使者。 html

系統構架模式:  MVC構架模式(有用到DAO模式) java

 

後臺管理系統的項目結構有JavaBean類、Dao接口類、Dao接口實現類、控制類,如圖a所示:web

 

 

圖a數據庫

網上商城前臺的項目結構有JavaBean類、Dao接口類、Dao接口實現類、控制類,如圖apache

b所示:

 設計模式



                    圖b



JSP圖片上傳安全

 總的說圖片上傳有兩種方式,一種是把圖片文件寫到數據庫中,另外一種是存到服務器文件目錄中。寫到數據庫中的圖片文件須要轉換成二進制流的格式,佔用數據庫空間比較,適合少許圖片的存儲,好比說,系統中某些小圖標,寫到數據庫中的優勢是比較安全,不容易被用戶不當心刪除。服務器


下面是我在網上覆制的例子:網絡

   如今不論是博客論壇仍是企業辦公,都離不開資源的共享。經過文件上傳的方式,與你們同分享,從而達到大衆間普遍的溝通和交流,咱們既能夠從中得到更多的知識和經驗,也能經過他人的反饋達到自我改進和提高的目的。

        下面我就爲你們介紹 web項目中的這一上傳功能,那麼文件是如何從本地發送到服務器的呢?看我慢慢道來:

        首先,咱們建立一個新的web工程,在工程的WebRoot目錄下新建一個upload文件夾,這樣當咱們將該工程部署到服務器上時,服務器便也生成個upload文件夾,用來存放上傳的資源。

        而後,在WebRoot目錄下新建一個jsp文件,主要實現的做用就是選擇上傳的文件,提交至servlet來進行處理

       詳細代碼以下:一個form將文件信息經過post方式傳送到指定的servlet

[html] view plaincopy

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8. <head>  
  9. <base href="<%=basePath%>">  
  10. <title>My JSP 'upload.jsp' starting page</title>  
  11. <meta http-equiv="pragma" content="no-cache">  
  12. <meta http-equiv="cache-control" content="no-cache">  
  13. <meta http-equiv="expires" content="0">      
  14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  15. <meta http-equiv="description" content="This is my page">  
  16. <!-- 
  17. <link rel="stylesheet" type="text/css" href="styles.css"> 
  18. -->  
  19. </head>  
  20. <body>  
  21. <form action="/upload/UpLoad" method="post" enctype="multipart/form-data">  
  22. 請選擇上傳的圖片或文件:<input type="file" name="fileName"/><input type="submit" value="上傳"/>  
  23. </form>  
  24. </body>  
  25. </html>  

             能夠看到,咱們將數據提交到工程下的upload/UpLoad

             以後,咱們就來編寫這個servlet——UpLoad.java
           

[java] view plaincopy

  1. package load;  
  2. import java.io.File;  
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5. import java.util.List;  
  6. import javax.servlet.ServletContext;  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11. import org.apache.commons.fileupload.FileItem;  
  12. import org.apache.commons.fileupload.FileUploadException;  
  13. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  14. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  15. public class UpLoad extends HttpServlet {  
  16. @SuppressWarnings("unchecked")  
  17. @Override  
  18. protected void service(HttpServletRequest req, HttpServletResponse resp)  
  19. throws ServletException, IOException {  
  20. req.setCharacterEncoding("utf-8");  
  21. resp.setContentType("text/html;charset=utf-8");  
  22. //爲解析類提供配置信息  
  23. DiskFileItemFactory factory = new DiskFileItemFactory();  
  24. //建立解析類的實例  
  25. ServletFileUpload sfu = new ServletFileUpload(factory);  
  26. //開始解析  
  27. sfu.setFileSizeMax(1024*400);  
  28. //每一個表單域中數據會封裝到一個對應的FileItem對象上  
  29. try {  
  30. List<FileItem> items = sfu.parseRequest(req);  
  31. //區分表單域  
  32. for (int i = 0; i < items.size(); i++) {  
  33. FileItem item = items.get(i);  
  34. //isFormField爲true,表示這不是文件上傳表單域  
  35. if(!item.isFormField()){  
  36. ServletContext sctx = getServletContext();  
  37. //得到存放文件的物理路徑  
  38. //upload下的某個文件夾   獲得當前在線的用戶  找到對應的文件夾  
  39. String path = sctx.getRealPath("/upload");  
  40. System.out.println(path);  
  41. //得到文件名  
  42. String fileName = item.getName();  
  43. System.out.println(fileName);  
  44. //該方法在某些平臺(操做系統),會返回路徑+文件名  
  45. fileName = fileName.substring(fileName.lastIndexOf("/")+1);  
  46. File file = new File(path+"\\"+fileName);  
  47. if(!file.exists()){  
  48. item.write(file);  
  49. //將上傳圖片的名字記錄到數據庫中  
  50. resp.sendRedirect("/upload/ok.html");  
  51. }  
  52. }  
  53. }  
  54. } catch (Exception e) {  
  55. e.printStackTrace();  
  56. }  
  57. }  
  58. }  

 

 自學的軟件工程的設計思路

Ø 定義階段:可行性研究初步項目計劃、需求分析

 

網上商城的目的是爲廣大的網絡用戶提供一個網上購物平臺,利用網絡的便捷方便人們的平常生活。爲了使它適合更多的用戶使用,系統的界面設計應該儘可能作到友好、簡潔,功能的實現更注重人性化,方便用戶的購買,使得用戶很快即可以熟練掌握使用方法。

本系統採用B/S模式,服務器端使用JSP進行動態網頁的開發。

 

 

Ø 開發階段:概要設計詳細設計、實現、測試

 

網上商城能夠爲各種用戶提供方便的在線購物環境。用戶能夠在系統中實現 註冊、瀏覽商品、下訂單、處理訂單等功能;管理員能夠經過用戶管理、訂單管理、商品管理等管理功能來對系統進行維護更新。

 

Ø 運行和維護階段:運行、維護、廢棄
 

網上商城分爲前臺用戶界面和後臺管理系統。因此要對商城的運行效率和穩定性進行測試。提升系統的安全性和穩定性。


活動圖:

 

商城前臺活動圖



後臺管理系統活動圖

 



 

演示:

網上商城客戶端
 


瀏覽商品

 
購買商品

 

 

後臺管理系統:

 

 

上傳圖片,而後保存圖片路徑到數據庫

 

相關文章
相關標籤/搜索