posts - 78, comments - 34, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

                   今天一大早去到學校,便開始編寫網上商城。寫到下午3點多,完成了!感覺十分的好,因為這是自己第一次將所學的WEB知識規整到一起了。做出來的成品,雖然不能拿出來展示(只是個練習,很多校驗沒加),但已經讓我十分開心了。以前為網上商城這個東西還是十分的恐懼,工程顯得比較龐大。其實加上了論壇和評論等功能,還是十分龐大的。

                   今天寫些什么好呢?把工程中的一個難點寫出來吧!

                   我們在添加書籍的時候可以添加一張書籍的照片,照片是存在硬盤目錄里的。而數據庫中保存的是照片在硬盤目錄中的路徑。

          1.        如何獲取瀏覽器向服務器端發送過來的圖片文件?使用request輸入流嗎?太麻煩了!Apache組織為我們提供了一個方便的工具——commons-fileupload,它可以很好的解決這一問題。

          2.        如何確保,圖片的名稱不一樣?當然是大名鼎鼎的UUID了,生成了一個不重復的隨機串就OK了!

          我把代碼粘貼出來:

          private String uploadFields(HttpServletRequest request,

                     Map<String, String> map) {

                 // 獲取request中的請求參數

                 DiskFileItemFactory dfif = new DiskFileItemFactory();

                 ServletFileUpload sfu = new ServletFileUpload(dfif);

                 sfu.setHeaderEncoding("UTF-8");

                 String file = null;

                 try {

                     List<FileItem> list = sfu.parseRequest(request);

                     // 遍歷所有參數

                     for (Iterator<FileItem> its = list.iterator(); its.hasNext();) {

                         FileItem fi = its.next();

                        // 是否為表單字段,如果不是則為文件上傳輸入流。

                        if (!fi.isFormField()) {

                            InputStream is = fi.getInputStream();

                            // 獲取圖片目錄

                            String dir = this.getServletContext().getRealPath("/")

                                   + "/images/";

                            File dirF = new File(dir);

                            if (!dirF.exists())

                               dirF.mkdirs();

                            // 使用UUID創建文件名稱

                            file = UUID.randomUUID().toString()

                                   + fi.getName().substring(

                                          fi.getName().lastIndexOf("."));

                            // 寫出文件

                            byte[] buf = new byte[1024];

                            int len = 0;

                            FileOutputStream fos = new FileOutputStream(new File(dir

                                   + file));

                            while ((len = is.read(buf)) != -1) {

                               fos.write(buf, 0, len);

                            }

                            // 關閉流

                            fos.close();

                            is.close();

                            fi.delete();

                        } else {

                            // 如果為表單字段,則將這些信息添加到map中返回給調用函數

                            // filter無法對文件上傳進行過濾,所以需要手動對編碼轉換。

                            map.put(fi.getFieldName(), new String(fi.getString()

                                   .getBytes("iso8859-1"), "UTF-8"));

                        }

                     }

                 } catch (Exception e) {

                     e.printStackTrace();

                 }

                 // 返回在服務器保存后的文件路徑。

                 return "images/" + file;

              }

                  

          然后老方在下午4點鐘時,給大家講解了訂單的提交。訂單提交是唯一涉及到多表操作的模塊,這也是練習的重點。一個多對多的設計方式。如下模塊流程圖。

          clip_image001

          看到里邊的orderitemorders表了吧,這就是一個多對多的關系。Orderitem就是中間表,記錄訂單的的id和書的id,還包含數量和總計字段。這樣,添加訂單或是查詢訂單這樣操作起來更直觀方便些,這就是面向對象的有點。

                   訂單處理模塊中也是首次使用到MVC,以前我認為Servlet就是業務邏輯層,其實不是。Servlet只是個Web層(V)。通過今天老方的講解,我發現自己并未完全融入面向對象的設計模式,還有些面向過程的東西在影響著我。不過我想,這一點很快就會改變!

                   今天的練習確實達到的預期效果,雖然有些同學還未完成。不過,有的同學昨天晚上已經完成了,有的上午已經完成了。臥虎藏龍!我需要向他們好好學習。

                   今晚回來時我把老方的工程復制到工作空間里了,結果我的工程名與他相同。暈!幸好我的包名與他不同,只有幾個JSP頁面的名稱與他相同,嚇我一跳。我今天嘗試著將數據庫字段、requestresponse中的屬性名稱封裝到靜態類中,但操作起來十分不方便,比如編寫一個SQL語句。在大工程中,這肯定非常有用!

                   繼續整理工程去

                   加油!


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 田东县| 侯马市| 荣成市| 漳州市| 格尔木市| 北流市| 吉首市| 南城县| 宣汉县| 双桥区| 驻马店市| 达日县| 九寨沟县| 河津市| 宁海县| 泰顺县| 沂水县| 东阿县| 拉萨市| 绵竹市| 灵山县| 景德镇市| 成武县| 彭州市| 焦作市| 仙游县| 体育| 安西县| 博白县| 汪清县| 湄潭县| 五莲县| 九江市| 牙克石市| 大关县| 沙洋县| 榆林市| 多伦县| 廉江市| 长海县| 抚州市|