??xml version="1.0" encoding="utf-8" standalone="yes"?>a级在线观看,国产亚洲综合性久久久影院,国产一区二区三区不卡在线观看http://www.aygfsteel.com/zhip/category/15388.html&nbsp;&nbsp;&nbsp;&nbsp;冬去春来<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp<strong><font style="FONT-SIZE: 9pt; FILTER: shadow(color=#cccccc); COLOR: #0060f0; HEIGHT: 1px">郑重声明Q本BlogU属个h学习、工作需要,记录相关资料。请不要发表M有hw攻ȝa论,谢谢Q!</font><a target='_blank'>www.zhipsoft.cn</a></strong>zh-cnTue, 04 Jan 2011 23:25:21 GMTTue, 04 Jan 2011 23:25:21 GMT60【已解决】Webloigc92 报下面的错误Q有知道的大侠指点一下啊Q谢谢。急急~~http://www.aygfsteel.com/zhip/archive/2009/07/03/285298.htmlzhipzhipFri, 03 Jul 2009 02:44:00 GMThttp://www.aygfsteel.com/zhip/archive/2009/07/03/285298.htmlhttp://www.aygfsteel.com/zhip/comments/285298.htmlhttp://www.aygfsteel.com/zhip/archive/2009/07/03/285298.html#Feedback0http://www.aygfsteel.com/zhip/comments/commentRss/285298.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/285298.html
Webloigc92 报下面的错误Q有知道的大侠指点一下啊Q谢谢。急急~~


<2009-7-3 上午09?6?3U?CST> <Error> <HTTP> <BEA-101019> <[weblogic.servlet.internal.WebAppServletContext@5d7554 - appName: 'traffic', name: 'WebRoot',

context-path: ''] Servlet failed with IOException
java.io.IOException: failed to read '2' bytes from InputStream; clen: 6016 remaining: 2 count: 6014
at weblogic.servlet.internal.ChunkOutput.writeStream(ChunkOutput.java:417)
at weblogic.servlet.internal.ChunkOutputWrapper.writeStream(ChunkOutputWrapper.java:168)
at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:498)
at weblogic.servlet.internal.ServletOutputStreamImpl.writeStream(ServletOutputStreamImpl.java:486)
at weblogic.servlet.FileServlet.sendFile(FileServlet.java:405)
Truncated. see log file for complete stacktrace
>


是不是下面的代码有什么问题?
InputStream fis = null;
BufferedOutputStream bos = null;
try {
String dpId = session.getAttribute("dp_id")==null?"":session.getAttribute("dp_id").toString();
String nameReport=request.getParameter("nameReport");
String workbook = request.getParameter("workbook");
if(workbook==null || "".equals(workbook)){
workbook = session.getAttribute("dp_id").toString();
}
String tempworkbook = workbook +"/";
tempworkbook = tempworkbook.replaceAll("d作薄/",dpId+"/");
if(tempworkbook.endsWith("/")){
tempworkbook = tempworkbook.substring(0,tempworkbook.length()-1);
}
fis = request.getInputStream();
bos = new BufferedOutputStream(new FileOutputStream(new File(strAbsPath+"workbookspace\\"+tempworkbook+"\\"+nameReport+".cll")));
int b = fis.read();
while (b != -1) {
bos.write(b);
b = fis.read();
}
}catch (Exception e) {
e.printStackTrace();
}finally{
bos.flush();
bos.close();
fis.close();
bos = null;
fis = null;
}

原因Q因为workbook路径中包含了I格?/p>

zhip 2009-07-03 10:44 发表评论
]]>
针对不重新发送信息,则无法刷新网c的l极解决Ҏhttp://www.aygfsteel.com/zhip/archive/2008/09/25/231144.htmlzhipzhipThu, 25 Sep 2008 08:53:00 GMThttp://www.aygfsteel.com/zhip/archive/2008/09/25/231144.htmlhttp://www.aygfsteel.com/zhip/comments/231144.htmlhttp://www.aygfsteel.com/zhip/archive/2008/09/25/231144.html#Feedback3http://www.aygfsteel.com/zhip/comments/commentRss/231144.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/231144.htmlJAVA:

public class UtilTool {

    public static Map getParameterMap(HttpServletRequest request) {
        Map paramMap = new LinkedHashMap();
        String pathInfoStr = request.getPathInfo();

        if (pathInfoStr != null && pathInfoStr.length() > 0) {
            if (!pathInfoStr.endsWith("/")) pathInfoStr += "/";

            int current = pathInfoStr.indexOf('/');
            int last = current;
            while ((current = pathInfoStr.indexOf('/', last + 1)) != -1) {
                String element = pathInfoStr.substring(last + 1, current);
                last = current;
                if (element.charAt(0) == '~' && element.indexOf('=') > -1) {
                    String name = element.substring(1, element.indexOf('='));
                    String value = element.substring(element.indexOf('=') + 1);
                    paramMap.put(name, value);
                }
            }
        }

        java.util.Enumeration e = request.getParameterNames();
        while (e.hasMoreElements()) {
            String name = (String) e.nextElement();
            paramMap.put(name, request.getParameter(name));
        }

        if (paramMap.size() == 0) {
            Map multiPartMap = (Map) request.getAttribute("multiPartMap");
            if (multiPartMap != null && multiPartMap.size() > 0) {
                paramMap.putAll(multiPartMap);
            }
        }
        return paramMap;
    }

 

  public static String requestParameter(HttpServletRequest request){
   String fromstr="<form name='request' method='POST'>";
   Enumeration requestKeys = request.getParameterNames();
   Map requestValues=UtilTool.getParameterMap(request);
   String rkey = null;
   for(;requestKeys.hasMoreElements();){
    rkey = (String) requestKeys.nextElement();
    fromstr+="<input name='"+rkey+"' value='"+requestValues.get(rkey)+"' type='hidden'>";
   }
   fromstr+="</form><script>function reload(){request.submit()}</script>";
   return fromstr;
 }
}

Jsp调用Q?/p>

<%=UtilTool.requestParameter(request)%>


q样当需要调用弹出窗口ƈh当前|如:
针对当前늚h

window.location.reload();
改ؓ
reload();

 

 



