1、java学习心得第一篇:java学习心得笔记j2ee学习笔记注:框架可以用 action=” ”);out.print(response.encodeurl(“sessionexample”);out.print(“form action=” ”);out.print(“method = get;”);2) out.print(“;url encoded ;”);3singlethreadmodel默认的,每一个servlet definition in a container只有一个servlet class的实例。只有实现了singlethreadmodel,container才会让ser
2、vlet有多个实例。servlet specification上建议,不要使用synchronized,而使用singlethreadmodel。singlethreadmodel(没有方法)保证servlet在同一时刻只处理一个客户的请求。singlethreadmodel是耗费资源的,特别是当有大量的请求发送给servlet时,singlethreadmodel的作用是使包容器以同步时钟的方式调用service方法。这等同于在servlet的service()方法种使用synchronized.single thread model一般使用在需要响应一个heavy request的时候,比
3、如是一个需要和数据库打交道的连接。2. 在重载servlet地init( )方法后,一定要记得调用super.init( );3. the client通过发送一个blank line表示它已经结束request而the server通过关闭the socket来表示response已结束了。4. 一个http servlet可以送三种东西给client1) a single status code2) any number of http headers3) a response body5. servlet之间信息共享的一个最简单的方法就是system.getproperties().pu
4、t(“key”,”value”);6. post和getpost:将form内各字段名称和内容放置在html header内传送给serverget:?之后的查询字符串要使用urlencode,经过urlencode后,这个字符串不再带有空格,以后将在server上恢复所带有的空格。get是中,可以通过serveltcontext的setattribute( )getattribute( )removeattribute( )来共享对象10. 利用request.getparameter( )得到的string存在字符集问题。可以用strtitle = request.getparameter
5、(“title”);strtitle = ent is the start tag, the end tag,and everything (including other elements) in targetnamespace=xmlns=content-type: text/xml; charset=utf-8content-length: nnnnsoapaction: some-urisoap-env:envelopexmlns:soap-env=http:/schemas.xmlsoap.org/soap/envelope/关。以下是你应该回避使用的一些java特色,并且在你的ej
6、b组件的实现代码中要严格限制它们的使用:1.使用static,非final 字段。建议你在ejb组件中把所有的static字段都声明为final型的。这样可以保证前后一致的运行期语义,使得ejb容器有可以在多个java虚拟机之间分发组件实例的灵活性。2.使用线程同步原语来同步多个组件实例的运行。避免这个问题,你就可以使ejb容器灵活的在多个java虚拟机之间分发组件实例。3.使用permission,java.io.reflect.reflectpermission,java.lang.security.securitypermission,以便加强先前所列出的编程限制。许多ejb容器没有加强
7、这些限制,他们希望ejb组件开发者能遵守这些编程限制或者是带有冒险想法违背了这些限制。违背这些限制的ejb组件,比标准方法依赖过多或过少的安全许可,都将很少能在多个ejb容器间移植。另外,代码中都将隐藏着一些不确定的、难以预测的问题。所有这些都足以使ejb组件开发者应该知道这些编程限制,同时也应该认真地遵守它们。任何违背了这些编程限制的ejb组件的实现代码在编译时都不能检查出来,因为这些特点都是java语言和j2se中不可缺少的部分。对于ejb组件的这些限制同样适用于ejb组件所使用的帮助/访问(helper/access)类,j2ee应用程序使用java文档(jar)文件格式打包到一个带.e
8、ar(代表enterprise archive)扩展名的文件中,这个ear文件对于发送给文件部署器来说是标准的格式。ear文件中包括在一个或多个ejbjar文件中的ejb组件,还可能有ejbjar所依赖的库文件。所有ear文件中的代码都是经过深思熟虑开发的应用程序并且都遵守编程限制和访问许可集。未来版本的规范可能会指定通过部署工具来定制安全许可的能力,通过这种方法指定了一个合法的组件应授予的许可权限,也指定了一个标准方法的需求:如从文件系统中读文件应有哪些要求。一些ejb容器/服务器目前在它们的部署工具中都提供了比标准权限或多或少的许可权限,这些并不是ejb1.1规范中所需要的。理解这些约束e
9、jb容器是ejb组件生存和执行的运行期环境,ejb容器为ejb组件实例提供了一些服务如:事务管理、安全持久化、资源访问、客户端连接。ejb容器也负责ejb组件实例整个生命期的管理、扩展问题以及并发处理。所以,ejb组件就这样寄居在一个被管理的执行环境中即ejb容器。因为ejb容器完全负责ejb组件的生命期、并发处理、资源访问、安全等等,所以与容器本身的锁定和并发管理相冲突的可能性就需要消除,许多限制都需要使用来填上潜在的安全漏洞。除了与ejb容器责任与安全冲突的问题,ejb组件还意味着仅仅聚焦于商务逻辑,它依赖于ejb容器所提供的服务而不是自己来直接解决底层的系统层的问题。可能的问题通常,ej
10、b组件在容器之间的移植不可避免地与如下问题相关:1.它需要依靠的受限制的特点在特定ejb容器中没有得到加强。2.它需要依靠的非标准的服务从容器中可获得。为了保证ejb组件的可移植性和一致的行为,你应该使用一个具有与java2平台安全策略集相一致的策略集的容器来测试ejb组件,并且其加强了前述的编程限制。总结ejb组件开发者应该知道这些推荐的关于ejb组件的编程限制,明白它们的重要性,并且从组件的稳定性和可移植性利益方面考虑来遵循它们。因为这些编程限制能阻止你使用标准的java语言的特点,违背了这些编程限制在编译时不会知道,并且加强这些限制也不是ejb容器的责任。所有这些原因都使你应很小心地遵守
11、这些编程限制,这些限制在组件的合同中已经成为了一个条款,并且它们对于建造可靠的、可移植的组件是非常重要的。2. 优化ejbentity bean为在应用程序和设计中描述持久化商业对象(persistent business objec ts)提供了一个清晰的模型。在java对象模型中,简单对象通常都是以一种简单的方式进行处理但是,很多商业对象所需要的事务化的持久性管理没有得到实现。entity bean将持久化机制封装在容器提供的服务里,并且隐藏了所有的复杂性。entity bean允许应用程序操纵他们就像处理一个一般的java对象应用。除了从调用代码中隐藏持久化的形式和机制外,entity
12、bean还允许ejb容器对对象的持久化进行优化,保证数据存储具有开放性,灵活性,以及可部署性。在一些基于ejb技术的项目中,广泛的使用oo技术导致了对entity bean的大量使用,sun的工程师们已经积累了很多使用entity bean的经验,这篇文章就详细阐述的这些卡发经验:*探索各种优化方法*提供性能优化和提高适用性的法则和建议*讨论如何避免一些教训。法则1:只要可以,尽量使用cmpcmp方式不仅减少了编码的工作量,而且在container中以及container产生的数据库访问代码中包括了许多优化的可能。container可以访问内存缓冲中的bean,这就允许它可以监视缓冲中的任何变
13、化。这样的话就在事物没有提交之前,如果缓存的数据没有变化就不用写到数据库中。就可以避免许多不必要的数据库写操作。另外一个优化是在调用find方法的时候。通常情况下find方法需要进行以下数据库操作:查找数据库中的纪录并且获得主键将纪录数据装入缓存cmp允许将这两步操作优化为一步就可以搞定。具体怎么做我也没弄明白,原文没有具体阐述法则2:写代码时尽量保证对bmp和cmp都支持许多情况下,ejb的开发者可能无法控制他们写的bean怎么样被部署,以及使用的container是不是支持cmp.一个有效的解决方案是,将商业逻辑的编码完全和持久化机制分离。再cmp类中实现商业逻辑,然后再编写一个bmp类,
14、用该类继承cmp类。这样的话,所有的商业逻辑都在cmp类中,而持久化机制在bmp中实现。我觉得这种情况在实际工作中很少遇到,但是作者解决问题的思路值得学习法则3:把ejbstore中的数据库访问减小到最少。如果使用bmp,设置一个缓存数据改变标志dirty非常有用。所有改变数据库中底层数据的操作,都要设置dirty,而在ejbstore()中,首先检测dirty的值,如果dirty的值没有改变,表明目前数据库中的数据与缓存的一致,就不必进行数据库操作了,反之,就要把缓存数据写入数据库。法则4:总是将从lookup和find中获得的引用进行缓存。(cache)引用缓存对session bean和
15、entity bean 都是适用的。通过jndi lookup获得ejb资源。比如datasource,bean的引用等等都要付出相当大的代价。因此应该避免多余的lookup.可以这样做:将这些引用定义为实例变量。从setentitycontext(session bean使用setsessioncontext)方法查找他们。setentitycontext方法对于一个bean实例只执行一次,所有的相关引用都在这一次中进行查找,这样查找的代价就不是那么昂贵了。应该避免在其他方法中查找引用。尤其是访问数据库的方法:ejbload()和ejbstore(),如果在这些频繁调用的方法中进行datas
16、ource的查找,势必造成时间的浪费。调用其他entity bean的finder方法也是一种重量级的调用。多次调用finder()方法的代价非常高。如果这种引用不适合放在setentitycontext这样的初始化时执行的方法中执行,就应该在适当的时候缓存finder的执行结果。只是要注意的是,如果这个引用只对当前的entity有效,你就需要在bean从缓冲池中取出来代表另外一个实体时清除掉这些引用。,这些操作应该在ejbactivate()中进行。法则5:总是使用prepare statements这条优化法则适用于所有访问关系数据库的操作。数据库在处理每一个sql statement的时
17、候,执行前都要对statement进行编译。一些数据库具有缓存statement和statement的编译后形式的功能。数据库可以把新的statement和缓存中的进行匹配。然而,如果要使用这一优化特性,新的statement要必须和缓存中的statement完全匹配。对于non-prepared statement,数据和statement本身作为一个字符串传递,这样由于前后调用的数据不同而不能匹配,就导致无法使用这种优化。而对于prepared statement,数据和statement是分开传递给数据库的,这样statement就可以和cache中已编译的statement进行匹配。s
18、tatement就不必每次都进行编译操作。从而使用该优化属性。这项技术在一些小型的数据库访问中能够减少statement将近90%的执行时间。法则6:完全关闭所有的statement在编写bmp的数据库访问代码时,记住一定要在数据库访问调用之后关闭statement,因为每个打开的statement对应于数据库中的一个打开的游标。security1加密对称加密(1)分组密码(2)流密码常用的对称加密算法:des和tripledesdash;ssl(se cure socketslayer),并且已经几乎成为了目前anager,并且 logincontext 已经认证了一个带有名为“admin”
19、的 com.ibm.resource.security.auth.principalexample 主体的 subject。清单 4. 一个简单的授权请求public class jaasexample public static void main(string args) ./ pleaction 类中。还要注意,调用类不要求为 jaasexampleaction 类代码源授予许可权,因为它实现了一个 privilegedaction。扩展 jaas大多数应用程序都有定制逻辑,它授权用户不仅仅在类上执行操作,而且还在该类的实例上执行操作。这种授权通常建立在用户和实例之间的关系上。这是 ja
20、as 的一个小缺点。然而,幸运的是,这样设计 jaas 使得 jaas 可以扩展。只要做一点工作,我们将可以扩展 jaas,使其包含一个通用的、类实例级的授权框架。在文章开头处我已经说明了,抽象类 javax.security.auth.policy 被用于代表 jaas 安全性策略。它的缺省实现是由 com.sun.security.auth.policyfile 类提供。policyfile 类从 jaas 格式的文件(象清单 3 中显示的那个一样)中读取策略。我们需要向这个文件添加一个东西为类实例级授权扩展策略定义:一个与许可权语句相关的可选关系参数。缺省 jaas 许可权语句的格式如下
21、:permission ; name, actions;我们在这个许可权语句的末尾添加一个可选的关系参数来完成策略定义。下面是新许可权语句的格式:permission ;name, actions, relationship;在为类实例级授权扩展 jaas 时要注意的最重要的一点是:许可权实现类必须有一个带三个参数的构造函数。第一个参数是名称参数,第二个是行为参数,最后一个是关系参数。解析新文件格式既然文件格式已经改变,就需要一个新的 javax.security.auth.policy 子类来解析文件。为简单起见,我们的示例使用了一个新的 javax.security.auth.policy
22、 子类 com.ibm.resource.security.auth.xmlpolicyfile,来从 xml 文件读取策略。在实际的企业应用程序中,关系数据库更适合执行这个任务。使用 xmlpolicyfile 类代替缺省的 jaas 访问控制策略实现的最容易的方法是向 java.security 属性文件添加 auth.policy.provider=com.ibm.resource.security.auth.xmlpolicyfile 条目。java.security 属性文件位于 java 2 平台运行时的 lib/security 目录下。清单 5 是与 xmlpolicyfile
23、 类一起使用的样本 xml 策略文件:清单 5. 一个 xml 策略文件;permission classname=com.ibm.resource.security.auth.resourcepermissionname=com.ibm.security.sample.auctionactions=issionname=com.ibm.security.sample.bidactions=acceptrelationship=ple.auction, create);accesscontroller.checkpermission(permission);所有者关系resourcepermi
24、ssion 类的 implies(permission p) 方法是这个框架的关键。implies() 方法就等同性比较名称和行为属性。如果定义了一个关系,那么必须把受保护的类实例(resource)传递到 resourcepermission 构造函数中。resourcepermission 类理解所有者关系。它将类实例的所有者与执行代码的 subject(用户)进行比较。特定关系被委托给受保护类的 fulfills() 方法。例如,在清单 5 中所示的 xml 策略文件中,只有 auction 类实例的所有者可以更新(写)文件。该类的 setter 方法使用清单 6 中显示的保护代码:清单
25、 6. 运行中的 implies(permission) 方法public void setname(string e = e().equals(ple.jarexampleactions.jarresourcesecurity.jar 文件包含允许实例级访问控制的 jaas 扩展框架。它还包含一个 loginmoduleexample 类,这个类从 xml 文件读取用户认证信息。用户标识和密码存储在 users.xml 文件中。用户组存储在 groups.xml 文件中。关于 loginmoduleexample 的更多信息,请参阅参考资料部分。该示例包含四个附加的文件:login.conf
26、policyresourcepolicy.xmlrun.bat在试图运行这个示例程序之前,请确保更新了 run.bat、policy 和 resourcepolicy.xml 文件中的路径。缺省情况下,所有的密码都是“anager)每个java application都可以有自己地security manager,但是默认地java application没有一个security manager可以通过下面地代码得到一个security managertrysystem.setsecuritymanager(e%/jre/lib/ext/*.jar如果光copy不ren为.jar是没有用的。4
27、. 事务处理本地事务java.sql.connection接口可以控制事务边界(即开始和结束)。在事务开始的时候调用setautocommit( false ), 而在中止事务时调用rollback或commit()方法。这类事务叫本地事务。分布式事务但是,在特定的情况下,可能有多个客户(例如两个不同的servlet或ejb组件)参与了同一个事务。或者,客户在同一个事务中可能会执行跨越多个数据库的数据库操作。jdbc2.0 optional package 同jta一起来实现分布式样事务。5. 一些技巧检索自动产生的关键字为了解决对获取自动产生的或自动增加的关键字的值的需求,jdbc 3.0
28、api 现在将获取这种值变得很轻松。要确定任何所产生的关键字的值,只要简单地在语句的 execute() 方法中指定一个可选的标记,表示您有兴趣获取产生的值。您感兴趣的程度可以是 statement.return_generated_keys,也可以是 statement.no_generated_keys。在执行这条语句后,所产生的关键字的值就会通过从 statement 的实例方法 getgeneratedkeys() 来检索 resultset 而获得。resultset 包含了每个所产生的关键字的列。清单 1 中的示例创建一个新的作者并返回对应的自动产生的关键字。清单 1. 检索自动产
29、生的关键字statement stmt = conn.createstatement();/ obtain the generated key that results from the query.stmt.executeupdate(insert into authors +(first_name, last_name) +values (george, anagers.a jts transaction manager provides transaction services to the parties involved in distributed transactions: th
30、e application server, the resource manager, the standalone transactional application, and the communication resource manager (crm).2jta1.1 事务处理的概念jta实际上是由两部分组成的:一个高级的事务性客户接口和一个低级的 x/open xa接口。我们关心的是高级客户接口,因为bean可以访问它,而且是推荐的客户应用程序的事务性接口。低级的xa接口是由ejb服务器和容器使用来自动协调事务和资源(如数据库)的1.1.1事务划分a程序划分使用usertransac
31、tion启动jta事务the usertransaction interface defines the methods that port java.util.*;import e.setvisible(true);class mouseframe extends jframepublic mouseframe()settitle(mouse test);setsize(default_ove(rectangle2d s)if(s=null) return;if(s=current) current=null;squares.remove(s);repaint();private stati
32、c final int side_length=20;/正方形的边长private arraylist squares;/存放所有已绘制的方块(鼠标有效绘制路径)private rectangle2d current;/当前需要绘制的方块private class mousehandler extends mouseadapter/* 当鼠标按钮被按下时,先查找当前点是否已经包含在前期图新内,* 否,则添加至数组列表*/public void mousepressed(mouseevent event)current=find(event.getpoint();if(current=null)
33、add(event.getpoint();/* 处理鼠标点击事件,如果当前点包含于图形之中,且鼠标连续点击两次以上,则擦除该图形。*/public void mouseclicked(mouseevent event)current=find(event.getpoint();if(current!=null & event.getclickcount()=2)remove(current);private class mousemotionhandler implements mousemotionlistener/* 改变鼠标形状h);*/public void mousemoved(mo
34、useevent event)if(find(event.getpoint()=null)setcursor(cursor.getdefaultcursor();elsesetcursor(cursor.getpredefinedcursor(cursor.crosshair_cursor);/* 拖动图形*/public void mousedragged(mouseevent event)if(current!=null)int x=event.getpoint().x;int y=event.getpoint().y;current.setframe(x-side_length/2,y-
35、side_length/2,side_length,side_lengt repaint();第三篇:关于java学习的一点心得体会管理科学与工程学院11信管2班孙鑫201*4548关于java学习的一点心得体会我是学信管专业的,这学期除了学习了java软件开发综合实验这门选修课外,还有自己本专业要学的java面向对象的程序设计。学习了近一学期的java课程,觉得是该总结自己的心得体会了。开始学习任何一门课(包括java),兴趣最重要。一直觉得自己在学习了计算机编程语言(也就是c语言),学到了很多东西,再学习java的话,应该问题不大,但在学习了几个星期后,还是明确感到了,有点吃力,于是趁学校
36、开设这门选修课,并且有自己院的老师讲解,还有了上机的机会,比自己自学省事多了,于是鼓足信心,开始了漫长的java征途。还记得我编写的第一个程序是简单的输出程序。当时自己不是很理解为什么main方法要这样来定义public static void main(string args),问了好多同学,他们告诉我的答案是一样的“java本身要求就是这样子的”,但我自己不甘心,就自己进行了探索:把main改个名字运行一下,看看报什么错误,然后根据出错信息进行分析;把main的public取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main方法是否一定要传一个string数组的,把st
37、ring改掉,改成int,或者string试试看;不知道是否必须写args参数名称的,也可以把args改成别的名字,看看运行结果如何。 结果一个简单程序反复改了七八次,不断运行,分析运行结果,最后就彻底明白为什么了main方法是这 1样定义的了。接着在以后的学习中我也采用这样的方法解决问题,却发现自己的速度比别人慢了好多,我就把自己的课余时间也分一部分给了java。因为基础是最重要的,只有基础牢固才有可能对后面的学习有更加深刻的认识!学习一门新的语言,参考书是离不开的。听专业课老师说订的教材偏难,不适合我们初学者,于是我在图书馆借了本参考书(一本篇幅较短的入门书来学习那些最简单、最基本的东西,
38、包括学习java语法等)。同时,对一个最简单的程序也应该多去调试,多想想如果改动一下会出现什么结果?为什么必须那样写?多去想想这些问题然后去操作,会让你有更多的收获。这样反复地思考是很有用的。在学习java的语法时,java的语法是类似c语言的,所以学习的比较轻松。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要用,怎么用,和同学一起讨论了好久才得以解决。在学习java的面向对象的编程语言的特性。比如继承,抽象类,方法的多态,重载,覆盖。对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很长很长时间,
39、因为学习java之前没有c+的经验,只有c语言的经验,花了很长时间,才彻底把这些概念都搞清楚,把书上面的例子反复的揣摩,修改,尝试,把那几章内容反复的看过来,看过去,看了很多遍,才彻底领悟了。此外,我对于static,public,private等等一开始都不是很懂,都是把书上面的例子运行成功,然后就开始破坏它,不断的根据自己心里面的疑问来重新改写程序,看看能不能运行,运行出来是个什么样子,是否可以得到预期的结果。这样虽然比较费时间,不过一个例子程序这样反复破坏几次之后。我就对这个相关的知识彻底学通了。有时候甚至故意写一些错误的代码来运行,看看能否得到预期的运行错误。这样对于编程的掌握是及其深
40、刻的。在学习java的过程中我得出这样的结论:1.学习中,要养成良好的习惯(写括号时要成对,字母大小写要区分,单词拼写要准确)。2在学习的过程中,最好不是仅仅停留在java表层,不是抄书上的例子运行出结果就可以。要注意,即便对一个简单的例子也要有耐心去琢磨、调试、改动。3在学习的过程中一定要动手做、试着写代码,而不是抱一本书看看就行。很多东西和体会必须自己动手才能真正属于自己。4. 在 java 的学习过程中,可能会遇到形形色色的问题不容易解决,应多去专业论坛了解相关的知识,书本上的知识有限。要会从网上搜索有用的信息 加以整理,促进学习的深入和知识水平的提高。看了好多网上课程,说学到一定程度要
41、尝试着自己做东西,但觉得自己仅仅经过一学期的学习,还远远不够,希望自己在以后学习中继续努力,能够真真正正拥有一门编程语言,对自己今后的发展起到作用。第四篇:java学习心得java学习心得一、 如何学好java?1. 就本人认为学好java关键就在于态度。态度是学习好java的前提,积极的态度注定你就比别人学得认真,自然最终学的一定比不认真的人学的好!2. 有良好的前提,不努力也不行的,所以呀!还得练习。要做到常练习,多看,多思考(举一反三,多方位的,全面的使你的程序更加的完美);3. 最后一点,就是多多交流!闭门造车永远是落后的学习方式,所以好要和身边的一切可以交流技术的人积极交流,毕竟个人
42、的力量有限的!二、 java中那些重要知识点!(本人认为最主要的是思想,知识点也很重要,关键是在学习中总结出自己的一套思想,好的枪手都是子弹喂出来的,好的程序员都是写代码写出来的)1 java数据类型a) 基本数据类型:byte、short、int、long、float、double、char、boolean(注意各自的取值范围,还有转换方式)b) 引用数据类型: 数组、类、接口。2 运算符号a) 算术运算符:+、 - 、* 、/ 、 %、+、-;b) 赋值运算符:=、+= 、-= 、*= 、/=、%=;c) 比较运算符:、=、!=;(返回值都是false/true) d) 逻辑运算符:&、|
43、、!e) 位运算符:用于操作二进制位的运算符:、4. 基本数据结构:a) 顺序结构b) 选择结构(ifelse,plements):一个类可以实现一个或多个接口,用逗号隔开。ii. 接口强调的是功能:hasa的问题!12. 多线程(thread类与runable接口)a) 主要方法:i.start()启动线程ii.iii.iv. run()程序运行的方法,功能实现区域 sleep()休眠,使程序处于休眠状态 interrupt()吵醒:吵醒处于休眠状态的程序,使进入正常状态;b) 线程同步(synchronized锁)关键在于this与object的区别,各自使用的范围与坏境。13. 流(in
44、put/output)a) 分类:主要是字节流与字符流,还有缓冲流,数据流,对象流b) 方法都差不多:主要是sdn因为我个人觉得它胜过任何一本编程参考书msdn是 microsoft 当前提供的有关编程信息的最全面的资源,它包含微软最新的技术数据库,加上易学易用的全文检索功能,让您迅速找到任何您需要的技术参考数据(二)加强自我管理,善于作自我总结,分析自已的优点及缺点中国境内百分之八十以上的领导人在百分之八十以上的场合的讲话中都有类似的观点,所以在这里我是不多说了,反正这一条用在什么行业什么地方都不会有错的,人生最大的敌人不是就是自已吗?管好自已认清自已,那还有什么搞不定的?(三)养成良好的文档习惯良好的文档是正规研发流程中非常重要的环节,一个好的程序是先写好设计文档再进行编程的,在设计文档