ice world

          There is nothing too difficult if you put your heart into it.
          posts - 104, comments - 103, trackbacks - 0, articles - 0

          以前都是用SSH框架,spring借助的是Tomcat的dbcp數(shù)據(jù)源,最近做網(wǎng)站也沒(méi)用什么框架,直接Sservlet+JSP,依舊用的 Tomcat的dbcp做數(shù)據(jù)源,經(jīng)常發(fā)現(xiàn)網(wǎng)絡(luò)不好時(shí)連接就獲取不到了,那是因?yàn)槌刈又械倪B接都已經(jīng)無(wú)效了,Tomcat數(shù)據(jù)源的自動(dòng)重連貌似配置較為復(fù)雜,很多人建議用proxool做數(shù)據(jù)源,下面是proxool的配置方法:

          1.下載proxool,自己到網(wǎng)站http://proxool.sourceforge.net/download.html隨便下載一個(gè)版本,解壓后進(jìn)入目錄lib,會(huì)得到兩個(gè)jar文件,分別為proxool-0.9.1.jar(版本不同可能名稱有所不同)和proxool-cglib.jar,將這兩個(gè)jar文件拷貝到項(xiàng)目的WEB-INF/lib下

          2.配置web.xml,需要配置proxool的Servlet,如下:

          <servlet>
              
          <servlet-name>proxoolServletConfigurator</servlet-name>
              
          <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator
              
          </servlet-class>
              
          <init-param>
                  
          <param-name>xmlFile</param-name>
                  
          <param-value>WEB-INF/proxool.xml</param-value>
              
          </init-param>
              
          <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet>
              
          <servlet-name>proxooladmin</servlet-name>
              
          <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet
              
          </servlet-class>
          </servlet>
          <servlet-mapping>
              
          <servlet-name>proxooladmin</servlet-name>
              
          <url-pattern>/proxooladmin</url-pattern>
          </servlet-mapping>


          3.創(chuàng)建proxool.xml文件,將此文件放在與web.xml同級(jí)目錄下,即WEB-INF下

          <?xml version="1.0" encoding="UTF-8"?>
          <something-else-entirely>
              
          <proxool>
                  
          <alias>testDB</alias>
                  
          <driver-url>jdbc:oracle:thin:@192.168.1.229:1521:orcl</driver-url>
                  
          <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
                  
          <driver-properties>
                      
          <property name="user" value="test_user" />
                      
          <property name="password" value="password" />
                  
          </driver-properties>
                  
          <maximum-connection-count>10</maximum-connection-count>
                  
          <minimum-connection-count>5</minimum-connection-count>
                  
          <prototype-count>5</prototype-count>
                  
          <test-before-use>true</test-before-use>
                  
          <house-keeping-sleep-time>180000</house-keeping-sleep-time>
                  
          <house-keeping-test-sql>select CURRENT_DATE from dual</house-keeping-test-sql>
              
          </proxool>
          </something-else-entirely>

          上面的<test-before-use>true</test-before-use>據(jù)說(shuō)是用來(lái)自動(dòng)重連的,也就是在網(wǎng)絡(luò)錯(cuò)誤或數(shù)據(jù)庫(kù)重啟等等原因?qū)е屡c數(shù)據(jù)庫(kù)斷開(kāi),每次獲取連接前都會(huì)檢查,如果現(xiàn)在池子中的連接已經(jīng)無(wú)效將會(huì)重新創(chuàng)建


          4.在java中獲取數(shù)據(jù)庫(kù)連接的代碼

          Connection con = DriverManager.getConnection("proxool.testDB");


          posted @ 2011-04-16 14:11 IceWee 閱讀(397) | 評(píng)論 (0)編輯 收藏

          這些日子一直在使用visio畫(huà)軟件界面,今個(gè)是禮拜一,早早來(lái)到公司就開(kāi)始畫(huà),當(dāng)選中某個(gè)元素/對(duì)象后,按“方向鍵”進(jìn)行微調(diào)時(shí)竟然不管用,伴隨的是滾動(dòng)條來(lái)回滾動(dòng),上網(wǎng)一查,原來(lái)是不小心按到了“scroll num lock”鍵,再按一次,果然正常了。

          posted @ 2011-04-16 14:05 IceWee 閱讀(2667) | 評(píng)論 (1)編輯 收藏

          今天遇到了一個(gè)很頭疼的問(wèn)題,整整找了一個(gè)下午解決方案,原本就是一個(gè)table里有兩行,可第一行的內(nèi)容就是和底邊有很大的空間,因?yàn)橛玫搅吮砀窨丶瑑?nèi)容都是動(dòng)態(tài)生成的,最后查看源代碼,是控件自動(dòng)增加了一個(gè)form標(biāo)簽,問(wèn)題就出現(xiàn)在這個(gè)form標(biāo)簽上。

          其實(shí)我有遇到過(guò)form會(huì)占空間的情況,但一直沒(méi)解決方案,今天終于找到了兩種:

          第一種,通過(guò)HTML寫(xiě)死的方式,不要將form標(biāo)簽方到<tr><td>的里面或者外面,應(yīng)該這樣<tr><form><td>

          第二種,通過(guò)CSS的方式,在form標(biāo)簽里增加樣式:<form style="margin: 0; padding: 0;">

          我是用第二種方式解決的,比較靠譜一些

          posted @ 2011-04-16 14:03 IceWee 閱讀(260) | 評(píng)論 (0)編輯 收藏

          安裝Adobe Reader的時(shí)候拋出了這個(gè)提示,導(dǎo)致安裝失??!

          首先,我是在虛擬機(jī)上安裝AR,虛擬機(jī)上只有一個(gè)磁盤(pán)C,安裝的番茄花園SP3系統(tǒng)。

          解決方法:

          開(kāi)始-運(yùn)行,輸入regedit后回車,進(jìn)入注冊(cè)表編輯器

          編輯-查找,輸入“D:\”,會(huì)發(fā)現(xiàn)有很多鍵值是指向D盤(pán)的,而當(dāng)前系統(tǒng)只有C盤(pán),自然找不到,將所有的D修改成C后就可以了。

          posted @ 2011-04-16 14:02 IceWee 閱讀(222) | 評(píng)論 (0)編輯 收藏

          最近項(xiàng)目中需要用到j(luò)freechart,以前只是簡(jiǎn)單的玩玩而已,一直沒(méi)有真正的應(yīng)用到實(shí)際項(xiàng)目中,今天在畫(huà)圖的時(shí)候可把自己折磨慘了,就一個(gè)小小的tooltip死活不出來(lái)。


          我用的Spring + Struts,有很多人用jfreechart都是寫(xiě)的Servlet,其實(shí)用Struts是一樣的。

          我起初在Struts的Action中使用org.jfree.chart.ChartUtilities。writeChartAsPNG(java.io.OutputStream out, JFreeChart chart, int width, int height) 方法,將生成的JFreeChart對(duì)象寫(xiě)到輸出流中,return自然是null,這樣做界面可以顯示Action寫(xiě)過(guò)來(lái)的圖片,但是沒(méi)有 tooltip的出現(xiàn)。后來(lái)我發(fā)現(xiàn)很多人都不是直接把圖片寫(xiě)到流中的,而是在JSP頁(yè)面通過(guò)<img>標(biāo)簽來(lái)顯示圖片的。于是我也使用了主流方式顯示圖片,使用chartName = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);將圖片文件名設(shè)置請(qǐng)求屬性發(fā)給JSP頁(yè)面,頁(yè)面通過(guò)圖片標(biāo)簽顯示圖片,結(jié)果圖片依舊顯示正常,但是tooltip還是沒(méi)有出來(lái),由于剛剛用這東西,一點(diǎn)都不了解,于是開(kāi)以往項(xiàng)目中是如何寫(xiě)的,我發(fā)現(xiàn)別人的代碼中有這樣一行:ChartUtilities.writeImageMap(pw, chartName, info, false);這是將圖片地圖寫(xiě)到流中,而且頁(yè)面的圖片標(biāo)簽中也多了個(gè)usermap屬性,我仿佛有點(diǎn)清醒了,于是效仿著做了一下,tooltip果真出現(xiàn)了。

          JSP代碼:

          <%    
                  JFreeChart chart 
          = (JFreeChart)request.getAttribute("chart");    
                  
          String chartName = Common.generateChart(chart, session, new PrintWriter(out), 760410);
          %>


          Common的generateChart方法就是放回圖片的文件名,并且將圖片地圖寫(xiě)入到當(dāng)前的流中。

          Java代碼:

          public static String generateChart(JFreeChart chart, HttpSession session,
                      PrintWriter pw, 
          int width, int height) {
                  String chartName 
          = "";
                  
          try {
                      ChartRenderingInfo info 
          = new ChartRenderingInfo(
                              
          new StandardEntityCollection());
                      chartName 
          = ServletUtilities.saveChartAsPNG(chart, width, height,
                              info, session);
                      
          /** 將圖片地圖寫(xiě)入PW中 */
                      ChartUtilities.writeImageMap(pw, chartName, info, 
          false);
                      pw.flush();
                  }
           catch (Exception e) {
                      e.printStackTrace();
                  }

                  
          return chartName;
              }


          起初我并沒(méi)有使用Common這個(gè)方法,而是直接將這個(gè)方法中的代碼寫(xiě)在了Struts的Action中,發(fā)現(xiàn)無(wú)效,而且在pw.flush()一行出現(xiàn)了異常,流這里太爛!哎!提示刷新后就不能再return了。于是去掉這行后圖片正常顯示,但沒(méi)有tooltip。我懷疑是Struts中用 response獲取的PrintWriter并不是返回到JSP中用out封裝的PrintWriter,根本就不是,還懷疑什么,這不是廢話嘛!所以在當(dāng)前流中并沒(méi)有圖片地圖,自然不顯示tooltip了。

          顯示圖片的IMG標(biāo)簽

          <img src="<%=request.getContextPath()%>/<%=chartName%>" height="100%" border=0 usemap="#<%=chartName%>" >



          posted @ 2011-04-16 13:59 IceWee 閱讀(938) | 評(píng)論 (0)編輯 收藏

          最近項(xiàng)目中使用了window.open()函數(shù)打開(kāi)新窗口,并且在新的窗口中進(jìn)行一系列操作,當(dāng)然要涉及到表單的提交與返回,頁(yè)面跟隨刷新,我的機(jī)器上測(cè)試通過(guò),我用IE7。但是發(fā)布到服務(wù)器上發(fā)現(xiàn),彈出的窗口中頁(yè)面不刷新,也就是表單沒(méi)有提交,不!表單已經(jīng)提交了,而是頁(yè)面沒(méi)有返回,頁(yè)面只是閃了一下,頁(yè)面還是那個(gè)頁(yè)面。這肯定又是IE版本導(dǎo)致的問(wèn)題。看似沒(méi)什么代碼與IE版本關(guān)系那么大???!最后發(fā)現(xiàn),以前程序里連接觸發(fā)JS函數(shù) href里寫(xiě)的都是“#”,而我寫(xiě)的則是“javascript:void(0)”,會(huì)不會(huì)是這里的問(wèn)題呢!于是我將“#”替換了 “javascript:void(0)”,OK!萬(wàn)事大吉!果然是這個(gè)小東西在搗鬼!

          IE6:<a href="#" onclick="func()">xxx</a>

          IE7:<a href="#" onclick="func()">xxx</a> 或者 <a href="javascript:void(0)" onclick="func()">xxx</a>

          posted @ 2011-04-16 13:50 IceWee 閱讀(338) | 評(píng)論 (0)編輯 收藏

               摘要: 仿照騰訊的Token寫(xiě)的驗(yàn)證碼生成程序Java類代碼: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package icewee.image;import java.awt.BasicStroke;import ja...  閱讀全文

          posted @ 2011-04-16 13:49 IceWee 閱讀(320) | 評(píng)論 (0)編輯 收藏

          今天下午公司內(nèi)部搞了一個(gè)小調(diào)查,每名員工都要將自己填好的文檔上傳,其中就遇到了這個(gè)方框打勾的問(wèn)題,需要在復(fù)選中打勾以表示自己的選擇,這下可給廣大同志們出了個(gè)小題兒,列出方案:

          完美指數(shù):★★★★★

          方案3,使用word的高級(jí)功能域,一般人沒(méi)用過(guò)吧!

          域代碼:eq \o\ac(□,√),使用方法:工具欄-插入-域,將代碼拷貝到“{}”中后按一下F9就可以看到效果了。

          完美指數(shù):★★★☆☆

          方案2,用畫(huà)圖軟件將兩個(gè)符號(hào)疊加,美中不足的是變成了圖片而不再是符號(hào)。

          完美指數(shù):★★☆☆☆

          方案1,先添加符號(hào)“√”,選中對(duì)號(hào)后點(diǎn)擊word工具欄上的字符邊框,就是那個(gè)A

          posted @ 2011-04-16 13:40 IceWee 閱讀(4748) | 評(píng)論 (0)編輯 收藏

          最近有個(gè)小項(xiàng)目中自己負(fù)責(zé)word報(bào)表的生成,開(kāi)發(fā)語(yǔ)言是C#,我是做JAVA的,臨時(shí)用一下而已。發(fā)現(xiàn)微軟的在線MSDN是個(gè)好東西,很強(qiáng)大,基本需要的東西都在里面可以找到,比如word的創(chuàng)建、打開(kāi)、關(guān)閉等等一系列的操作DEMO代碼。

          我主要是將現(xiàn)有的模板填入數(shù)據(jù)保存文檔即可。主題是TABLE填值,檢索TABLE主要是通過(guò)下標(biāo),如:

          WordDoc.Tables[6]

          其中WordDoc的類型是Word.Document,就是當(dāng)前操作的word文檔,上面的代碼是獲取當(dāng)前文檔中的第六個(gè)表格,這里要注意一下, 我們慣性會(huì)認(rèn)為是第七個(gè)表格,但這就是微軟的不同,沒(méi)有采用數(shù)組索引的方式,如果當(dāng)初數(shù)組也這么設(shè)計(jì),下標(biāo)從1開(kāi)始,我們學(xué)習(xí)的時(shí)候不知道省多少事。

          開(kāi)發(fā)過(guò)程中遇到了一個(gè)小難題就是合并單元格(縱向),沒(méi)有設(shè)計(jì)橫向的合并,現(xiàn)將合并的代碼貼出來(lái)備用:

          /// <summary>
          /// 縱向單元格合并 
          /// 說(shuō)明:如合并了第一行第一列和第二行第一列兩個(gè)單元格,則單元格cell(2, 1)已經(jīng)不存在,繼續(xù)操作會(huì)有異常, 
          /// 只有通過(guò)cell(1, 1)來(lái)獲取合并后的單元格 
          /// /<summary>
          /// <param name="table"></param>
          /// <param name="startRowIndex"></param>
          /// <param name="columnIndex"></param>

          private static void verticalCellMerge(Word.Table table, int startRowIndex, int columnIndex)
          {    
              
          string previousText = table.Cell(startRowIndex++, columnIndex).Range.Text;    // 保存對(duì)比文字    
              int previousRowIndex = startRowIndex - 1;    // 因剛已經(jīng)+1了,所以再減回去    
              for (int i = startRowIndex; i <= table.Rows.Count; ++i) // 遍歷所有行的columnIndex列,發(fā)現(xiàn)相同的合并,從起始行的下一行開(kāi)始對(duì)比    
              {        
                  
          string currentText = table.Cell(i, columnIndex).Range.Text;        
                  
          if (previousText.Equals(currentText))        
                  
          {            
                      table.Cell(previousRowIndex, columnIndex).Merge(table.Cell(i, columnIndex)); 
          // 合并先前單元格和當(dāng)前單元格            
                      table.Cell(previousRowIndex, columnIndex).Range.Text = currentText;    // 因?yàn)楹喜⒑蟛](méi)有將單元格內(nèi)容去除,需要手動(dòng)修改            
                      table.Cell(previousRowIndex, columnIndex).Select();            
                      WordApp.Selection.ParagraphFormat.Alignment 
          = WdParagraphAlignment.wdAlignParagraphCenter;    // 水平居中顯示            
                      table.Cell(previousRowIndex, columnIndex).VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; // 垂直居中        
                  }
                  
                  
          else        
                  
          {            
                      previousText 
          = currentText; // 將對(duì)比文字替換為當(dāng)前的內(nèi)容            
                      previousRowIndex = i;   // 檢索到不同的內(nèi)容,將當(dāng)前行下標(biāo)置為先前行下標(biāo),用于合并        
                  }
              
              }

          }


          /// <summary>
          /// 橫向單元格合并
          /// 注意:在合并單元格后必須將縱列數(shù)減去1
          /// 如第一行第一列和第一行第二列合并后,原第一行第三列將變成第一行第二列,這就是在合并后i不加1的原因
          /// </summary>
          /// <param name="WordApp"></param>
          /// <param name="table"></param>
          /// <param name="startColumnIndex"></param>
          /// <param name="rowIndex"></param>

          private static void horizontalCellMerge(Word.Application WordApp, Word.Table table, int startColumnIndex, int rowIndex)
          {    
              
          string previousText = table.Cell(rowIndex, startColumnIndex).Range.Text;    // 保存對(duì)比文字    
              int previousColumnIndex = startColumnIndex++;    // 保存先前對(duì)比列下標(biāo)    
              int colCount = table.Columns.Count;    
              
          for (int i = startColumnIndex; i <= colCount;) // 遍歷所有行的columnIndex列,發(fā)現(xiàn)相同的合并,從起始行的下一行開(kāi)始對(duì)比    
              {        
                  
          string currentText = table.Cell(rowIndex, i).Range.Text;        
                  
          if (previousText.Equals(currentText))        
                  
          {            
                      table.Cell(rowIndex, previousColumnIndex).Merge(table.Cell(rowIndex, i)); 
          // 合并先前單元格和當(dāng)前單元格            
                      table.Cell(rowIndex, previousColumnIndex).Range.Text = currentText;    // 因?yàn)楹喜⒑蟛](méi)有將單元格內(nèi)容去除,需要手動(dòng)修改            
                      table.Cell(rowIndex, previousColumnIndex).Select();            
                      WordApp.Selection.ParagraphFormat.Alignment 
          = WdParagraphAlignment.wdAlignParagraphCenter;    // 水平居中顯示            
                      table.Cell(rowIndex, previousColumnIndex).VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; // 垂直居中            
                      --colCount;        
                  }
                  
                  
          else        
                  
          {            
                      previousText 
          = currentText; // 將對(duì)比文字替換為當(dāng)前的內(nèi)容            
                      previousColumnIndex = i++;   // 檢索到不同的內(nèi)容,將當(dāng)前行下標(biāo)置為先前行下標(biāo),用于合并        
                  }
              
              }

          }

          方法注釋已經(jīng)很詳細(xì)就不再贅述。

          最后遇到的問(wèn)題是無(wú)格式的段落檢索,因?yàn)樵谏蓤?bào)告的時(shí)候需要在某些段落后填寫(xiě)測(cè)試的結(jié)論,這下又把我難住了,最終終于發(fā)現(xiàn)了bookmark這個(gè)東東,起始我對(duì)word并不熟悉,都不知道它有書(shū)簽的功能。順便就愛(ài)你個(gè)檢索書(shū)簽的方法貼出來(lái):

          /// <summary>
          /// 在整個(gè)文檔中根據(jù)書(shū)簽名檢索書(shū)簽對(duì)象
          /// </summary>
          /// <param name="name"></param>

          private static Word.Bookmark getBookmarkByName(string name)  
          {      
              
          foreach (Word.Bookmark bm in WordDoc.Bookmarks)      
              
          {          
                  
          if (bm.Name.Equals(name))              
                      
          return bm;          
                  }
                    
                  
          return null;      
              }
            


          例:

          Word.Bookmark bm = getBookmarkByName(bookmarkName);  
          bm.Range.Text 
          = "你好"// 將檢索到書(shū)簽的內(nèi)容替換為“你好”

          這就是這次用C#做word報(bào)表的全部問(wèn)題,貌似都是小問(wèn)題。

          最后需要看具體的word操作demo代碼請(qǐng)?jiān)L問(wèn)MSDN,貼個(gè)網(wǎng)址:

          http://msdn.microsoft.com/zh-cn/library/78whx7s6(VS.80).aspx

          posted @ 2011-04-16 13:38 IceWee 閱讀(1193) | 評(píng)論 (0)編輯 收藏

          今天無(wú)聊,想起了《大鵬嘚吧嘚》,于是用我的藍(lán)牙耳機(jī)連上筆記本,戴上耳機(jī)后發(fā)現(xiàn)沒(méi)有聲音,但是看本地磁盤(pán)的視頻或聽(tīng)歌都有聲音的,難道我的藍(lán)牙耳機(jī)不支持在線視頻?于是摘掉藍(lán)牙,用外放,竟然也沒(méi)有聲音?。?!暈了!??!百度之。。。得果:

          開(kāi)始->運(yùn)行->鍵入 regedit 找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32 新建一個(gè)字符串值,名為"wavemapper" 值為:“msacm32.drv“.

          posted @ 2011-04-16 13:30 IceWee 閱讀(263) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共11頁(yè): First 上一頁(yè) 3 4 5 6 7 8 9 10 11 下一頁(yè) 
          主站蜘蛛池模板: 桑植县| 中卫市| 金门县| 邻水| 五华县| 双柏县| 连城县| 容城县| 措勤县| 泸州市| 无极县| 梧州市| 屯门区| 江川县| 黄浦区| 深圳市| 宝鸡市| 赞皇县| 财经| 开远市| 六枝特区| 深圳市| 扶余县| 安龙县| 延川县| 安徽省| 福泉市| 武城县| 赣州市| 修文县| 宁德市| 黄陵县| 灌云县| 仁怀市| 西盟| 临武县| 雅安市| 贵德县| 牙克石市| 永川市| 维西|