zhip 2008-09-25 16:53 发表评论
]]>
Java代码~写?0条徏?/title><link>http://www.aygfsteel.com/zhip/archive/2008/04/16/193271.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Wed, 16 Apr 2008 00:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhip/archive/2008/04/16/193271.html</guid><wfw:comment>http://www.aygfsteel.com/zhip/comments/193271.html</wfw:comment><comments>http://www.aygfsteel.com/zhip/archive/2008/04/16/193271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhip/comments/commentRss/193271.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhip/services/trackbacks/193271.html</trackback:ping><description><![CDATA[<div id="wmqeeuq" class="newscon">(1) cd首字母应该大写。字Dc方法以及对象(句柄Q的首字母应写。对于所有标识符Q其中包含的所有单词都应紧靠在一P而且大写中间单词的首字母。例如: <br /> ThisIsAClassName <br /> thisIsMethodOrFieldName <br /> 若在定义中出C常数初始化字W,则大写static final基本cd标识W中的所有字母。这样便可标志出它们属于~译期的常数?<br /> Java包(PackageQ属于一U特D情况:它们全都是小写字母,即便中间的单词亦是如此。对于域名扩展名Uͼ如comQorgQnet或者edu{,全部都应写Q这也是Java 1.1和Java 1.2的区别之一Q?<br /> <br /> (2) Z常规用途而创Z个类Ӟ请采?l典形式"Qƈ包含对下q元素的定义Q?<br /> <br /> equals() <br /> hashCode() <br /> toString() <br /> clone()Qimplement CloneableQ?<br /> implement Serializable <br /> <br /> (3) 对于自己创徏的每一个类Q都考虑|入一个main()Q其中包含了用于试那个cȝ代码。ؓ使用一个项目中的类Q我们没必要删除试代码。若q行了Q何Ş式的改动Q可方便地返回测试。这些代码也可作为如何用类的一个示例用?<br /> <br /> (4) 应将Ҏ设计成简要的、功能性单元,用它描述和实C个不q箋的类接口部分。理x况下Q方法应明扼要。若长度很大Q可考虑通过某种方式其分割成较短的几个Ҏ。这样做也便于类内代码的重复使用Q有些时候,Ҏ必须非常大,但它们仍应只做同L一件事情)?<br /> <br /> (5) 设计一个类Ӟ误w处Cؓ客户E序员考虑一下(cȝ使用Ҏ应该是非常明的Q。然后,再设w处Cؓ理代码的h考虑一下(预计有可能进行哪些Ş式的修改Q想想用什么方法可把它们变得更单)?<br /> (6) 使类可能短精悍,而且只解决一个特定的问题。下面是对类设计的一些徏议: <br /> ■一个复杂的开兌句:考虑采用"多Ş"机制 <br /> ■数量众多的Ҏ涉及到类型差别极大的操作Q考虑用几个类来分别实?<br /> ■许多成员变量在特征上有很大的差别:考虑使用几个c?<br /> <br /> (7) 让一切东襉K可能地"U有"--private。可使库的某一部分"公共?Q一个方法、类或者一个字D늭{)Q就永远不能把它拿出。若拿出Q就可能破坏其他人现有的代码Q他们不得不重新编写和设计。若只公布自己必d布的Q就可放心大胆地改变其他M东西。在多线E环境中Q隐U是特别重要的一个因?-只有private字段才能在非同步使用的情况下受到保护?<br /> <br /> (8) 谨惕"巨大对象l合?。对一些习惯于序~程思维、且初涉OOP领域的新手,往往喜欢先写一个顺序执行的E序Q再把它嵌入一个或两个巨大的对象里。根据编E原理,对象表达的应该是应用E序的概念,而非应用E序本n?<br /> <br /> (9) 若不得已q行一些不太雅观的~程Q至应该把那些代码|于一个类的内部?<br /> <br /> (10) M时候只要发现类与类之间l合得非常紧密,需要考虑是否采用内部c,从而改善编码及l护工作Q参见第14?4.1.2节?用内部类改进代码"Q?<br /> <br /> (11) 可能细致地加上注释Qƈ用javadoc注释文档语法生成自己的程序文档?<br /> <br /> (12) 避免使用"术数字"Q这些数字很难与代码很好地配合。如以后需要修改它Q无疑会成ؓ一场噩梦,因ؓҎ不知?100"到底是指"数组大小"q是"其他全然不同的东?。所以,我们应创Z个常敎ͼqؓ其用具有说服力的描q性名Uͼq在整个E序中都采用常数标识W。这样可使程序更易理解以及更易维护?<br /> <br /> (13) 涉及构徏器和异常的时候,通常希望重新丢弃在构建器中捕LM异常--如果它造成了那个对象的创徏p|。这样一来,调用者就不会以ؓ那个对象已正地创徏Q从而盲目地l箋?<br /> <br /> (14) 当客L序员用完对象以后Q若你的c要求进行Q何清除工作,可考虑清除代码置于一个良好定义的Ҏ里,采用cM于cleanup()q样的名字,明确表明自己的用途。除此以外,可在cd攄一个booleanQ布)标记Q指出对象是否已被清除。在cȝfinalize()Ҏ里,L定对象已被清除,q已丢弃了从RuntimeExceptionl承的一个类Q如果还没有的话Q,从而指Z个编E错误。在采取象这LҎ之前Q请定finalize()能够在自qpȝ中工作(可能需要调用System.runFinalizersOnExit(true)Q从而确保这一行ؓQ?<br /> <br /> (15) 在一个特定的作用域内Q若一个对象必L除(非由垃圾攉机制处理Q,请采用下q方法:初始化对象;若成功,则立卌入一个含有finally从句的try块,开始清除工作?<br /> <br /> (16) 若在初始化过E中需要覆盖(取消Qfinalize()Q请C调用super.finalize()Q若Object属于我们的直接超c,则无此必要)。在对finalize()q行覆盖的过E中Q对super.finalize()的调用应属于最后一个行动,而不应是W一个行动,q样可确保在需要基cȝ件的时候它们依然有效?<br /> <br /> (17) 创徏大小固定的对象集合时Q请它们传输至一个数l(若准备从一个方法里q回q个集合Q更应如此操作)。这样一来,我们可享受到数l在~译期进行类型检查的好处。此外,Z用它们,数组的接收者也许ƈ不需要将对象"造型"到数l里?<br /> <br /> (18) 量使用interfacesQ不要用abstractcR若已知某样东西准备成ؓ一个基c,那么W一个选择应是其变成一个interfaceQ接口)。只有在不得不用方法定义或者成员变量的时候,才需要将其变成一个abstractQ抽象)cR接口主要描qC客户希望做什么事情,而一个类则致力于Q或允许Q具体的实施l节?<br /> <br /> (19) 在构建器内部Q只q行那些对象设为正状态所需的工作。尽可能地避免调用其他方法,因ؓ那些Ҏ可能被其他h覆盖或取消,从而在构徏q程中生不可预知的l果Q参见第7章的详细说明Q?<br /> <br /> (20) 对象不应只是单地容纳一些数据;它们的行Z应得到良好的定义?<br /> <br /> (21) 在现成类的基上创建新cLQ请首先选择"新徏"?创作"。只有自q设计要求必须l承Ӟ才应考虑q方面的问题。若在本来允许新建的场合使用了承,则整个设计会变得没有必要地复杂?<br /> <br /> (22) 用承及Ҏ覆盖来表C为间的差异,而用字段表示状态间的区别。一个非常极端的例子是通过对不同类的承来表示颜色Q这是绝对应该避免的Q应直接使用一?颜色"字段?<br /> <br /> (23) 为避免编E时遇到ȝQ请保证在自q路径指到的Q何地方,每个名字都仅对应一个类。否则,~译器可能先扑ֈ同名的另一个类Qƈ报告出错消息。若怀疑自qCc\径问题,误试在c\径的每一个v点,搜烦一下同名的.class文g?<br /> <br /> (24) 在Java 1.1 AWT中用事?适配?Ӟ特别Ҏ到一个陷阱。若覆盖了某个适配器方法,同时拼写Ҏ没有特别讲究Q最后的l果是新添加一个方法,而不是覆盖现成方法。然而,׃q样做是完全合法的,所以不会从~译器或q行期系l获得Q何出错提C?-只不q代码的工作变得不正常了?<br /> <br /> (25) 用合理的设计Ҏ消除"伪功?。也是_假若只需要创建类的一个对象,׃要提前限制自׃用应用程序,q加上一?只生成其中一?注释。请考虑其装成一?独生?的Ş式。若在主E序里有大量散ؕ的代码,用于创徏自己的对象,误虑采纳一U创造性的ҎQ将些代码封装v来?<br /> <br /> (26) 警惕"分析瘫痪"。请CQ无论如何都要提前了解整个项目的状况Q再去考察其中的细节。由于把握了全局Q可快速认识自己未知的一些因素,防止在考察l节的时候陷?死逻辑"中?<br /> <br /> (27) 警惕"q早优化"。首先让它运行v来,再考虑变得更快--但只有在自己必须q样做、而且l证实在某部分代码中的确存在一个性能瓉的时候,才应q行优化。除非用专门的工具分析瓶颈,否则很有可能是在费自己的时间。性能提升的隐含代h自己的代码变得难于理解,而且难于l护?<br /> <br /> (28) 误住,阅读代码的时间比写代码的旉多得多。思\清晰的设计可获得易于理解的程序,但注释、细致的解释以及一些示例往往h不可估量的h倹{无论对你自己,q是对后来的人,它们都是相当重要的。如Ҏ仍有怀疑,那么误惌p图从联机Java文档里找出有用信息时到的挫折,q样或许能将你说服?<br /> <br /> (29) 如认己已q行了良好的分析、设计或者实施,那么L微更换一下思维角度。试试邀请一些外来h?-q不一定是专家Q但可以是来自本公司其他部门的h。请他们用完全新鲜的眼光考察你的工作Q看看是否能扑և你一度熟视无睹的问题。采取这U方式,往往能在最适合修改的阶D|Z些关键性的问题Q避免品发行后再解决问题而造成的金钱及_֊斚w的损失?<br /> <br /> (30) 良好的设计能带来最大的回报。简a之,对于一个特定的问题Q通常会花较长的时间才能找CU最恰当的解x案。但一旦找C正确的方法,以后的工作就L多了Q再也不用经历数时、数天或者数月的痛苦挣扎。我们的努力工作会带来最大的回报Q甚x可估量)。而且׃自己倾注了大量心血Q最l获得一个出色的设计ҎQ成功的快感也是令h心动的。坚持抵制草草完工的诱惑--那样做往往得不偿失 <br /> <br /> (3) 对于自己创徏的每一个类Q都考虑|入一个main()Q其中包含了用于试?个类的代码。ؓ使用一个项目中的类Q我们没必要删除试代码。若q行了Q 何Ş式的改动Q可方便地返回测试。这些代码也可作为如何用类的一个示?使用?<br /> <br /> this is absolutly bad! <br /> <br /> (4) 应将Ҏ设计成简要的、功能性单元,用它描述和实C个不q箋的类?口部分。理x况下Q方法应明扼要。若长度很大Q可考虑通过某种方式?其分割成较短的几个方法。这样做也便于类内代码的重复使用Q有些时候,?法必非常大Q但它们仍应只做同样的一件事情)?<br /> <br /> (5) 设计一个类Ӟ误w处Cؓ客户E序员考虑一下(cȝ使用Ҏ应该?非常明确的)。然后,再设w处Cؓ理代码的h考虑一下(预计有可能进?哪些形式的修改,x用什么方法可把它们变得更单)?<br /> (6) 使类可能短精悍,而且只解决一个特定的问题。下面是对类设计的一 些徏议: <br /> ■一个复杂的开兌句:考虑采用"多Ş"机制 <br /> ■数量众多的Ҏ涉及到类型差别极大的操作Q考虑用几个类来分别实?<br /> ■许多成员变量在特征上有很大的差别:考虑使用几个c?<br /> <br /> (7) 让一切东襉K可能地"U有"--private。可使库的某一部分"公共?Q一?Ҏ、类或者一个字D늭{)Q就永远不能把它拿出。若拿出Q就可能?坏其他h现有的代码,使他们不得不重新~写和设计。若只公布自己必d?的,可攑ֿ大胆地改变其他Q何东ѝ在多线E环境中Q隐U是特别重要?一个因?-只有private字段才能在非同步使用的情况下受到保护?<br /> <br /> not necessary , pretotect or package level also fine in most case <br /> <br /> (8) 谨惕"巨大对象l合?。对一些习惯于序~程思维、且初涉OOP领域的新 手,往往喜欢先写一个顺序执行的E序Q再把它嵌入一个或两个巨大的对?里。根据编E原理,对象表达的应该是应用E序的概念,而非应用E序本n?<br /> <br /> (9) 若不得已q行一些不太雅观的~程Q至应该把那些代码|于一个类的内 部?<br /> <br /> (10) M时候只要发现类与类之间l合得非常紧密,需要考虑是否采用内部 c,从而改善编码及l护工作Q参见第14?4.1.2节?用内部类改进??Q?<br /> <br /> (11) 可能细致地加上注释Qƈ用javadoc注释文档语法生成自己的程序文档?<br /> <br /> (12) 避免使用"术数字"Q这些数字很难与代码很好地配合。如以后需要修?它,无疑会成Z场噩梦,因ؓҎ不知?100"到底是指"数组大小"q是"?他全然不同的东西"。所以,我们应创Z个常敎ͼqؓ其用具有说服力的描 q性名Uͼq在整个E序中都采用常数标识W。这样可使程序更易理解以及更 易维护?<br /> <br /> (13) 涉及构徏器和异常的时候,通常希望重新丢弃在构建器中捕LM异常- -如果它造成了那个对象的创徏p|。这样一来,调用者就不会以ؓ那个对象?正确地创建,从而盲目地l箋?<br /> <br /> (14) 当客L序员用完对象以后Q若你的c要求进行Q何清除工作,可考虑?清除代码|于一个良好定义的Ҏ里,采用cM于cleanup()q样的名字,明确 表明自己的用途。除此以外,可在cd攄一个booleanQ布)标记Q指?对象是否已被清除。在cȝfinalize()Ҏ里,L定对象已被清除,q已丢弃 了从RuntimeExceptionl承的一个类Q如果还没有的话Q,从而指Z个编E?错误。在采取象这LҎ之前Q请定finalize()能够在自qpȝ中工?Q可能需要调用System.runFinalizersOnExit(true)Q从而确保这一行ؓQ?<br /> <br /> (15) 在一个特定的作用域内Q若一个对象必L除(非由垃圾攉机制?理)Q请采用下述ҎQ初始化对象Q若成功Q则立即q入一个含有finally?句的try块,开始清除工作?<br /> <br /> (16) 若在初始化过E中需要覆盖(取消Qfinalize()Q请C调用 super.finalize()Q若Object属于我们的直接超c,则无此必要)。在对finalize() q行覆盖的过E中Q对super.finalize()的调用应属于最后一个行动,而不应是W?一个行动,q样可确保在需要基cȝ件的时候它们依然有效?<br /> <br /> (17) 创徏大小固定的对象集合时Q请它们传输至一个数l(若准备从一个方 法里q回q个集合Q更应如此操作)。这样一来,我们可享受到数l在~译 期进行类型检查的好处。此外,Z用它们,数组的接收者也许ƈ不需要将??造型"到数l里?<br /> <br /> (18) 量使用interfacesQ不要用abstractcR若已知某样东西准备成ؓ一?基础c,那么W一个选择应是其变成一个interfaceQ接口)。只有在不得?使用Ҏ定义或者成员变量的时候,才需要将其变成一个abstractQ抽象) cR接口主要描qC客户希望做什么事情,而一个类则致力于Q或允许Q具?的实施细节?<br /> <br /> they are total diffrent , <br /> <br /> (19) 在构建器内部Q只q行那些对象设为正状态所需的工作。尽可能地避 免调用其他方法,因ؓ那些Ҏ可能被其他h覆盖或取消,从而在构徏q程?产生不可预知的结果(参见W?章的详细说明Q?<br /> <br /> (20) 对象不应只是单地容纳一些数据;它们的行Z应得到良好的定义?<br /> <br /> (21) 在现成类的基上创建新cLQ请首先选择"新徏"?创作"。只有自q?计要求必ȝ承时Q才应考虑q方面的问题。若在本来允许新建的场合使用?l承Q则整个设计会变得没有必要地复杂?<br /> <br /> (22) 用承及Ҏ覆盖来表C为间的差异,而用字段表示状态间的区别。一 个非常极端的例子是通过对不同类的承来表示颜色Q这是绝对应该避免的Q?应直接用一?颜色"字段?<br /> <br /> (23) 为避免编E时遇到ȝQ请保证在自q路径指到的Q何地方,每个名字 都仅对应一个类。否则,~译器可能先扑ֈ同名的另一个类Qƈ报告出错?息。若怀疑自qCc\径问题,误试在c\径的每一个v点,搜烦一?同名?class文g?<br /> <br /> classpath is not that simple <br /> <br /> (24) 在Java 1.1 AWT中用事?适配?Ӟ特别Ҏ到一个陷阱。若覆盖?某个适配器方法,同时拼写Ҏ没有特别讲究Q最后的l果是新添加一个方 法,而不是覆盖现成方法。然而,׃q样做是完全合法的,所以不会从~译 器或q行期系l获得Q何出错提C?-只不q代码的工作变得不正常了?<br /> <br /> (25) 用合理的设计Ҏ消除"伪功?。也是_假若只需要创建类的一个对 象,׃要提前限制自׃用应用程序,q加上一?只生成其中一?注释?误虑其装成一?独生?的Ş式。若在主E序里有大量散ؕ的代码,?于创q对象Q请考虑采纳一U创造性的ҎQ将些代码封装v来?<br /> <br /> (26) 警惕"分析瘫痪"。请CQ无论如何都要提前了解整个项目的状况Q再?考察其中的细节。由于把握了全局Q可快速认识自己未知的一些因素,防止?考察l节的时候陷?死逻辑"中?<br /> <br /> (27) 警惕"q早优化"。首先让它运行v来,再考虑变得更快--但只有在自己必须 q样做、而且l证实在某部分代码中的确存在一个性能瓉的时候,才应q行 优化。除非用专门的工具分析瓶颈,否则很有可能是在费自己的时间。性能 提升的隐含代h自己的代码变得难于理解,而且难于l护?<br /> <br /> but know early and design better at first is always necesary, or else <br /> you die <br /> <br /> (28) 误住,阅读代码的时间比写代码的旉多得多。思\清晰的设计可获得 易于理解的程序,但注释、细致的解释以及一些示例往往h不可估量的h 倹{无论对你自己,q是对后来的人,它们都是相当重要的。如Ҏ仍有怀 疑,那么误惌p图从联机Java文档里找出有用信息时到的挫折,q样 或许能将你说服?<br /> <br /> (29) 如认己已q行了良好的分析、设计或者实施,那么L微更换一下?l角度。试试邀请一些外来h?-q不一定是专家Q但可以是来自本公司其他 部门的h。请他们用完全新鲜的眼光考察你的工作Q看看是否能扑և你一度熟 视无睹的问题。采取这U方式,往往能在最适合修改的阶D|Z些关键性的 问题Q避免品发行后再解决问题而造成的金钱及_֊斚w的损失?<br /> <br /> (30) 良好的设计能带来最大的回报。简a之,对于一个特定的问题Q通常会花 较长的时间才能找CU最恰当的解x案。但一旦找C正确的方法,以后 的工作就L多了Q再也不用经历数时、数天或者数月的痛苦挣扎。我们的 努力工作会带来最大的回报Q甚x可估量)。而且׃自己倾注了大量心 血Q最l获得一个出色的设计ҎQ成功的快感也是令h心动的。坚持抵制草 草完工的诱惑--那样做往往得不偿失</div> <img src ="http://www.aygfsteel.com/zhip/aggbug/193271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhip/" target="_blank">zhip</a> 2008-04-16 08:54 <a href="http://www.aygfsteel.com/zhip/archive/2008/04/16/193271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java数据导入Excelhttp://www.aygfsteel.com/zhip/archive/2007/07/10/129373.htmlzhipzhipTue, 10 Jul 2007 08:09:00 GMThttp://www.aygfsteel.com/zhip/archive/2007/07/10/129373.htmlhttp://www.aygfsteel.com/zhip/comments/129373.htmlhttp://www.aygfsteel.com/zhip/archive/2007/07/10/129373.html#Feedback2http://www.aygfsteel.com/zhip/comments/commentRss/129373.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/129373.html阅读全文

