不知道從何時起,我愛上了寫博客,對以前學得的只是進行反思。寫了幾天課程設計,代碼量量8、9千左右。
而後下面文字是我在博客上覆制過來的,說得很詳細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
- <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'upload.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <form action="/upload/UpLoad" method="post" enctype="multipart/form-data">
- 請選擇上傳的圖片或文件:<input type="file" name="fileName"/><input type="submit" value="上傳"/>
- </form>
- </body>
- </html>
能夠看到,咱們將數據提交到工程下的upload/UpLoad。
以後,咱們就來編寫這個servlet——UpLoad.java
[java] view plaincopy
- package load;
- import java.io.File;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.List;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.fileupload.FileItem;
- import org.apache.commons.fileupload.FileUploadException;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- public class UpLoad extends HttpServlet {
- @SuppressWarnings("unchecked")
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- req.setCharacterEncoding("utf-8");
- resp.setContentType("text/html;charset=utf-8");
- //爲解析類提供配置信息
- DiskFileItemFactory factory = new DiskFileItemFactory();
- //建立解析類的實例
- ServletFileUpload sfu = new ServletFileUpload(factory);
- //開始解析
- sfu.setFileSizeMax(1024*400);
- //每一個表單域中數據會封裝到一個對應的FileItem對象上
- try {
- List<FileItem> items = sfu.parseRequest(req);
- //區分表單域
- for (int i = 0; i < items.size(); i++) {
- FileItem item = items.get(i);
- //isFormField爲true,表示這不是文件上傳表單域
- if(!item.isFormField()){
- ServletContext sctx = getServletContext();
- //得到存放文件的物理路徑
- //upload下的某個文件夾 獲得當前在線的用戶 找到對應的文件夾
- String path = sctx.getRealPath("/upload");
- System.out.println(path);
- //得到文件名
- String fileName = item.getName();
- System.out.println(fileName);
- //該方法在某些平臺(操做系統),會返回路徑+文件名
- fileName = fileName.substring(fileName.lastIndexOf("/")+1);
- File file = new File(path+"\\"+fileName);
- if(!file.exists()){
- item.write(file);
- //將上傳圖片的名字記錄到數據庫中
- resp.sendRedirect("/upload/ok.html");
- }
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
自學的軟件工程的設計思路
Ø 定義階段:可行性研究初步項目計劃、需求分析
網上商城的目的是爲廣大的網絡用戶提供一個網上購物平臺,利用網絡的便捷方便人們的平常生活。爲了使它適合更多的用戶使用,系統的界面設計應該儘可能作到友好、簡潔,功能的實現更注重人性化,方便用戶的購買,使得用戶很快即可以熟練掌握使用方法。
本系統採用B/S模式,服務器端使用JSP進行動態網頁的開發。
Ø 開發階段:概要設計、詳細設計、實現、測試
網上商城能夠爲各種用戶提供方便的在線購物環境。用戶能夠在系統中實現 註冊、瀏覽商品、下訂單、處理訂單等功能;管理員能夠經過用戶管理、訂單管理、商品管理等管理功能來對系統進行維護更新。
Ø 運行和維護階段:運行、維護、廢棄
網上商城分爲前臺用戶界面和後臺管理系統。因此要對商城的運行效率和穩定性進行測試。提升系統的安全性和穩定性。
活動圖:
商城前臺活動圖

後臺管理系統活動圖

演示:
網上商城客戶端

瀏覽商品

購買商品

後臺管理系統:

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