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数据源,最近做网站也没用什么框架,直接Sservlet+JSP,依旧用的 Tomcat的dbcp做数据源,经常发现网络不好时连接就获取不到了,那是因为池子中的连接都已经无效了,Tomcat数据源的自动重连貌似配置较为复杂,很多人建议用proxool做数据源,下面是proxool的配置方法:

1.下载proxool,自己到网站http://proxool.sourceforge.net/download.html随便下载一个版本,解压后进入目录lib,会得到两个jar文件,分别为proxool-0.9.1.jar(版本不同可能名称有所不同)和proxool-cglib.jar,将这两个jar文件拷贝到项目的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.创建proxool.xml文件,将此文件放在与web.xml同级目录下,即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>据说是用来自动重连的,也就是在网络错误或数据库重启等等原因导致与数据库断开,每次获取连接前都会检查,如果现在池子中的连接已经无效将会重新创建


4.在java中获取数据库连接的代码

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


posted @ 2011-04-16 14:11 IceWee 阅读(381) | 评论 (0)编辑 收藏

这些日子一直在使用visio画软件界面,今个是礼拜一,早早来到公司就开始画,当选中某个元素/对象后,按“方向键”进行微调时竟然不管用,伴随的是滚动条来回滚动,上网一查,原来是不小心按到了“scroll num lock”键,再按一次,果然正常了。

posted @ 2011-04-16 14:05 IceWee 阅读(2650) | 评论 (1)编辑 收藏

今天遇到了一个很头疼的问题,整整找了一个下午解决方案,原本就是一个table里有两行,可第一行的内容就是和底边有很大的空间,因为用到了表格控件,内容都是动态生成的,最后查看源代码,是控件自动增加了一个form标签,问题就出现在这个form标签上。

其实我有遇到过form会占空间的情况,但一直没解决方案,今天终于找到了两种:

第一种,通过HTML写死的方式,不要将form标签方到<tr><td>的里面或者外面,应该这样<tr><form><td>

第二种,通过CSS的方式,在form标签里增加样式:<form style="margin: 0; padding: 0;">

我是用第二种方式解决的,比较靠谱一些

posted @ 2011-04-16 14:03 IceWee 阅读(244) | 评论 (0)编辑 收藏

安装Adobe Reader的时候抛出了这个提示,导致安装失败!

首先,我是在虚拟机上安装AR,虚拟机上只有一个磁盘C,安装的番茄花园SP3系统。

解决方法:

开始-运行,输入regedit后回车,进入注册表编辑器

编辑-查找,输入“D:\”,会发现有很多键值是指向D盘的,而当前系统只有C盘,自然找不到,将所有的D修改成C后就可以了。

posted @ 2011-04-16 14:02 IceWee 阅读(211) | 评论 (0)编辑 收藏

最近项目中需要用到jfreechart,以前只是简单的玩玩而已,一直没有真正的应用到实际项目中,今天在画图的时候可把自己折磨惨了,就一个小小的tooltip死活不出来。


我用的Spring + Struts,有很多人用jfreechart都是写的Servlet,其实用Struts是一样的。

我起初在Struts的Action中使用org.jfree.chart.ChartUtilities。writeChartAsPNG(java.io.OutputStream out, JFreeChart chart, int width, int height) 方法,将生成的JFreeChart对象写到输出流中,return自然是null,这样做界面可以显示Action写过来的图片,但是没有 tooltip的出现。后来我发现很多人都不是直接把图片写到流中的,而是在JSP页面通过<img>标签来显示图片的。于是我也使用了主流方式显示图片,使用chartName = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);将图片文件名设置请求属性发给JSP页面,页面通过图片标签显示图片,结果图片依旧显示正常,但是tooltip还是没有出来,由于刚刚用这东西,一点都不了解,于是开以往项目中是如何写的,我发现别人的代码中有这样一行:ChartUtilities.writeImageMap(pw, chartName, info, false);这是将图片地图写到流中,而且页面的图片标签中也多了个usermap属性,我仿佛有点清醒了,于是效仿着做了一下,tooltip果真出现了。