zhip 2007-07-10 16:09 发表评论
]]>
[转]查询代码|址http://www.aygfsteel.com/zhip/archive/2007/06/12/123512.htmlzhipzhipTue, 12 Jun 2007 00:52:00 GMThttp://www.aygfsteel.com/zhip/archive/2007/06/12/123512.htmlhttp://www.aygfsteel.com/zhip/comments/123512.htmlhttp://www.aygfsteel.com/zhip/archive/2007/06/12/123512.html#Feedback0http://www.aygfsteel.com/zhip/comments/commentRss/123512.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/123512.html查询代码|址
    q些是我l常使用的一些Java代码查询|站Q希望在q里能v到抛砖引玉的效果Q大家群{群力,一起分享Java快乐?br> 
  1. java2s  http://www.java2s.com/
   q个|站非常好,分成三大c,分别是Example、Products?ArticlesQ每个大cM又分别设许多类Q还有搜索功能,q样查找h非常方便。。比如,如果要学习SWT/JFaceQ只要把Example下的SWT JFace Eclipse 研究一下也可以了。另外,q个|站q有JavaScript DHTML?C# / C Sharp?C / ANSI-C?SQL / MySQL{类。MQ非常好?/p>

  2. codeZoo http://www.codezoo.com/
   q是O'Reily旗下的,除了Java之外Q还有Ruby、Python?br> 
  3. Java学习源代码检索系l?nbsp; http://www.chinaitlab.com/www/school/codesearch/index.html
   隑־看见国的,好歹也要支持一下,分类也算清楚?br> 
  4. Koders  http://www.koders.com/
   是个l合查询的网站,不过它好像是从代码中查找关键词,包含的语a挺多的?br> 
  5. Resources for Java server-side developers  http://www.java201.com/
   切的说Q它是一个资源收集的|站Q代码查询ƈ不多。不q它分类相当l,如Articles、Books、Examples、Extensions、Frameworks{类Q你可以输入Spring或Hibernate作ؓ关键词搜索一下看看?br> 
   存货不多Q以后有了再补充?



zhip 2007-06-12 08:52 发表评论
]]>
J2EE中的优化Ҏhttp://www.aygfsteel.com/zhip/archive/2007/06/12/123509.htmlzhipzhipTue, 12 Jun 2007 00:49:00 GMThttp://www.aygfsteel.com/zhip/archive/2007/06/12/123509.htmlhttp://www.aygfsteel.com/zhip/comments/123509.htmlhttp://www.aygfsteel.com/zhip/archive/2007/06/12/123509.html#Feedback0http://www.aygfsteel.com/zhip/comments/commentRss/123509.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/123509.html J2EE中的优化Ҏ

1.使用StringBuffer代替String

String是用来存储字W串帔R的,如果要执?#8220;+”的操作,pȝ会生成一些时的对象Qƈ对这些对象进行管理,造成不必要的开销?

如果字符串有q接的操作,替代的做法是用StringBuffercȝappendҎ?

当字W串的大超q缺?6Ӟ代码实现了容量的扩充Qؓ了避免对象的重新扩展其容量,那么最好用StringBuffer sb=new StringBufferQ?0Q?

2.优化循环?

Vector vect = new Vector(1000);
for( inti=0; iQvect.size(); i++){
 ...
}

  for循环部分改写成:

int size = vect.size();
for( int i=0; iQsize; i++){
 ...
}

如果size=1000Q就避免?000ơ的sizeQ)调用开销Q避免了重复调用.

3.对象的创?

量用new来初始化一个类的实例,当一个对象是用newq行初始化时Q其构造函数链的所有构造函数都被调用到Q所以new操作W是很消耗系l资源的Qnew一个对象耗时往往是局部变量赋D时的上千倍。同Ӟ当生成对象后Q系l还要花旉q行垃圾回收和处理?

当new创徏对象不可避免Ӟ注意避免多次的用new初始化一个对象?

量在用时再创对象?

NewObject object = new NewObject();
int value;
if(iQ? )
{
 value =object.getValue();
}

  可以修改为:

int value;
if(iQ? )
{
 NewObject object = new NewObject();
 Value =object.getValue();
}

