朱杰兵blog

          jonhney'blog
          posts - 140, comments - 1, trackbacks - 0, articles - 0

          Spring Web MVC 處理Http請求的大致過程: 一旦Http請求到來,DispatcherSevlet將負責將請求分發。DispatcherServlet可以認為是Spring提供的前端控制器,所有的請求都有經過它來統一分發。 在DispatcherServlet將請求分發給Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具體的Controller。HandlerMapping是這樣一種對象,它能夠完成客戶請求到Controller之間的映射。在Struts中,這種映射是通過struts-config.xml文件完成的。其中,Spring為Controller接口提供了若干實現,例如Spring默認使用的BeanNameUrlHandlerMapping。還有,SimpleUrlHandlerMapping,CommonsPathMapHandlerMapping。 Spring Controller將處理來自DispatcherServlet的請求。Spring的Controller類似于struts的Action,能夠接受HttpServletRequest和HttpServletResponse。Spring為Controller接口提供了若干實現類,位于org.springframework.web.servlet.mvc包中。由于Controller需要為并發用戶處理上述請求,因此實現Controller接口時,必須保證線程安全并且可重用。Controller將處理客戶請求,這和Struts Action 扮演的角色是一致的。 一旦Controller處理完客戶請求,則返回ModelAndView對象給DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和視圖(View)。從宏觀角度考慮,DispatcherServlet是整個Web應用的控制器;從微觀角度考慮,Controller是單個Http請求處理過程中的控制器,而ModelAndView是Http請求過程中返回的模型和視圖。前端控制器返回的視圖可以是視圖的邏輯名,或者實現了View接口的對象。View對象能夠渲染客戶響應結果。其中,ModelAndView中的模型能夠供渲染View時使用。借助于Map對象能夠存儲模型。 如果ModelAndView返回的視圖只是邏輯名,則需要借助Spring提供的視圖解析器(ViewResoler)在Web應用中查找View對象,從而將響應結果渲染給客戶。 DispatcherServlet將View對象渲染出的結果返回個客戶。

          posted @ 2015-05-19 15:23 朱杰兵 閱讀(319) | 評論 (0)編輯 收藏

          方法/步驟

          1. 在系統變量里點擊新建,變量名填寫JAVA_HOME,變量值填寫JDK的安裝路徑,在這里就填寫“C:\Program Files\Java\jdk1.6.0_26”了。


          2. 在系統變量里點擊新建變量名填寫CLASSPATH,變量值填寫“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”。注意不要忘記前面的點和中間的分號。


          3. 在系統變量里找到Path變量,這是系統自帶的,不用新建。雙擊Path,由于原來的變量值已經存在,故應在已有的變量后加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”。注意前面的分號。


          4. 至此,應有的環境變量已經配置完畢。驗證的方法:在運行框中輸入cmd命令,回車后輸入java,按回車出現以下畫面


          5. 5

            輸入javac,按回車出現以下畫面,則表示設置成功。



          posted @ 2015-05-12 10:52 朱杰兵 閱讀(113) | 評論 (0)編輯 收藏

          左外連接包含left join左表所有行,如果左表中某行在右表沒有匹配,則結果中對應行右表的部分全部為空(NULL).

          注:此時我們不能說結果的行數等于左表數據的行數。當然此處查詢結果的行數等于左表數據的行數,因為左右兩表此時為一對一關系。

          **********************************************************************************
          下面介紹一下當兩表為多對多的時候我們該如何建表以及些SQL語句。

          新建三表:

          表A:  student 截圖如下:

          SQL多表連接查詢

          表B:  course 截圖如下:

          SQL多表連接查詢

          表C:  student_course 截圖如下:

          SQL多表連接查詢

          一個學生可以選擇多門課程,一門課程可以被多個學生選擇,因此學生表student和課程表course之間是多對多的關系。

          當兩表為多對多關系的時候,我們需要建立一個中間表student_course,中間表至少要有兩表的主鍵,當然還可以有別的內容。

          SQL 語句:select s.Name,C.Cname from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno

          執行結果:

          SQL多表連接查詢

          此條SQL執行的結果是學生選課的情況。

          posted @ 2015-05-08 15:27 朱杰兵 閱讀(114) | 評論 (0)編輯 收藏

          boolean  1 字節
          char 2 字節

          整數類型 byte 1 字節
          short 2 字節
          int 4 字節
          long 8 字節
          浮點類型
          float 4 字節
          double 8 字節


          java中,只要是字符,不管是數字還是英文還是漢字,都占兩個字節,都是一個char。

          java一個漢字占幾個字節


          在java中占兩個字節,用char類型表示,因為是Unicode編碼,
          ps utf-8 的漢字占3個字節 gbk 是兩個
          看編碼方式:utf-8碼的中文都是3字節的,而 gbk/gbk18030 是2字節的。



          posted @ 2015-05-05 16:35 朱杰兵 閱讀(99) | 評論 (0)編輯 收藏

          1.使用(String)轉換,要注意類型不一致時會報類型轉換異常CalssCastException,                  如果object是null的話,返回的也是null .    ((String)object == null)   ----->true
          2.使用.toString(),要注意object為null的時候,會報空指針異常
          3.String.valueOf(),源碼是
          public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
          如果object為null的時候,返回"null"字符串,卻避免了拋出空指針異常

          posted @ 2015-04-28 16:19 朱杰兵 閱讀(143) | 評論 (0)編輯 收藏

          package cn.mysteel.wms.user.web;

          import java.util.ArrayList;
          import java.util.HashSet;
          import java.util.LinkedHashSet;
          import java.util.List;
          import java.util.Set;

          public class Test
          {

              public static void main(String[] args)
              {
                  List<String> list = new ArrayList<String>();
                  list.add("朱杰兵");
                  list.add("zhujiebing");
                  list.add("zhujiebing");
                  list.add("22222");
                  list.add("22222");
                  
                  List<String> newList = new ArrayList<String>();
                  
                  //第一種方式用set去重
                  /*Set<String> set = new HashSet<String>();
                  
                  for(String str : list)
                  {
                      if(set.add(str))
                      {
                          newList.add(str);
                      }
                  }
                  
                  */
                  
                  
                  //第二種方式用linkedhashset去重
                  newList = new ArrayList<String>(new LinkedHashSet<String>(list));
                  
                  for(String str2 : newList)
                  {
                      System.out.println(str2);
                  }
              }
          }

          posted @ 2015-04-16 15:49 朱杰兵 閱讀(138) | 評論 (0)編輯 收藏

          List<UserOutPlanItem> itemList = info.getItemList();//需要去重匯總的list
                  
                  List<UserOutAuditDTO> summary = new ArrayList<UserOutAuditDTO>();;
                 
                   //匯總到的map value為總數量和總重量
                  Map<String, String> map = new HashMap<String, String>();

                  if (ObjectUtils.notEmpty(itemList))
                  {
                      for (UserOutPlanItem item : itemList)
                      {
                          //這六個字段相同則匯成一條,并且把重量和數量累加
                          String key = item.getBreedName()+"_"+item.getSpecName()+"_"+
                                  item.getMaterialName()+"_"+item.getFactoryName()+"_"+
                                  item.getNumUtil()+"_"+item.getWeightUtil();

                          String num_weight = map.get(key);
                          //當鍵不存在的時候匯一條
                          if (StringUtils.isNull(num_weight))
                          {
                              map.put(key, item.getNum()+"_"+item.getWeight());
                          }
                          //當key已經存在了,則累加
                          else
                          {
                              String[] arr = num_weight.split("_");
                              String thisNum = MoneyCalculateUtils.add(arr[0], item.getNum(), 0);
                              String thisWeight = MoneyCalculateUtils.add(arr[1], item.getWeight(), 4);
                              map.put(key, thisNum + "_" + thisWeight);
                          }
                      }
                  }

                  //重新解析map,把數據封裝到summary
                  if (ObjectUtils.notEmpty(map))
                  {
                      Set<String> ketSet = map.keySet();
                      for (String str : ketSet)
                      {
                          String arr[] = str.split("_");
                          UserOutAuditDTO dto = new UserOutAuditDTO();
                          dto.setBreedName(arr[0]);
                          dto.setSpec(arr[1]);
                          dto.setMaterial(arr[2]);
                          dto.setFactory(arr[3]);
                          dto.setNumUtil(arr[4]);
                          dto.setWeightUtil(arr[5]);
                          
                          String num_weight = map.get(str);
                          String arr2[] = num_weight.split("_");
                          dto.setSumNum(arr2[0]);
                          dto.setSumWeight(arr2[1]);
                          summary.add(dto);
                      }
                  }

          posted @ 2015-04-16 15:22 朱杰兵 閱讀(3078) | 評論 (0)編輯 收藏

          Servlet用來控制流程跳轉

          posted @ 2015-04-16 10:09 朱杰兵 閱讀(134) | 評論 (0)編輯 收藏

          1.匹配一位小數 <input type="text" onkeyup="value=value.replace(/[^\d\.]/g, '').replace(/(\.\d).*/g, '$1')" value=""/>
          在第二個replace 用 \d{2}  小數點后兩位

          2.匹配整數
          .replace(/[^\d\\]/g,'');


          posted @ 2015-04-13 21:22 朱杰兵 閱讀(712) | 評論 (0)編輯 收藏

          1.SSL依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。
          2.
          采用https的服務器必 須從CA (Certificate Authority)申請一個用于證明服務器用途類型的證書。該證書只有用于對應的服務器的時候,客戶端才信任此主機。所以所有的銀行系統網站,關鍵部分 應用都是https 的。客戶通過信任該證書,從而信任了該主機。其實這樣做效率很低,但是銀行更側重安全。



          1. 一般意義上的https,就是服務器有一個證書。
          a) 主要目的是保證服務器就是他聲稱的服務器,這個跟第一點一樣。
          b)服務端客戶端之間的所有通訊,都是加密的。
          i. 具體講,是客戶端產生一個對稱的密鑰,通過服務器的證書來交換密鑰,即一般意義上的握手過程。
          ii. 接下來所有的信息往來就都是加密的。第三方即使截獲,也沒有任何意義,因為他沒有密鑰,當然篡改也就沒有什么意義了。
          2. 少許對客戶端有要求的情況下,會要求客戶端也必須有一個證書。
          a) 這里客戶端證書,其實就類似表示個人信息的時候,除了用戶名/密碼,還有一個CA 認證過的身份。因為個人證書一般來說是別人無法模擬的,所有這樣能夠更深的確認自己的身份。
          b) 目前大多數個人銀行的專業版是這種做法,具體證書可能是拿U盤(即U盾)作為一個備份的載體。

          應用于安全敏感通訊  例如交易支付

          posted @ 2015-03-26 08:53 朱杰兵 閱讀(236) | 評論 (0)編輯 收藏

          僅列出標題
          共14頁: First 上一頁 6 7 8 9 10 11 12 13 14 下一頁 
          主站蜘蛛池模板: 闽清县| 祁东县| 美姑县| 大连市| 宁武县| 遂溪县| 藁城市| 黑山县| 洱源县| 河西区| 德清县| 横峰县| 平阴县| 汤原县| 伊金霍洛旗| 明光市| 平乡县| 镶黄旗| 荃湾区| 潼关县| 石阡县| 诸城市| 玉门市| 罗山县| 彭水| 通江县| 合肥市| 海口市| 张家口市| 察隅县| 开化县| 巫溪县| 枣强县| 黄石市| 奇台县| 哈巴河县| 遂溪县| 三穗县| 门源| 申扎县| 托克逊县|