JSP代码:

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


Common的generateChart方法就是放回图片的文件名,并且将图片地图写入到当前的流中。

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);
            
/** 将图片地图写入PW中 */
            ChartUtilities.writeImageMap(pw, chartName, info, 
false);
            pw.flush();
        }
 catch (Exception e) {
            e.printStackTrace();
        }

        
return chartName;
    }


起初我并没有使用Common这个方法,而是直接将这个方法中的代码写在了Struts的Action中,发现无效,而且在pw.flush()一行出现了异常,流这里太烂!哎!提示刷新后就不能再return了。于是去掉这行后图片正常显示,但没有tooltip。我怀疑是Struts中用 response获取的PrintWriter并不是返回到JSP中用out封装的PrintWriter,根本就不是,还怀疑什么,这不是废话嘛!所以在当前流中并没有图片地图,自然不显示tooltip了。

显示图片的IMG标签

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



posted @ 2011-04-16 13:59 IceWee 阅读(922) | 评论 (0)编辑 收藏

最近项目中使用了window.open()函数打开新窗口,并且在新的窗口中进行一系列操作,当然要涉及到表单的提交与返回,页面跟随刷新,我的机器上测试通过,我用IE7。但是发布到服务器上发现,弹出的窗口中页面不刷新,也就是表单没有提交,不!表单已经提交了,而是页面没有返回,页面只是闪了一下,页面还是那个页面。这肯定又是IE版本导致的问题。看似没什么代码与IE版本关系那么大啊?!最后发现,以前程序里连接触发JS函数 href里写的都是“#”,而我写的则是“javascript:void(0)”,会不会是这里的问题呢!于是我将“#”替换了 “javascript:void(0)”,OK!万事大吉!果然是这个小东西在捣鬼!

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 阅读(325) | 评论 (0)编辑 收藏

     摘要: 仿照腾讯的Token写的验证码生成程序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 阅读(305) | 评论 (0)编辑 收藏

今天下午公司内部搞了一个小调查,每名员工都要将自己填好的文档上传,其中就遇到了这个方框打勾的问题,需要在复选中打勾以表示自己的选择,这下可给广大同志们出了个小题儿,列出方案:

完美指数:★★★★★

方案3,使用word的高级功能域,一般人没用过吧!

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

完美指数:★★★☆☆

方案2,用画图软件将两个符号叠加,美中不足的是变成了图片而不再是符号。

完美指数:★★☆☆☆

方案1,先添加符号“√”,选中对号后点击word工具栏上的字符边框,就是那个A

posted @ 2011-04-16 13:40 IceWee 阅读(4730) | 评论 (0)编辑 收藏

最近有个小项目中自己负责word报表的生成,开发语言是C#,我是做JAVA的,临时用一下而已。发现微软的在线MSDN是个好东西,很强大,基本需要的东西都在里面可以找到,比如word的创建、打开、关闭等等一系列的操作DEMO代码。

我主要是将现有的模板填入数据保存文档即可。主题是TABLE填值,检索TABLE主要是通过下标,如:

WordDoc.Tables[6]

其中WordDoc的类型是Word.Document,就是当前操作的word文档,上面的代码是获取当前文档中的第六个表格,这里要注意一下, 我们惯性会认为是第七个表格,但这就是微软的不同,没有采用数组索引的方式,如果当初数组也这么设计,下标从1开始,我们学习的时候不知道省多少事。

开发过程中遇到了一个小难题就是合并单元格(纵向),没有设计横向的合并,现将合并的代码贴出来备用:

/// <summary>
/// 纵向单元格合并 
/// 说明:如合并了第一行第一列和第二行第一列两个单元格,则单元格cell(2, 1)已经不存在,继续操作会有异常, 
/// 只有通过cell(1, 1)来获取合并后的单元格 
/// /<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;    // 保存对比文字    
    int previousRowIndex = startRowIndex - 1;    // 因刚已经+1了,所以再减回去    
    for (int i = startRowIndex; i <= table.Rows.Count; ++i) // 遍历所有行的columnIndex列,发现相同的合并,从起始行的下一行开始对比    
    {        
        
string currentText = table.Cell(i, columnIndex).Range.Text;        
        
if (previousText.Equals(currentText))        
        
{            
            table.Cell(previousRowIndex, columnIndex).Merge(table.Cell(i, columnIndex)); 
// 合并先前单元格和当前单元格            
            table.Cell(previousRowIndex, columnIndex).Range.Text = currentText;    // 因为合并后并没有将单元格内容去除,需要手动修改            
            table.Cell(previousRowIndex, columnIndex).Select();            
            WordApp.Selection.ParagraphFormat.Alignment 
= WdParagraphAlignment.wdAlignParagraphCenter;    // 水平居中显示            
            table.Cell(previousRowIndex, columnIndex).VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; // 垂直居中        
        }
        
        
else        
        
{            
            previousText 
= currentText; // 将对比文字替换为当前的内容            
            previousRowIndex = i;   // 检索到不同的内容,将当前行下标置为先前行下标,用于合并        
        }
    
    }

}


/// <summary>
/// 横向单元格合并
/// 注意:在合并单元格后必须将纵列数减去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;    // 保存对比文字    
    int previousColumnIndex = startColumnIndex++;    // 保存先前对比列下标    
    int colCount = table.Columns.Count;    
    
for (int i = startColumnIndex; i <= colCount;) // 遍历所有行的columnIndex列,发现相同的合并,从起始行的下一行开始对比    
    {        
        
string currentText = table.Cell(rowIndex, i).Range.Text;        
        
if (previousText.Equals(currentText))        
        
{            
            table.Cell(rowIndex, previousColumnIndex).Merge(table.Cell(rowIndex, i)); 
// 合并先前单元格和当前单元格            
            table.Cell(rowIndex, previousColumnIndex).Range.Text = currentText;    // 因为合并后并没有将单元格内容去除,需要手动修改            
            table.Cell(rowIndex, previousColumnIndex).Select();            
            WordApp.Selection.ParagraphFormat.Alignment 
= WdParagraphAlignment.wdAlignParagraphCenter;    // 水平居中显示            
            table.Cell(rowIndex, previousColumnIndex).VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter; // 垂直居中            
            --colCount;        
        }
        
        
else        
        
{            
            previousText 
= currentText; // 将对比文字替换为当前的内容            
            previousColumnIndex = i++;   // 检索到不同的内容,将当前行下标置为先前行下标,用于合并        
        }
    
    }

}

方法注释已经很详细就不再赘述。

最后遇到的问题是无格式的段落检索,因为在生成报告的时候需要在某些段落后填写测试的结论,这下又把我难住了,最终终于发现了bookmark这个东东,起始我对word并不熟悉,都不知道它有书签的功能。顺便就爱你个检索书签的方法贴出来:

/// <summary>
/// 在整个文档中根据书签名检索书签对象
/// </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 
= "你好"// 将检索到书签的内容替换为“你好”

这就是这次用C#做word报表的全部问题,貌似都是小问题。

最后需要看具体的word操作demo代码请访问MSDN,贴个网址:

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

posted @ 2011-04-16 13:38 IceWee 阅读(1175) | 评论 (0)编辑 收藏

今天无聊,想起了《大鹏嘚吧嘚》,于是用我的蓝牙耳机连上笔记本,戴上耳机后发现没有声音,但是看本地磁盘的视频或听歌都有声音的,难道我的蓝牙耳机不支持在线视频?于是摘掉蓝牙,用外放,竟然也没有声音!!!晕了!!!百度之。。。得果:

开始->运行->键入 regedit 找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32 新建一个字符串值,名为"wavemapper" 值为:“msacm32.drv“.

posted @ 2011-04-16 13:30 IceWee 阅读(251) | 评论 (0)编辑 收藏

仅列出标题
共11页: First 上一页 3 4 5 6 7 8 9 10 11 下一页