4.慎用异常处理

  异常是Java的一U错误处理机Ӟ对程序来说是非常有用的,但是异常Ҏ能不利。抛出异帔R先要创徏一个新的对象,q进行相关的处理Q造成pȝ的开销Q所以异常应该用在错误处理的情况Q不应该用来控制E序程Q流E尽量用whileQif{处理?/p>

在不是很影响代码健壮性的前提下,可以把几个try/catch块合成一个?

讨论Q需要处理的异常处理和不需要处理的异常处理在捕捉异常类型上应该采取什么策略?

5.变量的?

   量使用局部变量,调用Ҏ时传递的参数以及在调用中创徏的时变量都保存在栈QStackQ?中,速度较快。其他变量,如静态变量、实例变量等Q都在堆QHeapQ中创徏Q速度较慢?

量使用静态变量,卛_修饰WstaticQ如果类中的变量不会随他的实例而变化,可以定义ؓ静态变量,从而他所有的实例都共享这个变量?

Q但是静态变量不能滥用,如果q个变量用的比较而声明成静态变量,不仅效率不会提高Q还会媄响性能Q?

 

6.I/O操作

    输入/输出QI/OQ包括很多方面,我们知道Q进行I/O操作是很费系l资源的。程序中应该量用I/O操作。用时可以注意Q?. 合理控制输出函数System.out.println()对于大多时候是有用的,特别是系l调试的时候,但也会生大量的信息出现在控制台和日志上Q同时输出时Q有序列化和同步的过E,造成了开销?

    特别是在发行版中Q要合理的控制输出,可以在项目开发时Q设计好一个Debug的工LQ在该类中可以实现输出开养I输出的别,Ҏ不同的情况进行不同的输出的控制?

    我们在调试程序的时候,我们喜欢用System.out.println()q样的打印语句来跟踪我们的错误。但在程序发布的时候我们却没有把这L语句都删除掉Q在目的运行中Q也会媄响效能?

7.使用~存

  d内存要比d文g要快很多Q应可能用缓册Ӏ?

  可能用带有Buffer的类代替没有Buffer的类Q如可以用BufferedReader 代替ReaderQ用BufferedWriter代替Writer来进行处理I/O操作?

同样可以用BufferedInputStream代替InputStream都可以获得性能的提高?
 
8.Servlet的效率问?

  Servlet采用h——响应模式提供Web服务Q通过ServletResponse以及ServletRequestq两个对象来输出和接收用户传递的参数Q在服务器端处理用户的请求,Ҏh讉K数据库、访问别的ServletҎ、调用EJB{等Q然后将处理l果q回l客L?

  ·量不用同?

Servlet是多U程的,以处理不同的hQ基于前面同步的分析Q如果有太多的同步就失去了多U程的优势了?

同步大多C用在一个完整的事务中,避免事务中多Ҏ作而引L数据不同步现象。能用逻辑控制的尽量的用逻辑控制?

  ·不用保存太多的信息在HttpSession?

  很多时候,存储一些对象在HttpSession中是有必要的Q可以加快系l的开发,如网上商店系l会把购物R信息保存在该用户的Session中,但当存储大量的信息或是大的对象在会话中是有害的,特别是当pȝ中用L讉K量很大,对内存的需求就会很高?

具体开发时Q在q两者之间应作好权衡?

我们在写web应用Ӟl常只需要request的地方而用了sessionQ这样会是效率大大的降低的。但是我们用CsessionQ在目的开发中又不能很好的利用sessionQ这样对效率都是有媄响的。比如说Q我们把用户信息攑֜了session中,但是我们有时候在判断用户是否d的时候,我们們֐L据库里查q个是否有这个用P又是用了requestQ但是这h没有必要的,因ؓ我们只需要判断sessionp了。如果ƈ发数量比较大的时候,服务器的负蝲׃q重?

  ·清除Session

  通常情况Q当辑ֈ讑֮的超时时间时Q同时有些Session没有了活动,服务器会释放q些没有zd的SessionQ?. 不过q种情况下,特别是多用户q访Ӟpȝ内存要维护多个的无效Session?

  当用户退出时Q应该手动释放,回收资源Q实现如下:..

HttpSession theSession = request.getSession();
// 获取当前Session
if(theSession != null){
 theSession.invalidate(); // 使该Session失效
}

9.数据库的操作

在J2EE开发的应用pȝ中,数据库访问一般是个必备的环节。数据库用来存储业务数据Q供应用E序讉K?

  在Java技术的应用体系中,应用E序是通过JDBCQJava Database ConnectivityQ实现的接口来访问数据库的,JDBC支持“建立q接、SQL语句查询、处理结?#8221;{基本功能。在应用JDBC接口讉K数据库的q程中,只要Ҏ规范来实玎ͼ可以达到要求的功能?

  但是Q有些时候进行数据查询的效率着实让开发h员不如所愿,明明Ҏ规范~写的程序,q行效果却很差,造成整个pȝ的执行效率不高?

  ·使用速度快的JDBC驱动

  JDBC API包括两种实现接口形式Q一U是UJava实现的驱动,一U利用ODBC驱动和数据库客户端实玎ͼ具体有四U驱动模式ƈ各有不同的应用范_针对不同的应用开发要选择合适的JDBC驱动Q在同一个应用系l中Q如果选择不同的JDBC驱动Q在效率上会有差别?

例如Q有一个企业应用系l,不要求支持不同厂商的数据库,q时可以选择模式4的JDBC驱动Q该驱动一般由数据库厂商实现的Z本地协议的驱动,直接调用数据库管理系l用的协议Q减了模式3中的中间层?

  ·使用JDBCq接?

  Z提高讉K数据库的性能Q我们还可以使用JDBC 2.0的一些规范和Ҏ,JDBC是占用资源的Q在使用数据库连接时可以使用q接池Connection PoolingQ避免频J打开、关闭Connection。而我们知道,获取Connection是比较消耗系l资源的?

  Connection~冲池是q样工作的:当一个应用程序关闭一个数据库q接Ӟq个q接q不真正释放而是被@环利用,建立q接是消耗较大的操作Q@环利用连接可以显著的提高性能Q因为可以减新q接的徏立?

  一个通过DataSource获取~冲池获得连接,q连接到一个CustomerDB数据源的代码演示如下Q?

Context ctx = new InitialContext();
DataSource dataSource = (DataSource) ctx.lookup("jdbc/CustomerDB");
Connection conn = dataSource.getConnection("password","username");

  ·~存DataSource

  一个DataSource对象代表一个实际的数据源。这个数据源可以是从关系数据库到表格形式的文Ӟ完全依赖于它是怎样实现的,一个数据源对象注册到JNDI名字服务后,应用E序可以从JNDI服务器上取得该对象,q用之和数据源建立q接?

  通过上面的例子,我们知道DataSource是从q接池获得连接的一U方式,通过JNDI方式获得Q是占用资源的?

  Z避免再次的JNDI调用Q可以系l中~存要用的DataSource?

  ·关闭所有用的资源

  pȝ一般是q发的系l,在每ơ申请和使用完资源后Q应该释放供别h使用Q数据库资源每个模式的含义可以参考SUN JDBC的文档,不同是比较宝늚Q用完成后应该保证d的释放?

  L下面的代码段Q?

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
 DataSource dataSource = getDataSource();
 // 取的DataSource的方法,实现略?br> conn = datasource.getConnection();
 stmt = conn.createStatement();
 rs = stmt.executeQuery("SELECT * FROM ...");
 ... // 其他处理
 rs.close();
 stmt.close();
 conn.close();
}catch (SQLException ex) {
 ... // 错误处理
}

  _看g没有什么问题,也有关闭相关如Connection{系l资源的代码Q但当出现异常后Q关闭资源的代码可能q不被执行,Z证资源的实已被关闭Q应该把资源关闭的代码放到finally块:

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
 DataSource dataSource = getDataSource();
 // 取的DataSource的方法,实现略?br> conn = datasource.getConnection();
 stmt = conn.createStatement();
 rs = stmt.executeQuery("SELECT * FROM ...");

 ... // 其他处理
}catch (SQLException ex) {
 ... // 错误处理

}finally{
 if (rs!=null) {
  try {
   rs.close(); // 关闭ResultSet}
  catch (SQLException ex) {
   ... // 错误处理
  }
 }

 if (stmt!=null){
  try {
   stmt.close(); // 关闭Statement}
  catch (SQLException ex) {
   ... // 错误处理
  }
 }
 if (conn!=null){
  try {
   conn.close(); // 关闭Connection}
  catch (SQLException ex) {
   ... // 错误处理
  }
 }
}

  ·大型数据量处?

  当我们在d诸如数据列表、报表等大量数据Ӟ可以发现使用EJB的方法是非常慢的Q这时可以用直接访问数据库的方法,用SQL直接存取数据Q从而消除EJB的经常开支(例如q程Ҏ调用、事务管理和数据序列化,对象的构造等Q?

  ·~存l常使用的数?

  对于构徏的业务系l,如果有些数据要经常要从数据库中读取,同时Q这些数据又不经常变化,q些数据可以在pȝ中缓存v来,使用时直接读取缓存,而不用频J的讉K数据库读取数据?

  ~存工作可以在系l初始化时一ơ性读取数据,特别是一些只ȝ数据Q当数据更新时更新数据库内容Q同时更新缓存的数据倹{?

一个例子是Q在一套企业应用系l中Q企业的信息数据Q如企业的名Uͼ在多个业务应用模块中使用Q这时就可以把这些数据缓存v来,需要时直接d~存的企业信息数据?

我们l常使用Hibernateq样的持久数据层的框Ӟ很好的利用了缓存的作用Q所以在一定程度上弥补了封装而带来的效率丢失问题。但是在使用~存的时候应该注意,因ؓ讉K的内存数据而不是真实的数据库数据,所以会出现脏读的情c同时也q不是所有的东西都应该放在缓存中Q不l常用到的我们就没有必要攑֜~存中。有时候我们配合xml文g来用,也不׃U好的方法?

 

一般意义上_参与pȝq行的代码都会对性能产生影响Q实际应用中应该L良好的编E规范、编写高质量的代码,当系l性能出现问题Ӟ要找C要媄响性能的瓶颈所在,然后集中_֊优化q些代码Q能辑ֈ事半功倍的效果?

  J2EE性能的优化包括很多方面的Q要辑ֈ一个性能优良的系l,除了x代码之外Q还应该Ҏpȝ实际的运行情况,从服务器软硬件环境、集技术、系l构架设计、系l部|环境、数据结构、算法设计等斚wl合考虑?

 



zhip 2007-06-12 08:49 发表评论
]]>
Q{QStruts Menu开发向?http://www.aygfsteel.com/zhip/archive/2007/03/29/107204.htmlzhipzhipThu, 29 Mar 2007 05:40:00 GMThttp://www.aygfsteel.com/zhip/archive/2007/03/29/107204.htmlhttp://www.aygfsteel.com/zhip/comments/107204.htmlhttp://www.aygfsteel.com/zhip/archive/2007/03/29/107204.html#Feedback0http://www.aygfsteel.com/zhip/comments/commentRss/107204.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/107204.html Q译QStruts Menu开发向?/font>  官方英文版向|http://struts-menu.sourceforge.net/userguide.htmlQ?

一、从1.X升?.X需要做以下事情Q?br />1、改变你的taglib声明中的URI?br /> <% at taglib uri="http://struts-menu.sf.net/tag" prefix="menu" %>
2、改?lt;plug-in>,使用新的包名"net.sf.navigator." ?br /> <plug-in className="net.sf.navigator.menu.MenuPlugIn">
3、改变你的menu-config.xml文gQ用新的包?net.sf.navigator." ?br /> <Displayer name="Simple"
   type="net.sf.navigator.displayer.SimpleMenuDisplayer"/>

二、快速开始:
1、下载最新的struts-menu版本Q?br />2、解包到本地目录Q?br />3、下载Tomcat或者其它Servlet容器Q?br />4、把struts-menu.war包放入Tomcat安装目录的wabapps目录下,q启Tomcat服务?br />5、打开htpp://localhost:8080/struts-menu/

三、把Struts Menu整合C的应用程序中Q?br />Struts Menu能够被轻易的整合C的Struts应用E序中,它也可以整合C个非Struts的应用程序中Q但是我不喜Ƣ这样做Q所以在此没有提供相应的教程。这里将一步步的带你整合这个标{ֺ?br />你需要把struts-menu.jar攑ֈ你的WEB-INF/lib目录下。然后用URI标签声明你的JSP文g中想使用的这个标{ֺ?br />如果使用Struts Menu 2.1Q你q需?Jakarta's Standard Tag Library JAR包放入你的WEB-INF/lib目录下。下载地址Q?a >http://ibiblio.org/maven/taglibs/jars/standard-1.0.4.jarQ这个文件包括例EWAR包文件和二进制发布包?br />1、放入struts-menu.jar包到你的应用E序的WEB-INF/lib目录中?br />2、在你的struts-config.xml文g中加入plug-in讄?br /> <plug-in className="net.sf.navigator.menu.MenuPlugIn">
   <set-property property="menuConfig"
     value="/WEB-INF/menu-config.xml"/>
 </plug-in>

3、你需要在你的应用E序?WEB-INF/menu-config.xml文g中定义你的菜单,q里提供一个简单的片断Q?br /> <Menu name="contactMenu" title="Contact" location="?Contact">
   <Item name="email" title="E-Mail" location="?EMail"/>
   <Item name="phone" title="Phone" location="?Phone"/>
 </Menu>

  更多全面的例E,h看应用程序的web/WEB-INF目录中的menu-config.xml文gQ你可以截取一D作Z需要的菜单。完整的属性列表,可以查看MenuBase class's javadocsQ?a >http://struts-menu.source......avigator/menu/MenuBase.htmlQ?br />4、在你的JSP文g的顶部加入taglib声明Q?br /> <% at taglib uri="http://struts-menu.sf.net/tag" prefix="menu" %>
5、在你的JSP文g中要攄菜单的位|加入taglib代码Q?br /> <menu:useMenuDisplayer name="TabbedMenu"
   bundle="org.apache.struts.action.MESSAGE">
   <menu:displayMenu name="Home"/>
   <menu:displayMenu name="About"/>
 </menu:useMenuDisplayer>

  属性name="TabbedMenu"被定义在menu-config.xml文g的顶部:
 <Displayer name="TabbedMenu"
   type="net.sf.navigator.displayer.TabbedMenuDisplayer"/>

(译注Q其实到此步卛_在你的JSP文g中添加相应的菜单了,只不q是没有l合Velocity。在menu-config.xml文g的头部可以定义多个DisplayerQ每个Displayer都有name和type属性,name属性与JSP文g中menu:useMenuDisplayer标签的name属性相对应Q即表明使用何种样式Q具体的样式定义便在type属性中定义Qtype属性中是一个class。在menu-config.xml文g中的菜单定义中的name属性则与JSP文g中的menu:displayMenu标签的name属性相对应?

使用定制的Velocity模版实施你的菜单Q你需要整合VelocityC的WEB应用E序中。如果需要这样做的话Q请完成下面的步骤:
1、确定你的menu-config.xml文g有“Velocity”的displayer定义Q?br /> <Displayer name="Velocity"
     type="net.sf.navigator.displayer.VelocityMenuDisplayer"/>

2、加入Velocity的JARs包到你的WEB-INF/lib目录中,下蝲velocity-1.4-rc1.jarQ?a >http://www.ibiblio.org/ma......y/jars/velocity-1.4-rc1.jarQ和velocity-tools-view-1.0.jarQ?a >http://www.ibiblio.org/ma......velocity-tools-view-1.0.jarQ?
3、加入globalMacros.vmQ?a >http://cvs.sourceforge.net/viewcvs.py/*checkout*/struts-menu/navigator/web/WEB-INF/classes/globalMacros.vm?content-type=text%2Fplain&rev=1.1Q右键另存ؓQ)C的WEB-INF/lib目录中?br />4、改变你的JSP文g中displayer的gؓ“Velocity”,“config”属性指向一个文Ӟ如config="/templates/tabs.html"Q或者如果tabs.htm在你的WEB-INF/classes目录中的话,则可设config="tabs.html"?/p>

q里提供了一些用Velocity的displayer例子Q可在sample applicationQ?a >http://demo.raibledesigns.com/struts-menu/index.jspQ中查看。它L在你的菜单需要的时候显CCSSQJavaScript和图像文件。下面有一些在当前的Struts Menu中用到的Velocity模版的例子的链接Q?br /> CoolMenus: DemoQ?a >http://demo.raibledesigns......menu/velocity-coolmenu4.jspQ?
    TemplateQ?a >http://struts-menu.sourceforge.net/templates/coolmenus.htmlQ?
 NiceTabs: Demo, Template
 Tabs: Demo, Template
 XTree: Demo, Template

所有相关的有用的文件如果你需要的话都可以在下面的站点上下载:
 Images Q?a >http://struts-menu.sourceforge.net/menu-images/Q?br /> Stylesheets Q?a >http://struts-menu.sourceforge.net/styles/Q?br /> Scripts Q?a >http://struts-menu.sourceforge.net/scripts/Q?br /> Templates Q?a >http://struts-menu.sourceforge.net/templates/Q?/p>

更多的基于roles的显C?隐藏菜单的信息,h看FAQsQ?a >http://struts-menu.sourceforge.net/faq.htmlQ?/p>

四、在Struts之外使用Struts Menu:
?.2版中QMenu Repository能够使用MenuContextListener载入Q?br /> <!--
    - Loads the menu-config.xml for struts-menu at startup,
    - by default from "/WEB-INF/menu-config.xml".
    - To override this, add a context-param named "menuConfigLocation"
    - web.xml file.
    -->
 <listener>
     <listener-class>net.sf.navigator.menu.MenuContextListener</listener-class>
 </listener>

或者如果你使用SpringQ甚xҎ。仅仅需要加入下面的部分C的applicationContext.xml文g中:
 <bean id="menu" class="net.sf.navigator.menu.MenuLoader">
   <property name="menuConfig">
     <value>/WEB-INF/menu-config.xml</value>
   </property>
 </bean>
 <!-- The menuConfig property is an optional attribute.  It is set to
     /WEB-INF/menu-config.xml by default. -->

感谢Dan Luputan提供MenuLoadercȝ源代码?/p>

五、从源文件编译:
要从源文件编译这个项目,执行下面的步骤:
1、下载ƈ安装MavenQ?a >http://maven.apache.org/Q;
2、创Z个环境变量MAVENQHOME指出你的Maven的安装目录,然后d$MAVEN_HOME/binC的PATH变量中;
3、操U这个目录你可以扩展源代码,执行“maven.jar”创建target/struts-menu.jar?/p>

要展开struts-menu例程Q需要下面的步骤Q?br />1、下载和安装TomcatQ?br />2、创Z个环境变量CATALINAQHOME指出你的Tomcat的安装目录;
3、执行“maven deploy”把应用E序展开到Tomcat中;
4、打开http://localhost:8080/struts-menu在你喜爱的浏览器中?/p>

如果你喜Ƣ用Eclipse开发项目,请参考此份开发向|http://struts-menu.sourceforge.net/devguide.htmlQ?



zhip 2007-03-29 13:40 发表评论
]]>
错误处理Loghttp://www.aygfsteel.com/zhip/archive/2007/01/07/92183.htmlzhipzhipSat, 06 Jan 2007 20:49:00 GMThttp://www.aygfsteel.com/zhip/archive/2007/01/07/92183.htmlhttp://www.aygfsteel.com/zhip/comments/92183.htmlhttp://www.aygfsteel.com/zhip/archive/2007/01/07/92183.html#Feedback0http://www.aygfsteel.com/zhip/comments/commentRss/92183.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/92183.html1、关于java.lang.OutOfMemoryError: Java heap space

java -Xms<initial heap size> -Xmx<maximum heap size>
Defaults are:
java -Xms32m -Xmx128m

如果你用win
/tomcat/bin/catalina.bat 加上下面的命?
set JAVA_OPTS=-Xms32m -Xmx256m

如果你用unix/linux
/tomcat/bin/catalina.sh 加上下面的命?
JAVA_OPTS="-Xms32m -Xmx256m"

 其中, -Xms128m指Java使用的最内存ؓ32MQ最大用内存ؓ256M


q里以tomcat环境ZQ其它WEB服务器如jboss,weblogic{是同一个道理?br />一、java.lang.OutOfMemoryError: PermGen space

PermGen space的全U是Permanent Generation space,是指内存的永久保存区?
q块内存主要是被JVM存放Class和Meta信息?Class在被Loader时就会被攑ֈPermGen space?
它和存放cd?Instance)的Heap区域不同,GC(Garbage Collection)不会在主E序q行期对
PermGen spaceq行清理Q所以如果你的应用中有很多CLASS的话,很可能出现PermGen space错误,
q种错误常见在web服务器对JSPq行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大?br />过了jvm默认的大?4M)那么׃产生此错误信息了?br />解决ҎQ?手动讄MaxPermSize大小

修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行Q?br />JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
Q将相同的第三方jar文gUȝ到tomcat/shared/lib目录下,q样可以辑ֈ减少jar 文档重复占用内存的目的?/p>

二、java.lang.OutOfMemoryError: Java heap space
Heap size 讄
JVM堆的讄是指javaE序q行q程中JVM可以调配使用的内存空间的讄.JVM在启动的时候会自动讄Heap size的|
其初始空??Xms)是物理内存的1/64Q最大空?-Xmx)是物理内存的1/4。可以利用JVM提供?Xmn -Xms -Xmx{选项?br />q行讄。Heap size 的大是Young Generation 和Tenured Generaion 之和?br />提示Q在JVM中如?8Q的旉是用于GC且可用的Heap size 不2Q的时候将抛出此异怿息?br />提示QHeap Size 最大不要超q可用物理内存的80Q,一般的要将-Xms?Xmx选项讄为相同,?Xmn?/4?Xmx倹{?
解决ҎQ手动设|Heap size
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行Q?br />JAVA_OPTS="-server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"

三、实例,以下l出1G内存环境下java jvm 的参数设|参考:

JAVA_OPTS="-server -Xms800m -Xmx800m  -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

2?font color="#000000">Tomcat启动时报filterStart出错(Error filterStart)

试着把tomat/server/lib目录下的commons-digester.jar,commons-beanutils.jar拯到common/lib/目录

q种Ҏ也许可以帮助解决此问题?/p>

zhip 2007-01-07 04:49 发表评论
]]>如何打jar?/title><link>http://www.aygfsteel.com/zhip/archive/2006/11/20/82332.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Mon, 20 Nov 2006 09:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhip/archive/2006/11/20/82332.html</guid><wfw:comment>http://www.aygfsteel.com/zhip/comments/82332.html</wfw:comment><comments>http://www.aygfsteel.com/zhip/archive/2006/11/20/82332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhip/comments/commentRss/82332.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhip/services/trackbacks/82332.html</trackback:ping><description><![CDATA[ <p>jar 应用 先打开命o提示W?win2000或在q行{里执行cmd命oQwin98为DOS提示W?Q输入jar -help,然后回R(如果你盘上已l有了jdk1.1或以上版?Q看C么:<br />用法Qjar {ctxu}[vfm0Mi] [jar-文g] [manifest-文g] [-C 目录] 文g?... </p> <p>选项Q?br />-c 创徏新的存档 <br />-t 列出存档内容的列?<br />-x 展开存档中的命名的(或所有的〕文?<br />-u 更新已存在的存档 <br />-v 生成详细输出到标准输Z <br />-f 指定存档文g?<br />-m 包含来自标明文g的标明信?<br />-0 只存储方式;未用ZIP压羃格式 <br />-M 不生所有项的清单(manifest〕文?<br />-i 为指定的jar文g产生索引信息 <br />-C 改变到指定的目录Qƈ且包含下列文Ӟ </p> <p>如果一个文件名是一个目录,它将被递归处理?br />清单Qmanifest〕文件名和存档文件名都需要被指定Q按'm' ?'f'标志指定的相同顺? </p> <p>CZ1Q将两个class文g存档C个名?'classes.jar' 的存档文件中Q?<br />jar cvf classes.jar Foo.class Bar.class </p> <p>CZ2Q用一个存在的清单QmanifestQ文?'mymanifest' ?foo/ 目录下的所有文件存档到一个名?'classes.jar' 的存档文件中Q?<br />jar cvfm classes.jar mymanifest -C foo/ . </p> <p>来个例子试试看Q?<br />我们只有一个HelloWorldQ如下:<br />public class HelloWorld{ <br />    public static void main(String[] args){ <br />        System.out.println("Hi, Hello World!"); <br />    } <br />}<br />我将q个java文g存到C盘跟目录下,okQ接下来Q?</p> <p>在先前打开的命令提C符?跌{到C盘提C符?Q我们输入javac HelloWorld.javaQ然后l输入:jar cvf hello.jar HelloWorld.classQ回车后M的C盘看看,多了什么,没错 hello.jar ?</p> <p>基本的步骤我们现在都知道了,你可以自己去试一下随着jar后面的参数的不同Q结果有什么变化?</p> <p>紧接着我们看看如何q行我们的jar包?</p> <p>在进入正题之前,你要先打开我们刚刚做好的jar包看看,多了什么呢QMETA-INF目录Q再看看里面是什么,q有一个MANIFEST.MF文g是不是?用文本编辑器(我这里是UltraEdit)打开它看看: <br />Manifest-Version: 1.0 <br />Created-By: 1.4.2 (Sun Microsystems Inc.) </p> <p>是q样。这里我们对它进行修改,加一句:Main-Class: HelloWorld (在第三行)。这个就是我们之前写的那个类Q也是我们的入口类。也卻I <br />Manifest-Version: 1.0 <br />Created-By: 1.4.2 (Sun Microsystems Inc.) <br />Main-Class: HelloWorld </p> <p>接下来,我们在命令提C符里执行: <br />jar umf MANIFEST.MF app.jar </p> <p>q样我们使用了我们自qMANIFEST.MF文g对原来默认的q行了更新。你不妨可以再进ȝ看是不是M了Main-Class: HelloWorldq一句?</p> <p>OkQ这个最后的一步了Q来验证我们做的一切,在命令提C符中输入: <br />java -jar hello.jar(执行) </p> <p>出现了什么,――Hi, Hello World! <br />我们再来看看jar文g在tomcat中发布,注意Q在tomcat中我们就不能再用jarq种格式Q而改war格式Q它是专门用于web应用的,其实整个q程下来基本上和jar是类似的Q?</p> <p>先准备我们要打包的资源?</p> <p>扑ֈ存放tomcat的webapps目录Q进到其中,新徏一个文件夹Q这里命名ؓhelloQ再q去新徏WEB-INF文g夹,再进L?classes文g夹,此时我们也将我们唯一的servletQHelloWorld.java攑ֈq里Q在与classes目录同下徏立一文g web.xml。OkQ目前我们初步徏立了一个简单的web应用?</p> <p>在命令提C符下进到先前创制的hello目录下,执行 jar cvf hello.war * Q我们便得到hello.war。将它拷贝至webapps目录下,okQ来看最后一步,打开tomcat的目录conf中的server.xmlQ加入:<br />reloadable="true"/> <br />大功告成Q运行它Q启动tomcatQ后在浏览器中输?a href="http://localhost:8080/hello/HelloWorld"><font color="#fecd2a">http://localhost:8080/hello/HelloWorld</font></a>Q有了吗Q?</p> <p>好了Q就q么多,希望对你有点帮助?/p> <p>补充Q?<br />############ </p> <p>jar基本操作Q?</p> <p>############ </p> <p>1. 创徏jar文g <br />jar cf jar-file input-file(s) <br />c---want to Create a JAR file. <br />f---want the output to go to a file rather than to stdout. <br />eg: 1)jar cf myjar.jar query_maintain_insert.htm <br />2)jar cvf myjar.jar query_maintain_insert.htm <br />v---Produces verbose(详细? output. <br />3)jar cvf myjar.jar query_maintain_insert.htm mydirectory <br />4)jar cv0f myjar.jar query_maintain_insert.htm mydirectory <br />0---don't want the JAR file to be compressed. <br />5)jar cmf MANIFEST.MF myjar.jar yahh.txt <br />m---Used to include manifest information from an existing manifest file. <br />6)jar cMf MANIFEST.MF myjar.jar yahh.txt <br />M---the default manifest file should not be produced. <br />7)jar cvf myjar.jar * <br />*---create all contents in current directory. <br />2. 察看jar文g <br />jar tf jar-file <br />t---want to view the Table of contents of the JAR file. <br />eg: 1)jar vft yahh.jar <br />v---Produces verbose(详细? output. <br />3. 提取jar文g <br />jar xf jar-file [archived-file(s)] <br />x---want to extract files from the JAR archive. <br />eg: 1)jar xf yahh.jar yahh.txt(仅提取文件yahh.txt) <br />2)jar xf yahh.jar alex/yahhalex.txt(仅提取目录alex下的文gyahhalex.txt) <br />3)jar xf yahh.jar(提取该jar包中的所有文件或目录) <br />4. 修改Manifest文g <br />jar cmf manifest-addition jar-file input-file(s) <br />m---Used to include manifest information from an existing manifest file. <br />5. 更新jar文g<br />jar uf jar-file input-file(s) <br />u---want to update an existing JAR file. </p> <p>-->生成exe:<--</p> <p> <br />W一E:在jbuilder中:      <br />首先你要保证Run菜单-->Run    Project能顺利运行    ?<br />然后Wizards菜单-->Native    Executable    Builder      <br />选中Compress    the    contents    of    the    archive(产生jar文g的话)      <br />Next-->Next-->选中Always    include    all    classes    and    resources再Next-->Next-->Next      <br />选中Windows    GUI"exe"(产生EXE文g的话)-->Finish      <br />再在目的文件列表中的Native    Executable叛_-->Make可以了      <br />   <br />W二E:在cmd    下生成jar文g      <br />abc.txt内容如下Q    ?<br />Manifest-Version:    1.0          <br />Main-Class:    main-class-name(回車)      <br />在cmd下:          <br />javac    *.java      <br />jar    cvfm    abc.jar    abc.txt    *.class      <br />CZ——生成能通过鼠标双击执行的.jar文g      <br />一、          ?~写Java源程序Test.java如下Q    ?</p> <p>//    Test.java      <br />import    javax.swing.*;      <br />/**      <br />*    @(#)    Test.java      <br />*    Copyleft    (c)    2002    RatKing      <br />*    @author    <a    href="<a href="mailto:ratking@ynet.com">RatKing</a"><font color="#fecd2a">ratking@ynet.com">RatKing</a</font></a>>      <br />*    @version    0.1,    2002-11-7      <br />*    描述Q一?nobr><a class="iAs" oncontextmenu="return false;" onmousemove="kwM(4);" onmouseover="kwE(event,4);" style="CURSOR: hand; COLOR: #0000ff; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="window.open('http://114.vnet.cn/search_web.html?id=148&kw=试','_blank');" onmouseout="kwL(event);" target="_blank">试</a></nobr>用的Java    Application      <br />*/      <br />public    class    Test    extends    JFrame    {      <br />             public    Test(String    title)    {      <br />                             super(title);      <br />                             this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      <br />                             this.getContentPane().add(new    JLabel("试Q?,    JLabel.CENTER),    SwingConstants.CENTER);      <br />                             this.pack();      <br />             }      <br />   <br />             public    static    void    main(String[]    args)    {      <br />                             try    {      <br />                                             //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());      <br />                                             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());      <br />                             }    catch(Exception    e)    {      <br />                                             e.printStackTrace();      <br />                             }      <br />                             Test    t    =    new    Test("Test    -    试");      <br />                             t.setVisible(true);      <br />             }      <br />}      <br />   </p> <p>二、编译Test.java为Test.classQ当然假设你事先已经讄好了JDK的环境变量PATH和CLASSPATHQ    ?<br />在命令行执行~译命oQ    ?<br />javac    Test.java      <br />   <br />三、用文本~辑器(比如C?UltraEdit{  ?-    甚至用ECHO命o加管道?gt;>”)~写如下manifest文gQƈ保存为abc.txt      <br />   <br />Manifest-Version:    1.0      <br />Main-Class:    Test      <br />   <br />【注意】文件abc.txt内必L3行文本:      <br />W一行的内容依次是:“Manifest”、英文减受“Version”、英文冒受英文空根{数字?”、英文句受数字?”    ?<br />W二行的英文冒号与Test之间必须要有一个英文空|Q!      <br />W三行是一个空行,也就是说Q你要在Test之后键入一个回车,然后才可以存盘退出!Q!      <br />如果冒号后面没有I格Q可以生成jar文g但不能执行;如果Test后没有回车符Q则生成jar文g时会报错。    ?<br />   <br />四、将Test.class打包?jar文gQƈ使用abc.txt指明哪一个是带有public    static    void    main()的“主函数”    ?<br />在命令行执行~译命oQ    ?<br />jar    cvfm    Test.jar    abc.txt    *.class      <br />   <br />你可以用WinZip之类的解?nobr><a class="iAs" oncontextmenu="return false;" onmousemove="kwM(2);" onmouseover="kwE(event,2);" style="CURSOR: hand; COLOR: #0000ff; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="window.open('http://114.vnet.cn/search_web.html?id=148&kw=软g','_blank');" onmouseout="kwL(event);" target="_blank">软g</a></nobr>看一看刚刚生成的Test.jar文g里到底有什么。    ?<br />   <br />五、用鼠标双击Test.jar的图标,应该可以看到Test执行后的H口。    ?<br />   <br />〖说明〗如果你正确地安装了Javaq行环境QJREQ,那么.jar的图标应该是象一늺q有一个A的ŞӞ如同写字板的图标。    ?<br />如果你的.jar文g默认的打开兌不对Q可以重新设|:      <br />我的<nobr><a class="iAs" oncontextmenu="return false;" onmousemove="kwM(6);" onmouseover="kwE(event,6);" style="CURSOR: hand; COLOR: #0000ff; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="window.open('http://114.vnet.cn/search_web.html?id=148&kw=电脑','_blank');" onmouseout="kwL(event);" target="_blank">电脑</a></nobr>->查看(Win9x)或工?Win2k)->文g多w项->文gcd->选择JAR文g->~辑该类型文件的属?>操作栏填入[    open    ](不填引号和中括号[])Qƈ在“执行操作的应用E序”栏填入[    "C:\Program    Files\Java\j2re1.4.1\bin\javaw.exe"    -jar    "%1"    %*    ](填两对英文引P不填[])      <br />q按“确定”、“关闭”退出对.jar文g兌的编辑。    ?<br />Q你的javaw.exe文g是不是位于C:\Program    Files\Java\j2re1.4.1\bin\路径下,视你自己电脑的情况而定Q    ?</p> <p> <br />我这也是|上的脓子?<br />---------------------------------------------------------------  </p> <p>JB中生?exe文g  <br />1、菜单中选择【Wizards】-【Native  Executable  Builder....】弹出对话框  <br />2、在弹出的对话框中第一步(Step  1  of  7Q的【Name】输入一个名Uͼq取消【Always  create  archive  when  building  the  project】点凅RNext】?<br />3、根据需要悬着需要的c,再选择【Include  class  dependencies】,点击【Next】?<br />4、根据需要悬着需要的库文Ӟ再选择下面?个单?反复所有的需要的库,点击【Next】?<br />5、默认点凅RNext】?<br />6、在QStep  5  of  7Q的时候选择一个主c运行点凅RNext】?<br />7、在QStep  6  of  7Q的时候选择q行q_【Next】?<br />8、默认点凅RFinish】,q时候在工程的目录窗口出C一个在QStep  1  of  7Q输入的【Name】目录?<br />9、右击这个目录,选择【Rebuild....】,Jbuilder开始编译和创徏执行文g或是Jar文g了?<br />10、等完成之后Q该目录下右几个文gQ一般是有至一个jar文gQ或是一个exe文g  <br />11、在Window打开工程所在的目录Q就可以看到里面的有几个刚才~译的文件?<br />12、执行jar是用java  -jar  ***.jar、执行exe直接双击  </p> <p> <br />---------------------------------------------------------------  </p> <p>1、不使用jb因ؓ打包后,可执行文件的图标改不了且jb的可执行文g实际上是可执行的jar文gQ可以将其exe扩展名改为jar一样可执行。?<br />2、还是用jsmooth较好Q首先编写menifest文g目的指明mainc,使用jar命o打包成可执行jar文gQ让后用开源的jsmooth做成exe?</p> <img src ="http://www.aygfsteel.com/zhip/aggbug/82332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhip/" target="_blank">zhip</a> 2006-11-20 17:22 <a href="http://www.aygfsteel.com/zhip/archive/2006/11/20/82332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用javamail发送html邮g[转]http://www.aygfsteel.com/zhip/archive/2006/09/28/72606.htmlzhipzhipThu, 28 Sep 2006 07:57:00 GMThttp://www.aygfsteel.com/zhip/archive/2006/09/28/72606.htmlhttp://www.aygfsteel.com/zhip/comments/72606.htmlhttp://www.aygfsteel.com/zhip/archive/2006/09/28/72606.html#Feedback0http://www.aygfsteel.com/zhip/comments/commentRss/72606.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/72606.html

使用javamail发送html邮g比较复杂

http://www.52z.com/soft/1644.html
http://down.jdxz.net/downinfo/8080.html
http://www.skycn.com/soft/10940.html
package org.tatan.mail;

import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import javax.mail.Session;
import javax.mail.MessagingException;
import javax.mail.Transport;

public class SendHtmlMail {
    public static void sendMessage(String smtpHost,
                                   String from, String to,
                                   String subject, String messageText)
            throws MessagingException,java.io.UnsupportedEncodingException {

        // Step 1:  Configure the mail session
        System.out.println("Configuring mail session for: " + smtpHost);
        java.util.Properties props = new java.util.Properties();
        props.setProperty("mail.smtp.auth", "true");//指定是否需要SMTP验证
        props.setProperty("mail.smtp.host", smtpHost);//指定SMTP服务?br />        props.put("mail.transport.protocol", "smtp");
        Session mailSession = Session.getDefaultInstance(props);
        mailSession.setDebug(true);//是否在控制台昄debug信息

        // Step 2:  Construct the message
        System.out.println("Constructing message -  from=" + from + "  to=" + to);
        InternetAddress fromAddress = new InternetAddress(from);
        InternetAddress toAddress = new InternetAddress(to);

        MimeMessage testMessage = new MimeMessage(mailSession);
        testMessage.setFrom(fromAddress);
        testMessage.addRecipient(javax.mail.Message.RecipientType.TO, toAddress);
        testMessage.setSentDate(new java.util.Date());
        testMessage.setSubject(MimeUtility.encodeText(subject,"gb2312","B"));

        testMessage.setContent(messageText, "text/html;charset=gb2312");
        System.out.println("Message constructed");

        // Step 3:  Now send the message
        Transport transport = mailSession.getTransport("smtp");
        transport.connect(smtpHost, "webmaster", "password");
        transport.sendMessage(testMessage, testMessage.getAllRecipients());
        transport.close();


        System.out.println("Message sent!");
    }

    public static void main(String[] args) {

        String smtpHost = "localhost";
        String from = "webmaster@mymail.com";
        String to = "mfc42d@sohu.com";
        String subject = "html邮g试"; //subject javamail自动转码

        StringBuffer theMessage = new StringBuffer();
        theMessage.append("<h2><font color=red>q倒霉孩子</font></h2>");
        theMessage.append("<hr>");
        theMessage.append("<i>q年失望q年?lt;/i>");

        try {
            SendHtmlMail.sendMessage(smtpHost, from, to, subject, theMessage.toString());
        }
        catch (javax.mail.MessagingException exc) {
            exc.printStackTrace();
        }
        catch (java.io.UnsupportedEncodingException exc) {
            exc.printStackTrace();
        }
    }
}
邮g?参见RFC822QRFC2047)只能包含US-ASCII字符?br />邮g头中M包含非US-ASCII字符的部分必进行编码,使其只包含US-ASCII字符?br />但是java mail可以ҎJVM发送中文邮件自行编码,Q用它自带的MimeUtilitycȝencodeTextҎ对中文信息进行编码也可以?br />邮g正文必须有charset=gb2312否则?br />Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
打开邮gZؕ?讄charset=gb2312?br />Content-Type: text/html;charset=gb2312
Content-Transfer-Encoding: quoted-printable
它不能用MimeUtility里的Ҏ来编码?br />邮g正文的编码方式的信息是要攑֜Content-Transfer-Encodingq个邮g头参C的,
而MimeUtility里面的方法是编码方式的信息攑֜~码后的正文内容中?br />所以如果你Ҏ文也用MimeUtilityq行处理Q那么其他邮件程序就不会正常昄你编码的邮gQ?br />因ؓ其他邮g软g如outlook,foxmail只会ҎContent-Transfer-Encodingq个里面的信息来寚w件正文进行解码?/p>

zhip 2006-09-28 15:57 发表评论
]]>
javamail发送带有附件的html邮g[转]http://www.aygfsteel.com/zhip/archive/2006/09/28/72600.htmlzhipzhipThu, 28 Sep 2006 07:51:00 GMThttp://www.aygfsteel.com/zhip/archive/2006/09/28/72600.htmlhttp://www.aygfsteel.com/zhip/comments/72600.htmlhttp://www.aygfsteel.com/zhip/archive/2006/09/28/72600.html#Feedback0http://www.aygfsteel.com/zhip/comments/commentRss/72600.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/72600.htmlpackage org.tatan.mail;

