仓酷云
标题:
JAVA教程之Java功能之我见
[打印本页]
作者:
逍遥一派
时间:
2015-1-18 11:45
标题:
JAVA教程之Java功能之我见
到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。功能在开辟www.jobcn.com的时代,体系在运转的时分呈现了一些成绩,现将我的成绩办理办法做一个小结,供今后作项目标参考。并请人人不吝珠玉.
成绩1:
Resin的数据库毗连数量在程序运转中不休增加,最初毗连数量凌驾最年夜数,招致Resin服务封闭
缘故原由:
在操纵完数据库后,没有封闭数据库毗连;大概是前往了局集(Resultset),而没法在jsp中封闭数据库毗连。
办理办法:
1.在操纵完数据库要封闭数据库毗连。
2.只管不要前往了局集Resultset,能够前往Vector(一个字段)、Hashtable(多个字段),如许能够在javabean中封闭数据库。
3.假如javabean中前往的是了局集(Resultset),也能够在javaBean中写一个connectDB(毗连数据库)、closeDB(封闭数据库)的办法,然后jsp内里挪用connectDB(),创建数据库毗连,同时就能够对数据库举行操纵了,操纵数据库终了,能够经由过程closeDB()来封闭数据库。
4.封闭毗连时只管利用conn.close(),rs.close().....而不要别的写办法往封闭它,如挪用DB.closeConnection(conn)等等,如许实在对功能有必定影响,由于该功能经由了我对单个文件的测试.
5.封闭毗连时请按按次举行,如rs.close()..,stmt.close()..conn.close()....
成绩2:
在运转某一个jsp程序的时分,Resin的内存蓦地增加,并且居高不下。终极招致Resin内存不敷,乃至当机。
缘故原由:
过分利用内存。
办理办法:
1.因为数据量对照年夜,在对字符串举行操纵的时分,利用+举行字符串联接,而
信任人人对String都十分熟习,我们也常常要用它来做字符串的毗连甚么的,比方:
Stringa=b+cfile://b,c都是String
可是在实践的编译中倒是如许:
Stringa=newStringBuffer().append(b).append(c).toString()明显,在一个复杂的语句中却不测的多天生了2个对象:
.StringBuffer()
.toString前往的一个String
我们对照一下这两段程序的功能:
程序片段一:
StringBuffers=newStringBuffer();
longstart=System.currentTimeMillis();
for(inti=0;i<10000;i++){
s1+="a";
}
longstop=System.currentTimeMillis();
System.out.println(stop-start);
程序片段二:
StringBuffers=newStringBuffer(10000);//
longstart=System.currentTimeMillis();
for(inti=0;i<10000;i++){
s.append("a");
}
longstop=System.currentTimeMillis();
System.out.println(stop-start);
对照一下了局,差异很分明。
至于为何String的毗连这么做,由于String没法间接改动其长度,而必需接纳StringBuffer的用法。
因而倡议利用StringBuffer的append办法来举行字符串相连。
2.在办理这个成绩的时分,我也实验利用下面的办法,效果并非很分明(损耗内存上)。厥后在显现大批数据的时分,制止字符串相连的步骤,而间接利用out.println(),间接输入。
成绩3:Java其实不制止程序占用过量的内存,当对象向堆所哀求的内存不敷时,渣滓搜集器(GarbageCollector)就会主动启动,开释那些援用数为零的对象所占用的内存,Java也不会主动开释无用的对象的援用,假如程序健忘开释指向对象的援用,则程序运转时的内存跟着工夫的推移而增添,产生所谓内存泄露(memoryleaks),创立对象不仅损耗CPU的工夫和内存,同时,为开释对象内存JVM需一直地启动渣滓搜集器(GarbageCollector),这也会损耗大批的CPU工夫。
办理办法:因为在运转一段工夫jsp程序后,Resin的内存会有一个迟缓的增加,如许也会招致内存溢出,为了不这总征象的呈现,终极的办理办法是:编写一个servlet程序,在启动服务器的时分,启动一个这个servlet,每隔20分钟运转在服务器端运转一次,来准时接纳内存。
成绩4:
log文件内里的调试信息没有正文往失落。
办理办法:
在程序经由过程后,只管把调试的信息正文往失落。
同时在捕获毛病的时分要写明程序称号,便利查找.
成绩5
改良功能,进步速率。
详细实例:
我们再来看一个有关Vector类的代码片断:
for(intI=0;I<v.size();I++){System.out.println(v.get(I).getClass().toString());}
假如v包括100,000个元素,这个代码片断将挪用v.size()办法100,000次。固然size办法是一个复杂的办法,但它仍然必要一次办法挪用的开支,最少JVM必要为它设置和扫除仓库情况。在这里,for轮回外部的代码不会以任何体例修正Vector范例对象v的巨细,因而下面的代码最好改写成上面这类情势:
intsize=v.size();for(intI=0;I<size;I++){System.out.println(v.get(I).getClass().toString());}
固然这是一个复杂的修改,但它仍然博得了功能。究竟,每个CPU周期都是可贵的。
成绩6:
在jsp文件内里不要写<%@pageimport="java.lang.*"%>
由于java不必要引进此包就能够援用内里的类文件。
成绩7:
利用vector+hashtable一次前往查询了局resulset.
办理办法:纪录集:将一笔记录放到一个hashtable内里,然后把它再
增加到vector内里,轮回纪录下了局集,前往vector
详细见前面的java文件的部分代码(不包扩数据库的毗连和封闭)
packagecom.jobcn.company;
/********************************************
*****申明:
*****纪录集:一笔记任命放到一个hashtable内里,然后把它再
放到vector内里,轮回纪录下了局集,前往vector
*********************************************/
importjava.io.*;
importjava.sql.*;
importjava.util.*;
importjava.text.*;
publicclasshashtable_vector_rs
{
/*----------------------------------------------------------------*/
/*函数称号:getMultiRowInfo
/*功效形貌:前往纪录集,放到Hashtable内里
/*参数:sql语句,字段个数
/*前往值:乐成---htable,失利---null
/*----------------------------------------------------------------*/
publicVectorListResult(StringsqlStatement,intnum)
{
VectorListRs=newVector();
try
{
connectDB();
rs=stmt.executeQuery(sqlStatement);
//判别字段数据范例
//date型前往93
//int型前往2,4
//bigint型前往3
//String型前往12
//(char型)前往1
intt=-1;
rsmd=rs.getMetaData();
intColumnCount=0;
if(num>0)
ColumnCount=num;
else
ColumnCount=rsmd.getColumnCount();
while(rs.next())
{
Hashtablehtable=newHashtable();
for(inti=1;i<=ColumnCount;i++)
{
t=rsmd.getColumnType(i);
System.out.println("i="+i+",t="+t+"name="+rsmd.getColumnName(i));
if(t==12||t==1||t==3)
{
if(rs.getString(i)==null||rs.getString(i).equals(""))
htable.put(rsmd.getColumnName(i),"");
else
htable.put(rsmd.getColumnName(i),rs.getString(i));
}
elseif(t==93)
{
htable.put(rsmd.getColumnName(i),rs.getDate(i).toString());
}
elseif(t==2||t==4)
{
htable.put(rsmd.getColumnName(i),Integer.toString(rs.getInt(i)));
}
}
ListRs.add(htable);
}//e
returnListRs;
}
catch(ExceptionlistError)
{
System.out.println("数据库操纵失利!"+listError);
returnnull;
}
finally
{
try
{
closeDB();
}
catch(ExceptioncloseErr)
{
System.out.println("封闭数据库堕落:"+closeErr);
}
}
}
}
成绩8:jsp的程序也有计划的不敷公道的中央
比方:选择一个下拉框,提交一次,列出所选的数据,选择别的一个下拉框再次提交,再次列出所选的数据。
办理办法:
只管一次把前提选择终了,然后列出所选择的数据,而且在数据多的时分,只管利用翻页,削减运转工夫。
成绩9:功能优化,只管利用PreparedStatement
办理办法:
PreparedStatement对象和利用的一般的Statement对象有两点分歧。
第一,它们是为了功能更快而由JDBC驱动程序或数据库编译(预编译)的。
第二,它们承受一个或多个静态输出参数,称为IN参数。这两点让PreparedStatement对象合用于反复的SQL操纵,个中操纵基础上都是一样的,只要巨大的差别(如数据载进)。要让SQL语句在利用前准备好,在PreparedStatement对象创立时必需将SQL传送到JDBC驱动程序,而不是在其实行时才传送。
IN参数用SQLString中的?占位符暗示。在PreparedStatement可以乐成地实行前,还必需挪用PreparedStatement对象的setXXX()办法来设置IN参数,在这里XXX被设置的参数的数据范例所交换。因此,要将第一个IN参数设置为整数值100,您应当挪用setInt(1,100)。一样地,要将第二个IN参数设置为字符串值“rjb”,您应当挪用setString(2,"rjb")。最初一点是,设置好的参数值在设置为一个新的值,或用clearParameters()显式地扫除之前会坚持稳定。这很主要,由于PreparedStatement能够被屡次实行;假如您不注重的话,就会让您的数据库充斥无用数据。
成绩10:
1、把不必的jsp文件收拾.
成绩11:提交页面,每次都提交两次。
缘故原由:
1、
<inputtype="submit"name="sendit"value="发送"class=buttononclick="javascript:if(chkit())form_submit(broadcast_operation.jsp?s_coming=1&s_num=<%=str_num%>)">
这里假如type=”sbumit”,页面就会提交两次,(这个bug信任人人都晓得实在没需要提出来)
在onclick事务内里会提交一次,而submit按钮自己也会提交一次。
办理办法:
假如在onclick事务内里提交页面,按钮的范例type必定不成所以”submit或image”按钮。
能够是”button”.
办理办法:
往失落如许<metahttp-equiv="refresh"content="600">
的语句。
成绩13:在跳转到其余页面的时分,要加return。
不然大概会引发毛病。跳转不外往。
If{
request.getRequestDispatcher("/xxx/ErrorPage.jsp?s_mark=error:recordhaveexisted").forward(request,response);
return;
}
else
{
response.sendRedirect();
//倡议用下面的办法
return;
}
什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。
作者:
莫相离
时间:
2015-1-21 13:52
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
若相依
时间:
2015-1-26 22:43
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者:
只想知道
时间:
2015-1-31 20:50
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
再现理想
时间:
2015-2-6 22:30
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者:
深爱那片海
时间:
2015-2-8 20:56
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者:
爱飞
时间:
2015-2-12 07:46
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
活着的死人
时间:
2015-2-13 10:17
是一种使网页(Web Page)产生生动活泼画面的语言
作者:
再见西城
时间:
2015-2-21 08:50
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者:
第二个灵魂
时间:
2015-3-6 20:04
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者:
逍遥一派
时间:
2015-3-11 04:34
Java 编程语言的风格十分接近C、C++语言。
作者:
柔情似水
时间:
2015-3-17 20:10
是一种突破用户端机器环境和CPU
作者:
精灵巫婆
时间:
2015-3-20 22:38
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者:
小魔女
时间:
2015-3-23 18:04
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
飘飘悠悠
时间:
2015-3-24 07:26
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者:
蒙在股里
时间:
2015-3-24 22:03
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
不帅
时间:
2015-3-31 10:54
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者:
小妖女
时间:
2015-4-11 20:18
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者:
变相怪杰
时间:
2015-4-16 13:11
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者:
透明
时间:
2015-4-16 14:11
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2