小妖女 发表于 2015-1-18 11:44:57

JAVA网页编程之Java功能探访

自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。功能在开辟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开发web只要两本书:一本是关于java基础的,一本是关于jsp、servlet的就可以了。开发周期长,我就来讲句题外话,现在有很多思想都是通过java来展现。

冷月葬花魂 发表于 2015-1-21 13:51:43

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

山那边是海 发表于 2015-1-30 19:35:42

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

活着的死人 发表于 2015-2-1 18:55:19

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

再见西城 发表于 2015-2-7 13:38:48

是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能

老尸 发表于 2015-2-22 02:49:30

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

不帅 发表于 2015-2-24 05:52:58

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

第二个灵魂 发表于 2015-3-8 17:30:09

Java是一种计算机编程语言,拥有跨平台、面向对java

乐观 发表于 2015-3-12 11:55:34

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

柔情似水 发表于 2015-3-19 21:35:13

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

小女巫 发表于 2015-3-27 12:55:58

是一种使用者不需花费很多时间学习的语言

变相怪杰 发表于 2015-3-30 10:50:30

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

爱飞 发表于 2015-4-7 08:37:14

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

灵魂腐蚀 发表于 2015-4-14 22:17:09

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

飘灵儿 发表于 2015-4-25 23:43:16

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

只想知道 发表于 2015-5-3 17:08:45

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

飘飘悠悠 发表于 2015-5-8 22:17:36

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

小魔女 发表于 2015-6-11 01:00:40

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

简单生活 发表于 2015-7-1 22:10:09

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
页: [1]
查看完整版本: JAVA网页编程之Java功能探访