import javax.mail.Session;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;
import javax.activation.FileDataSource;
import javax.activation.DataHandler;


public class SendAttachMail {
    public static void sendMessage(String smtpHost,
                                   String from, String to,
                                   String subject, String messageText,
                                   String fileName)
            throws MessagingException {

        // Step 1:  Configure the mail session
        java.util.Properties props = new java.util.Properties();
        props.setProperty("mail.smtp.auth", "true");//指定是否需要SMTP验证
        props.setProperty("mail.smtp.host", smtpHost);//指定SMTP服务?br />        props.put("mail.transport.protocol", "smtp");
        Session mailSession = Session.getDefaultInstance(props);
        mailSession.setDebug(true);//是否在控制台昄debug信息

        // Step 2:  Construct the message
        System.out.println("Constructing message -  from=" + from + "  to=" + to);
        InternetAddress fromAddress = new InternetAddress(from);
        InternetAddress toAddress = new InternetAddress(to);

        MimeMessage testMessage = new MimeMessage(mailSession);
        testMessage.setFrom(fromAddress);
        testMessage.addRecipient(javax.mail.Message.RecipientType.TO, toAddress);
        testMessage.setSentDate(new java.util.Date());
        testMessage.setSubject(subject);

        //  Step 3:  Create a body part to hold the "text" portion of the message
        System.out.println("Constructing 'text' body part");
        MimeBodyPart textBodyPart = new MimeBodyPart();
        textBodyPart.setContent(messageText,"text/html;charset=gb2312");

        //  Step 4:  Create a body part to hold the "file" portion of the message
        System.out.println("Attaching 'file' body part: " + fileName);
        MimeBodyPart fileBodyPart = new MimeBodyPart();
        FileDataSource fds = new FileDataSource("c:\\a.rar");
        fileBodyPart.setDataHandler(new DataHandler(fds));
        fileBodyPart.setFileName(fds.getName());
        System.out.println("Finished attaching file");

        // Step 5:  Create a Multipart/container and add the parts
        Multipart container = new MimeMultipart();
        container.addBodyPart(textBodyPart);
        container.addBodyPart(fileBodyPart);

        // Step 6:  Add the Multipart to the actual message
        testMessage.setContent(container);
        System.out.println("Message constructed");

        // Step 7:  Now send the message
        Transport transport = mailSession.getTransport("smtp");
        transport.connect(smtpHost, "webmaster", "password");
        transport.sendMessage(testMessage, testMessage.getAllRecipients());
        transport.close();


        System.out.println("Message sent!");
    }

    public static void main(String[] args) {

        String fileName = "a.rar";
        String smtpHost = "localhost";
        String from = "webmaster@mymail.com";
        String to = "mfc42d@sohu.com";
        String subject = "html邮g附g试"; //subject javamail自动转码
         StringBuffer theMessage = new StringBuffer();
        theMessage.append("<h2><font color=red>q倒霉孩子</font></h2>");
        theMessage.append("<hr>");
        theMessage.append("<i>q年失望q年?lt;/i>");

        try {
            SendAttachMail.sendMessage(smtpHost, from, to, subject, theMessage.toString(), fileName);
        }
        catch (javax.mail.MessagingException exc) {
            exc.printStackTrace();
        }
    }
}



zhip 2006-09-28 15:51 发表评论
]]>
各种q接池的比较http://www.aygfsteel.com/zhip/archive/2006/09/21/71154.htmlzhipzhipThu, 21 Sep 2006 08:49:00 GMThttp://www.aygfsteel.com/zhip/archive/2006/09/21/71154.htmlhttp://www.aygfsteel.com/zhip/comments/71154.htmlhttp://www.aygfsteel.com/zhip/archive/2006/09/21/71154.html#Feedback0http://www.aygfsteel.com/zhip/comments/commentRss/71154.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/71154.htmlhibernate开发组推荐c3p0Qspring开发组推荐dbcpQ但是dbcpq接池有weblogicq接池同L问题Q就是强行关闭连接或数据库重启后Q无?reconnect Q告诉连接被重置,q个讄可以解决。hibernate in action推荐c3p0和proxool?/font>

强烈推荐proxoolQ因Z不但可以监控后台。还可以有效的释放连接。在connection closeӞ也就是归qconnectionQ?br>关闭所有的statementQƈ且判断是否autocommitQ如果不行,rollbackQƈ且设|trueQ?br>可以参考proxool的org.logicalcobwebs.proxool.ConnectionResetterc?br>connection pool把connection reset|回initial state?br>dbcp的配|?br><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driverClassName}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>

 <property name="validationQuery">
<value>SELECT 1</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
</bean>

c3p0的配|, 注意?'driverClass' , 'jdbcUrl', 'user' , 'password'

<bean id="dataSource"
  class="com.mchange.v2.c3p0.ComboPooledDataSource"
  destroy-method="close">
  <property name="driverClass">
   <value>oracle.jdbc.driver.OracleDriver</value>
  </property>
  <property name="jdbcUrl">
   <value>jdbc:oracle:thin:@218.202.151.179:58580:ORA9I</value>
  </property>
  <property name="user">
   <value>oa</value>
  </property>
  <property name="password">
   <value>XXXX</value>
  </property>
  <property name="minPoolSize">
   <value>15</value>
  </property>
  <property name="acquireIncrement">
   <value>5</value>
  </property>
  <property name="maxPoolSize">
   <value>25</value>
  </property>

 

?/p>

<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass">
            <value>${db.driverClass}</value>
        </property>
        <property name="jdbcUrl">
            <value>${db.url}</value>
        </property>
         <!--
        <property name="user">
            <value>${db.user}</value>
        </property>
        <property name="password">
            <value>${db.pass}</value>
        </property>
        -->
        <property name="properties">
            <props>
                <prop key="c3p0.acquire_increment">5</prop>
                <prop key="c3p0.idle_test_period">100</prop>
                <prop key="c3p0.max_size">100</prop>
                <prop key="c3p0.max_statements">0</prop>
                <prop key="c3p0.min_size">10</prop>
                <prop key="user">${db.user}</prop>
                <prop key="password">${db.pass}</prop>
            </props>
        </property>
    </bean>
xapool的配|?br> <bean id="dataSource" class="org.enhydra.jdbc.pool.StandardPoolDataSource" destroy-method="stopPool">
    <constructor-arg index="0">
      <bean class="org.enhydra.jdbc.standard.StandardConnectionPoolDataSource">
        <property name="driverName"><value>com.mysql.jdbc.Driver</value></property>
        <property name="url"><value>jdbc:mysql://localhost/dbname</value></property>
      </bean>
    </constructor-arg>
    <property name="user"><value>root</value></property>
    <property name="password"><value>mypass</value></property>
    <property name="minSize"><value>1</value></property>
    <property name="maxSize"><value>5</value></property>
    <property name="jdbcTestStmt"><value>select 1</value></property>
  </bean>
c-jdbc的配|?br><bean id="dataSource" class="org.objectweb.cjdbc.driver.DataSource">
    <property name="url"><value>jdbc:cjdbc://127.0.0.1:25322/vdb?user=vuser</value></property>
  </bean>

weblogic的连接池解决办法:Test Reserved Connections: 如果选择了这个选项Q服务器会在把连接提供给客户端之?br>对其q行试?Test Created Connections: 如果选择了这个选项Q就会在创徏一个JDBC
q接之后和在把它d到JDBCq接池中的可用连接列表之前,对该JDBCq接q行试?/p>

tomcat的jndi关于dbcp的配|?

<parameter>
         <name>factory</name>
         <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
       </parameter>
       <parameter>
         <name>driverClassName</name>
         <value>com.sybase.jdbc2.jdbc.SybDriver</value>
       </parameter>
       <parameter>
         <name>url</name>
         <value>xyz</value>
       </parameter>
       <parameter>
         <name>username</name>
         <value>xyz</value>
       </parameter>
       <parameter>
         <name>password</name>
         <value>xyz</value>
       </parameter>
       <parameter>
         <name>maxActive</name>
         <value>5</value>
       </parameter>
       <parameter>
         <name>maxIdle</name>
         <value>5</value>
       </parameter>
       <parameter>
         <name>maxWait</name>
         <value>-1</value>
       </parameter>
       <parameter>
         <name>removeAbandoned</name>
         <value>true</value>
       </parameter>
       <parameter>
         <name>validationQuery</name>
         <value>select count(*) from sometable where 1 = 0</value>
       </parameter>
       <parameter>
         <name>testOnBorrow</name>
         <value>true</value>
       </parameter>
=================================================================

c3p0 q接?/h4>
    Hibernate 配置文g主要用于配置数据库连接和Hibernateq行时所需要的各种属性(如,q接池,SQL方言Q是否现实SQL日志{)?br>    Hibernate 同时支持 xml 格式的配|文件各传统?properties 文g配置形式Q这里采?xml ?br>    配置文g名默认ؓ hibernate.cfg.xmlQ或 hibernage.propertiesQ,Hibernate在初始化期间自动?classPath中寻找这个文Ӟq读取其中的配置信息Qƈ加蝲?br>    以下?hibernate.cfg.xml 文gQ在目 HibernateProject 的src 下放以下内容Q:
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
 <session-factory>
  
  <!-- 是否运行期生成的SQL输出到日志以供调?-->
  <property name="hibernate.show_sql">
   true
  </property>
  
  <!-- SQL 方言-->
  <property name="hibernate.dialect">
   org.hibernate.dialect.SQLServerDialect
  </property>
  
  <!-- 数据库用?-->
  <property name="hibernate.connection.username">
   sa
  </property>
  
  <!-- 数据库密?-->
  <property name="hibernate.connection.password">
   123456
  </property>
  
  <!-- 数据?JDBC 驱动-->
   <property name="hibernate.connection.driver_class">
   com.microsoft.jdbc.sqlserver.SQLServerDriver
  </property>
  
  <!-- 数据?URL -->
  <property name="hibernate.connection.url">
   jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hbdb
  </property>
  
  <!-- 事务理cd -->
  <!-- Hibernate 3 对包名做了修?Q?net.sf.hibernate  => org.hibernate Q?->
  <property name="hibernate.transaction.factory_class">
   org.hibernate.transaction.JDBCTransactionFactory
  </property>
  
  <!-- c3p0 q接?-->
  <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
  <property name="hibernate.c3p0.max_size">2</property>
  <property name="hibernate.c3p0.min_size">2</property>
  <property name="hibernate.c3p0.timeout">50000</property>
  <property name="hibernate.c3p0.max_statements">100</property>
  <property name="hibernate.c3p0.idle_test_period">3000</property>
  <property name="hibernate.c3p0.acquire_increment">2</property>
  <property name="hibernate.c3p0.validate">false</property>
 
  
  <!-- 映射的配|文Ӟ对应数据库表 KELA_STUDENT 的映文Ӟ在后面将看到q个文g的配|?-->
  <mapping resource="com/kela/hb/pojo/KelaStudent.hbm.xml"/>
 </session-factory>
</hibernate-configuration>



zhip 2006-09-21 16:49 发表评论
]]>javaq接常见数据库的q接字符?http://www.aygfsteel.com/zhip/archive/2006/09/20/70873.htmlzhipzhipWed, 20 Sep 2006 10:04:00 GMThttp://www.aygfsteel.com/zhip/archive/2006/09/20/70873.htmlhttp://www.aygfsteel.com/zhip/comments/70873.htmlhttp://www.aygfsteel.com/zhip/archive/2006/09/20/70873.html#Feedback0http://www.aygfsteel.com/zhip/comments/commentRss/70873.htmlhttp://www.aygfsteel.com/zhip/services/trackbacks/70873.htmlhttp://www.mysql.com)mm.mysql-2.0.2-bin.jar ;
Class.forName( "org.gjt.mm.mysql.Driver" ); 
cn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", sUsr, sPwd ); 
driver-url:jdbc:mysql://127.0.0.1:3306/ctcv?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8
driver-classQcom.mysql.jdbc.Driver
2. PostgreSQL(http://www.de.postgresql.org)pgjdbc2.jar ;
Class.forName( "org.postgresql.Driver" ); 
cn = DriverManager.getConnection( "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName", sUsr, sPwd ); 
3. Oracle(http://www.oracle.com/ip/deploy/database/oracle9i/)classes12.zip ;
Class.forName( "oracle.jdbc.driver.OracleDriver" ); 
cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd ); 
4. Sybase(http://jtds.sourceforge.net)jconn2.jar ;
Class.forName( "com.sybase.jdbc2.jdbc.SybDriver" ); 
cn = DriverManager.getConnection( "jdbc:sybase:Tds:MyDbComputerNameOrIP:2638", sUsr, sPwd ); 
// (Default-Username/Password: "dba"/"sql") 
5. Microsoft SQLServer(http://jtds.sourceforge.net) ;
Class.forName( "net.sourceforge.jtds.jdbc.Driver" ); 
cn = DriverManager.getConnection( "jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master", sUsr, sPwd ); 
6. Microsoft SQLServer(http://www.microsoft.com) ;
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" ); 
cn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master", sUsr, sPwd ); 
7. ODBC 
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); 
Connection cn = DriverManager.getConnection( "jdbc:odbc:" + sDsn, sUsr, sPwd );
8.DB2
Class.forName("Com.ibm.db2.jdbc.net.DB2Driver");
String url="jdbc:db2://192.9.200.108:6789/SAMPLE"
cn = DriverManager.getConnection( url, sUsr, sPwd );


zhip 2006-09-20 18:04 发表评论
]]>
վ֩ģ壺 ʷ| | | | | | | | | | ϲ| ɳ| ʼ| Һ| Ѱ| | | ׼| ƽ| | Ԫ| Ȩ| Ӱ| | ͷ| | ع| ¡| ɽ| ¯| ʳ| | ˮ| | ̩| | ͤ| | ƶ| ɽ| ݳ|