JAVA基础学习心得

文章描述:-2022年4月13日发(作者:马烈孙)java基础学习心得第一篇:java学习需要什么基础第二篇:java基础要点总结学习java必看第三篇:java学习心得笔记第四篇:java学习心得第五篇:关于java学习的一点心得体会更多相关范文java学习需要什么基础随着java这种语言的广泛运用,越来越多从事开发的人员开始学习接触这门课程,那么,java学习需要什么基础?java刚刚入门应该接触哪些知

-

JAVA基础学习心得
2022年4月13日发
(作者:马烈孙)

java基础学习心得第一篇:java学习需要什么基础第二篇:java基础要点总结学

习java必看第三篇:java学习心得笔记第四篇:java学习心得第

五篇:关于java学习的一点心得体会更多相关范文

java学习需要什么基础随着java这种语言的广泛运用,越来越多从事开发的人员开始学

习接触这门课程,那么,java学习需要什么基础?java刚刚入门应

该接触哪些知识呢?java入门应该学习什么内容呢?首先要说明的,java有三个大的方向(j2se,j2me,j2ee),走不

同的方向可能学的技术和要花费的时间可能有所不同。我是搞web方

向的(j2ee),我学java除了以前一些简单的c语言语法外,没有

太多的编程基础,我以前一直认为编程要有很强的数学和英语功底,

现在看来这也不是必需,只要有一定的逻辑思维能力和掌握一些常见

的计算机词汇,还需要具备一定的自学能力,因为软件开发工作是需

要不断学习的。其次,我想说下我的学习过程,我在网上下载了java教学视频,

将java基础从头到尾看了一遍,将上面的代码基本上跟着敲了一遍,

然后我把java基础的书看了一遍,一本书看完包括上面的习题大概

做一遍差不多一个月。这时你对java的语法和基本知识应该都有比

较充分的认识和了解了。然后,再做一些小项目,跟着视频上的步骤做,最好能自己独立

再写写,能写多少是多少。一般网上比较新的的项目库很不好,因

为项目库是需要实时更新以保证适合市场需要的,而它的升级和更新

是需要钱的,所以去报一个培训中心利用它强大的项目库进行实战操

作是个很好的选择。操作一段时间之后,你对java已经有了一定的感觉,就要开始选

择你的发展方向了。我选择了j2ee,如果你也是想走这条路,你可

以接着看关于j2ee的视频,先是html+js+css,然后jsp+serverlet,

再看struts+spring+hibernate等一些框架。同时可以看一些大的培

训机构的关于设计模式的视频,最好是it牛人录制的,当然数据库

也得学下,然后加上做项目的经验累积,半年就差不多可以出去工作

了。如果你做其他方向的话我不是很了解。再说下我个人的看法,j2me

和j2se好像前景没j2ee好,不过我有同事是做android平台开发的,

这个不需要j2ee的知识,你可以去买本android的看看,这个方向

貌似很有前途,你应该也常听说android平台的手机,如果走这方向

可以再学一下linux知识和c的知识,因为这个平台底层是这些,这

也不是必要。说了这么多希望对大家能有所帮助。最后再说一句,学东西,最

重要的是动手,只有动手做了才能深深的理解,牢牢的记住。

java基础

程序是由1个或者n个class组成的程序

2.编写---javac进行编译------java进行执行

3.类名的命名:规范:第一个字母要大写第一字母必须是字母下

划线美圆符号人民币符号//

4.不是第一个字母的话可以是数字

5.文件名和类名的关系如果class前面没有public是可以不一

样的但是如果有的话必须一样

6.两个byteshort类型进行加减乘除的时候返回的结果是int

类型

/*需求:定义一个helloworld小程序。步骤:

1,通过class关键字定义一个类。将代码都编写到该类中。

2,为了保证该的独立运行。在类中定义个主函数。格式public

staticvoidmain(string[]args)3,保存成一个扩展名为java的

文件。

4,在dos控制台中通过javac工具对java文件进行编译。

5,在通过java命令对生成的class文件进行执行。

*/

classdemo//定义一个类。

{

//主函数。

publicstaticvoidmain(string[]args)

{

//输出语句。

n("hellohaha");

}

}

6.字符串数据和任何数据使用+都是相连接,最终都会变成字符串。

n("5+5"+(5+5));//"5+5=55"转义字符:通过来转变后面字母或者符号的含义。

n:换行。

b:退格。相当于backspace。

r:按下回车键。window系统,回车符是由两个字符来表示rn.

t:制表符。相当于tab键。

结构简写格式:变量=(条件表达式)?表达式1:

表达式2;三元运算符:好处:可以简化ifelse代码。弊端:因为是一个运算符,所以运算完必须要有一个结果。

classoperatedemo

{

publicstaticvoidmain(string[]args)

{

intx=7;

//逻辑运算符用于连接boolean类型的表达式。

//x>3&x

/*

true&true=true;

true&false=false;

false&true=false;

false&false=false;

&:只要两边的boolean表达式结果,有一个为false。那么结

果就是false。只有两边都为true,结果为true。

true|true=true;

true|false=true;

false|true=true;

false|false=false;

|:两边只要有一个为true,结果为true。只有两边都有false,结果为false。

^:异或;就是和|有点不一样。当true^true=false;

true^true=false;

true^false=true;

false^true=true;

false^false=false;

^:两边相同结果是false。两边不同结果是true。

&和&&的特点:

&:无论左边是true是false。右边都运算。

&&:当左边为false时,右边不运算。

|:两边都参与运算。

||:当左边为true。右边不运算。

intn=3,m=8;

n("n="+n+",m="+m);

1,通过第三方变量。

/*inttemp;temp=n;n=m;m=temp;

2不用第三方变量。

11=3+8;3=11-8;8=11-3;n=n+m;//如果n和m

的值非常大,容易超出int范围。m=n-m;

3.用^来交换

}

}n=n-m;n=n^m;m=n^m;//(n^m)^m;n=n^m;//n

^(n^m)n("n="+n+",m="+m);

if和switch语句很像。具体什么场景下,应用哪个语句呢?如果判断的具体数值不多,而是符合byteshortintchar这四

种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效

率稍高。其他情况:对区间判断,对结果为boolean类型判断,使用if,

if的使用范围更广。

j2ee学习笔记注:框架可以用word菜单中的“视图/文档结构图”看到

j2ee模式

valueobject(值对象)用于把数据从某个对象/层传递到其他对

象/层的任意java对象。通常不包含任何业务方法。也许设计有公共属性,或者提供可以获取属性值的get方法。

jsp

1.jsp的基础知识

__

_____|directive(指令)

||--script(敬请期待更好文章:)ing(脚本)

jsp-------||__action(动作)

|

|_____templatedata:除jsp语法外,jsp引擎不能解读的东

西

1)在jsp中使用的directive(指令)主要有三个:

a)page指令

b)include指令

c)taglib指令在jsp的任何地方,以任何顺序,一个页面可以包含任意数量的

page指令

2)scripting(脚本)包括三种类型

a);

b);

c);

3)action(动作)标准的动作类型有:

a);

b);

d);

e);

f);

g);

h);

1.注释:;

;

2.;

session可以不赋值,默认为true,如果session=”false”,则

在jsp页面中,隐含的变量session就不能使用。

3.请求控制器结构(requestcontroller)也被称之为jspmodel2architecture这种途径涉及到使用一个servlet或一个jsp作为一个应用程序

或一组页面的入口点。为创建可维护的jsp系统,requestcontroller是最有用的方式

之一。不是jsp,而是java类才是放置控制逻辑的正确的地方。请求控制器的命名模式为:请求控制器类的命名模式为:xxxrequestcontroller

2.jsp中的javabean

jsp三种bean的类型

1)页面bean

2)会话bean

3)应用bean大多数的系统会使用一个会话bean来保持状态,而对每一个页面

使用一个页面bean来对复杂的数据进行表示。页面bean是一个模型,而jsp是一个视图。

3.customtag

bean是信息的携带者,而tag更适用于处理信息。标记库包含一个标记库描述符(tld)和用于实现customtag的

java类在翻译阶段,jsp容器将使用tld来验证页面中的所有的tag是

否都被正确的使用。标记处理程序只是一个简单的适配器,而真正的逻辑是在另一个

类中实现的,标记处理程序只是提供了一个供其他的可复用的类的

jsp接口

servlet

1.servletconfig一个servletconfig对象是servletcontainer在servlet

initialization的时候传递给servlet的。

servletconfig包涵servletcontext和一些name/valuepair

(于deploymentdescriptor)servletcontext接口封装了web应用程序的上下文概念。

2.会话跟踪

1)session当一个client请求多个servlets时,一个session可以被多

个servlet共享。通常情况下,如果serverdetect到browser支持cookie,

那么url就不会重写。

2)cookie在javaservlet中,如果你光cookiecookie=new

cookie(name,value)那么当用户退出browser时,cookie会被删除掉,而不会被存储

在客户端的硬盘上。如果要存储cookie,需加一句age(200)cookie是跟某一个server相关的,运行在同一个server上

的servlet共享一个cookie.

3)urlrewriting在使用urlrewriting来维护sessionid的时候,每一次请求都

需要encodeurl()典型的用在两个地方

1)(“formaction=””);

(url(“sessionexample”));

(“formaction=””);

(“method=get>;”);

2)(“

;

(url(“

sessionexample?database=foo&

datavalue=bar”));

n(“”>;urlencoded;”

);

3.singlethreadmodel默认的,每一个servletdefinitioninacontainer只有一个

servletclass的实例。只有实现了singlethreadmodel,container才会让servlet有多

个实例。

servletspecification上建议,不要使用synchronized,而使

用singlethreadmodel。

singlethreadmodel(没有方法)保证servlet在同一时刻只处理一个客户的请求。

singlethreadmodel是耗费资源的,特别是当有大量的请求发送

给servlet时,singlethreadmodel的作用是使包容器以同步时钟的

方式调用service方法。这等同于在servlet的service()方法种使用synchronized.

singlethreadmodel一般使用在需要响应一个heavyrequest

的时候,比如是一个需要和数据库打交道的连接。

2.在重载servlet地init()方法后,一定要记得调用

();

ent通过发送一个blankline表示它已经结束request而theserver通过关闭thesocket来表示respe已结束了。

4.一个servlet可以送三种东西给client

1)asinglestatuscode

2)anynumberofheaders

3)arespebody

t之间信息共享的一个最简单的方法就是

perties().put(“key”,”value”);

和get

post:将form内各字段名称和内容放置在htmlheader内传送给

server

get:?之后的查询字符串要使用urlencode,经过urlencode后,

这个字符串不再带有空格,以后将在server上恢复所带有的空格。

get是web上最经常使用的一种请求方法,每个超链接都使用这

种方法。

就是webapplicatin的deploymentdescriptor作用有:组织各类元素设置initparam设置安全性

tdispatcher用来把接收到的requestforward

processing到另一个servlet要在一个respe里包含另一个servlet的output时,也要用

到requestdispatcher.

t和jsp在同一个jvm中,可以通过serveltcontext

setattribute()

getattribute()

removeattribute()来共享对象

10.利用ameter()得到的string存在字符集问

题。可以用strtitle=ameter(“title”);

strtitle=newstring(es(“8859-1”),”

gb2312”);如果你希望得到更大得兼容性

stringencoding=racterencoding();

//确定applicatierver用什么编码来读取输入的。

strtitle=newstring(es(encoding),”

gb2312”);

xml

1.xml基础知识

1.一个xml文档可以分成两个基本部分:首部(header)内容(content)

名字空间规范中指定:

xml文档中的每一个元素都处在一个名字空间中;如果没有指定

的名字空间,缺省的名字空间就是和该元素相关联的名字空间。

entthatiswell-formedobeysalloftherulesof

xmldocuments(nestedtags,etc.)

"ifawell-formeddocumentusesadocumenttypedefinition

(moreontheseinaminute),anditfollowsalltherulesof

thedtd,thenitisalsoavaliddocument

thetextbetweenthe;

"anelementisthestarttag,theendtag,andeverything

(includingotherelements)inbetween

5.标签(tags)实际上包含了“元素”(elements)和“属

性”(attributes)两部分。用元素(elements)来描述有规律的数据。用属性(attributes)来描述系统数据。如果你有一些数据要提供给某个应用程序,该数据就可能要用到

一个元素。如果该数据用于分类,或者用于告知应用程序如何处理某部分数

据,或者该数据从来没有直接对客户程序公开,那么它就可能成为一

种属性。

(读作:cdata)c是character的缩写。

/|

der

/|

ser

2.webservice

2.1webservice的基本概念

webservice是一种可以接收从inter或者intra上的其它系统中

传递过来的请求,轻量级的独立的通讯技术。这种技术允许网络上的所有系统进行交互。随着技术的发展,一

个web服务可以包含额外的指定功能并且可以在多个b2b应用中协作

通讯。

web服务可以理解请求中上下文的关系,并且在每一个特定的情

况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请

求的原因来改变不同的处理,用以产生一个唯一的,定制的方案。这

种协作机制对那些只对最终结果有兴趣的用户来说,是完全透明的。

uddi在用户能够调用web服务之前,必须确定这个服务内包含哪些商

务方法,到被调用的接口定义,还要在服务端来编制软件。所以,

我们需要一种方法来发布我们的web服务。

uddi(universaldescription,discovery,andintegration)

是一个主要针对web服务供应商和使用者的新项目。uddi项目中的

成员可以通过uddibusinessregistry(ubr)来操作web服务的调

用,ubr是一个全球性的服务。

web服务供应商可以在ubr中描述并且注册他们的服务。用户可以在ubr中查并定位那些他们需要的服务。

uddi是一种根据描述文档来引导系统查相应服务的机制。

uddi包含标准的“白皮书”类型的商业查询方式,“黄皮书”类型的局部查,以及“绿皮书”类型的服务类型查。

uddi利用soap消息机制(标准的xml/)来发布,,浏览以及查

注册信息。它采用xml格式来封装各种不同类型的数据,并且发送

到注册中心或者由注册中心来返回需要的数据。

wsdl对于商业用户来说,要到一个自己需要使用的服务,他必须知

道如何来调用。

wsdl(webservicesdescriptionlanguage)规范是一个描述接

口,语义以及web服务为了响应请求需要经常处理的工作的xml文档。

这将使简单地服务方便,快速地被描述和记录。以下是一个wsdl的样例:

;

targetnamespace="example./"

xmlns:tns="example./"

xmlns:xsd1="example./"

xmlns:soap="p/wsdl/soap/"

xmlns="p/wsdl/">;

;

xmlns=".w3/xx/10/xmlschema">;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

type="tns:stockquoteporttype">;

transport="p/soap/"/>;

;

soapaction="example./getlasttradeprice"/>;

;

;

;

;

;

;

;

;

;myfirstservice;

;

;

;

;

;

;它包含了以下的关键信息:消息的描述和格式定义可以通过xml文档中的;和;标记来传送。

;标记中表示了消息传送机制。(t-only,

request-respe,respe-only)。

;标记指定了编码的规范。

;标记中表示服务所处的位置(url)。

wsdl在uddi中总是作为一个接口描述文档。因为uddi是一个通

用的用来注册wsdl规范的地方,uddi的规范并不限制任何类型或者

格式描述文档。这些文档可能是一个wsdl文档,或者是一个正规的

包含导向文档的web页面,也可能只是一个包含联系信息的

地址。现在java提供了一个javaapiforwsdl(jwsdl)规范。它提供

了一套能快速处理wsdl文档的方法,并且不用直接对xml文档进行

操作,它会比jaxp更方便,更快速。

soap当商业用户通过uddi到你的wsdl描述文档后,他通过可以

simpleobjectaessprotocol(soap)调用你建立的web服务中的

一个或多个操作。

soap是xml文档形式的调用商业方法的规范,它可以支持不同的

底层接口,象(s)或者smtp。之所以使用xml是因为它的独立于编程语言,良好的可扩展性以

及强大的工业支持。之所以使用是因为几乎所有的网络系统都可以用

这种协议来通信,由于它是一种简单协议,所以可以与任何系统结合,

还有一个原因就是它可以利用80端口来穿越过防火墙。

soap的强大是因为它简单。soap是一种轻量级的,非常容易理解

的技术,并且很容易实现。它有工业支持,可以从各主要的电子商务

平台供应商那里获得。从技术角度来看,soap详细指明了如何响应不同的请求以及如何

对参数编码。一个soap封装了可选的头信息和正文,并且通常使用

post方法来传送到一个服务器,当然其他方法也是可以的,例如

smtp。soap同时支持消息传送和远程过程调用。以下是一个soap请

求。

post/stockquote/1.1

host:.stockquoteserver.

content-type:text/xml;charset="utf-8"

content-length:nnnn

soapaction:"some-uri"

xmlns:soap-env="p/soap/envelope/"关。以下是你应该回避使用的一些java特,并且在你的ejb组件的

实现代码中要严格限制它们的使用:

1.使用static,非final字段。建议你在ejb组件中把所有的

static字段都声明为final型的。这样可以保证前后一致的运行期

语义,使得ejb容器有可以在多个java虚拟机之间分发组件实例的

灵活性。

2.使用线程同步原语来同步多个组件实例的运行。避免这个问题,

你就可以使ejb容器灵活的在多个java虚拟机之间分发组件实例。

3.使用awt函数完成键盘的输入和显示输出。约束它的原因是服

务器方的商业组件意味着提供商业功能而不包括用户界面和键盘的

i/o功能。

4.使用文件访问/操作。ejb商业组件意味着使用资源管

理器如jdbc来存储和检索数据而不是使用文件系统api。同时,部

署工具提供了在部署描述器(descriptor)中存储环境实体,以至于

ejb组件可以通过环境命名上下文用一种标准的方法进行环境实体查

询。所以,使用文件系统的需求基本上是被排除了。

5.监听和接收socket连接,或者用socket进行多路发送。ejb

组件并不意味着提供网络socket服务器功能,但是,这个体系结构

使得ejb组件可以作为socket客户或是rmi客户并且可以和容器所

管理的环面的代码进行通讯。

6.使用映象api查询ejb组件由于安全规则所不能访问的类。这

个约束加强了java平台的安全性。

7.欲创建或获得一个类的加载器,设置或创建一个新的安全管理

器,停止java虚拟机,改变输入、输出和出错流。这个约束加强了

安全性同时保留了ejb容器管理运行环境的能力。

8.设置socket工厂被url'sserversocket,socket和stream

handler使用。避免这个特点,可以加强安全性同时保留了ejb容器

管理运行环境的能力。

9.使用任何方法启动、停止和管理线程。这个约束消除了与ejb

容器管理死锁、线程和并发问题的责任相冲突的可能性。通过限制使用10-16几个特点,你的目标是堵上一个潜在的安全

漏洞:

10.直接读写文件描述符。

11.为一段特定的代码获得安全策略信息。

12.加载原始的类库。

13.访问java一般角所不能访问的包和类。

14.在包中定义一个类。

15.访问或修改安全配置对象(策略、安全、提供者、签名者和实

体)。

16.使用java序列化特点中的细分类和对象替代。

17.传递this引用指针作为一个参数或者作为返回值返回this引

用指针。你必须使用

sessioncontext或entitycontext中的getejbobject()的结果。

java2平台的安全策略以上所列的特点事实上正是java编程语言和java2标准版中的标

准的、强有力的特。ejb容器允许从j2se中使用一些或全部的受

限制的特,尽管对于ejb组件是不可用的,但需通过j2se的安全

机制来使用而不是通过直接使用j2se的api。

java2平台为ejb1.1规范中的ejb容器所制定的安全策略定义了

安全许可集,这些许可在ejb组件的编程限制中出现。通过这个策略,

定义了一些许可诸如:

rmission,java..permission,

lectpermission,typermission,以便加

强先前所列出的编程限制。许多ejb容器没有加强这些限制,他们希望ejb组件开发者能遵

守这些编程限制或者是带有冒险想法违背了这些限制。违背这些限制

的ejb组件,比标准方法依赖过多或过少的安全许可,都将很少能在

多个ejb容器间移植。另外,代码中都将隐藏着一些不确定的、难以

预测的问题。所有这些都足以使ejb组件开发者应该知道这些编程限

制,同时也应该认真地遵守它们。任何违背了这些编程限制的ejb组件的实现代码在编译时都不能

检查出来,因为这些特点都是java语言和j2se中不可缺少的部分。对于ejb组件的这些限制同样适用于ejb组件所使用的帮助/访问

(helper/aess)类,j2ee应用程序使用java文档(jar)文件格式

打包到一个带.ear(代表enterprisearchive)扩展名的文件中,

这个ear文件对于发送给文件部署器来说是标准的格式。ear文件中

包括在一个或多个ejb-jar文件中的ejb组件,还可能有ejb-jar

所依赖的库文件。所有ear文件中的代码都是经过深思熟虑开发的应

用程序并且都遵守编程限制和访问许可集。未来版本的规范可能会指定通过部署工具来定制安全许可的能力,

通过这种方法指定了一个合法的组件应授予的许可权限,也指定了一

个标准方法的需求:如从文件系统中读文件应有哪些要求。一些ejb

容器/服务器目前在它们的部署工具中都提供了比标准权限或多或少

的许可权限,这些并不是ejb1.1规范中所需要的。理解这些约束

ejb容器是ejb组件生存和执行的运行期环境,ejb容器为ejb组

件实例提供了一些服务如:事务管理、安全持久化、资源访问、客户

端连接。ejb容器也负责ejb组件实例整个生命期的管理、扩展问题

以及并发处理。所以,ejb组件就这样寄居在一个被管理的执行环境

中--即ejb容器。因为ejb容器完全负责ejb组件的生命期、并发处理、资源访问、

安全等等,所以与容器本身的锁定和并发管理相冲突的可能性就需要

消除,许多限制都需要使用来填上潜在的安全漏洞。除了与ejb容器

责任与安全冲突的问题,ejb组件还意味着仅仅聚焦于商务逻辑,它

依赖于ejb容器所提供的服务而不是自己来直接解决底层的系统层

的问题。可能的问题通常,ejb组件在容器之间的移植不可避免地与如下问题相关:

1.它需要依靠的受限制的特点在特定ejb容器中没有得到加强。

2.它需要依靠的非标准的服务从容器中可获得。为了保证ejb组件的可移植性和一致的行为,你应该使用一个具

有与java2平台安全策略集相一致的策略集的容器来测试ejb组件,并且其加强了前

述的编程限制。总结

ejb组件开发者应该知道这些推荐的关于ejb组件的编程限制,

明白它们的重要性,并且从组件的稳定性和可移植性利益方面考虑来

遵循它们。因为这些编程限制能阻止你使用标准的java语言的特点,

违背了这些编程限制在编译时不会知道,并且加强这些限制也不是

ejb容器的责任。所有这些原因都使你应很小心地遵守这些编程限制,

这些限制在组件的合同中已经成为了一个条款,并且它们对于建造可

靠的、可移植的组件是非常重要的。

2.优化ejb

entitybean为在应用程序和设计中描述持久化商业对象

(persistentbusinessobjects)提供了一个清晰的模型。在java

对象模型中,简单对象通常都是以一种简单的方式进行处理但是,很

多商业对象所需要的事务化的持久性管理没有得到实现。entity

bean将持久化机制封装在容器提供的服务里,并且隐藏了所有的复

杂性。entitybean允许应用程序操纵他们就像处理一个一般的java

对象应用。除了从调用代码中隐藏持久化的形式和机制外,entity

bean还允许ejb容器对对象的持久化进行优化,保证数据存储具有

开放性,灵活性,以及可部署性。在一些基于ejb技术的项目中,广

泛的使用oo技术导致了对entitybean的大量使用,sun的工程师

们已经积累了很多使用entitybean的经验,这篇文章就详细阐述的

这些卡发经验:

*探索各种优化方法

*提供性能优化和提高适用性的法则和建议

*讨论如何避免一些教训。法则1:只要可以,尽量使用cmp

cmp方式不仅减少了编码的工作量,而且在container中以及

container产生的数据库访问代码中包括了许多优化的可能。

container可以访问内存缓冲中的bean,这就允许它可以监视缓冲中

的任何变化。这样的话就在事物没有提交之前,如果缓存的数据没有

变化就不用写到数据库中。就可以避免许多不必要的数据库写操作。

另外一个优化是在调用find方法的时候。通常情况下find方法需要

进行以下数据库操作:查数据库中的纪录并且获得主键将纪录数据装入缓存

cmp允许将这两步操作优化为一步就可以搞定。[具体怎么做我也

没弄明白,原文没有具体阐述]法则2:写代码时尽量保证对bmp和cmp都支持许多情况下,ejb的开发者可能无法控制他们写的bean怎么样被

部署,以及使用的container是不是支持cmp.一个有效的解决方案是,将商业逻辑的编码完全和持久化机制分

离。再cmp类中实现商业逻辑,然后再编写一个bmp类,用该类继承

cmp类。这样的话,所有的商业逻辑都在cmp类中,而持久化机制在

bmp中实现。[我觉得这种情况在实际工作中很少遇到,但是作者解

决问题的思路值得学习]法则3:把ejbstore中的数据库访问减小到最少。如果使用bmp,设置一个缓存数据改变标志dirty非常有用。所有

改变数据库中底层数据的操作,都要设置dirty,而在ejbstore()

中,首先检测dirty的值,如果dirty的值没有改变,表明目前数据

库中的数据与缓存的一致,就不必进行数据库操作了,反之,就要把

缓存数据写入数据库。法则4:总是将从lookup和find中获得的引用进行缓存。(cache)引用缓存对sessionbean和entitybean都是适用的。通过jndilookup获得ejb资源。比如datasource,bean的引用

等等都要付出相当大的代价。因此应该避免多余的lookup.可以这样

做:将这些引用定义为实例变量。从setentitycontext(sessionbean使用setsessioncontext)方

法查他们。setentitycontext方法对于一个bean实例只执行一次,

所有的相关引用都在这一次中进行查,这样查的代价就不是那么

昂贵了。应该避免在其他方法中查引用。尤其是访问数据库的方法:

ejbload()和ejbstore(),如果在这些频繁调用的方法中进行

datasource的查,势必造成时间的浪费。调用其他entitybean的finder方法也是一种重量级的调用。多

次调用finder()方法的代价非常高。如果这种引用不适合放在

setentitycontext这样的初始化时执行的方法中执行,就应该在适

当的时候缓存finder的执行结果。只是要注意的是,如果这个引用

只对当前的entity有效,你就需要在bean从缓冲池中取出来代表另

外一个实体时清除掉这些引用。,这些操作应该在ejbactivate()

中进行。法则5:总是使用preparestatements这条优化法则适用于所有访问关系数据库的操作。数据库在处理每一个sqlstatement的时候,执行前都要对

statement进行编译。一些数据库具有缓存statement和statement

的编译后形式的功能。数据库可以把新的statement和缓存中的进行

匹配。然而,如果要使用这一优化特性,新的statement要必须和缓

存中的statement完全匹配。对于non-preparedstatement,数据和statement本身作为一个

字符串传递,这样由于前后调用的数据不同而不能匹配,就导致无法

使用这种优化。而对于preparedstatement,数据和statement是分

开传递给数据库的,这样statement就可以和cache中已编译的

statement进行匹配。statement就不必每次都进行编译操作。从而

使用该优化属性。这项技术在一些小型的数据库访问中能够减少statement将近90%

的执行时间。法则6:完全关闭所有的statement在编写bmp的数据库访问代码时,记住一定要在数据库访问调用

之后关闭statement,因为每个打开的statement对应于数据库中的

一个打开的游标。

security

1.加密对称加密(1)分组密码(2)流密码常用的对称加密算法:

des和tripledes

blowfish

rc4

aes非对称加密常用的非对称加密算法

rsa

elgamal会话密钥加密(对称加密和非对称加密一起使用)常用的会话密钥加密协议

s/mime

pgp

ssl和tlsssl是在applicationlevelprotocal和transport

protocal之间的。比如:和tcp/ip之间

ssl提供了服务器端认证和可选的客户端认证,保密性和数据完

整性。提供基于ssl方式的传输加密和认证,确保以下三种安全防护:数据的机密性和准确性、服务器端认证客户端认证。客户端认证比服务器端认证不很普遍的原因是每一个要被认证的

客户都必须有一张verisign这样的ca签发的证书。通常,在进行身份认证的时候,应当只接受一个ca,这个ca的

名字包含在客户证书中。由于不可能随意创建一个由指定ca签发的证书,所以这可以有效

的防御通过伪造证书来进行的攻击尝试。

2.认证(authentication)认证就是确定一条消息或一个用户的可靠性的过程。

1.消息摘要

md5

sha和sha-1

2.消息认证码(messageauthienticationcodes,mac)

3.数字签名用户可以用自己的密钥对信息加以处理,由于密钥仅为本人所有,

这样就产生了别人无法生成的文件,也就形成了数字签名数字签名可以

1)保证数据的完整性

2)验证用户的身份数字签名采用一个人的私钥计算出来,然后用公钥去检验。

hash算法私钥加密原报文――――――>;报文摘要(message

digest)―――――>;数字签名原报文和数字签名一起被发送到接受者那里,接受者用同样的

hash算法得到报文摘要,然后用发送者的公钥解开数字签名。比较是否相同,则可以确定报文确定发送者。验证数字签名必须使用公钥,但是,除非你是通过安全的方式直

接得到,否则不能保证公钥的正确性。(数字证书可以解决这个问题)一个接受者在使用公钥(publickey)检查数字签名(digital

signature)的可信度时,通常先要检查收到的公钥(publickey)

是否可信的。因此发送方不是单单地发送公钥(publickey),而是发送一个

包含公钥(publickey)的数字证书(cetificate)。

4.数字证书数字证书是一个经证书授权中心数字签名的包含公开密钥所有者

信息以及公开密钥的文件。数字证书cetificate中包括:

i.用户的公钥(publickey)

ii.用户的一些信息,如姓名,email

iii.发行机构的数字签名(digitalsignature),用于保证证

书的可信度

iv.发行机构的一些信息数字证书的格式遵循x.509国际标准。注意:一个数字证书certificate并不适用于多种browser,甚至

一种browser的多个版本。数字标识由公用密钥、私人密钥和数字签名三部分组成。当在邮件中添加数字签名时,您就把数字签名和公用密钥加入到

邮件中。数字签名和公用密钥统称为证书。您可以使用outlook

express来指定他人向您发送加密邮件时所需使用的证书。这个证书

可以不同于您的签名证书。收件人可以使用您的数字签名来验证您的身份,并可使用公用密

钥给您发送加密邮件,这些邮件必须用您的私人密钥才能阅读。要发送加密邮件,您的通讯簿必须包含收件人的数字标识。这样,

您就可以使用他们的公用密钥来加密邮件了。当收件人收到加密邮件

后,用他们的私人密钥来对邮件进行解密才能阅读。在能够发送带有数字签名的邮件之前,您必须获得数字标识。如

果您正在发送加密邮件,您的通讯簿中必须包含每位收件人的数字标

识。数字证书,可以是个人证书或web站点证书,用于将身份与"公

开密钥"关联。只有证书的所有者才知道允许所有者"解密"或进行"

数字签名"的相应"私人密钥"。当您将自己的证书发送给其他人时,

实际上发给他们的是您的公开密钥,这样他们就可以向您发送只能由

您使用私人密钥解密和读取的加密信息。通过浏览器使用数字证书,必须先要设置浏览器软件inter

explorer或scape使用此证书,才能开始发送加密或需要数字签名

的信息。访问安全的web站点(以"s"打头的站点)时,该站点将自

动向您发送他们的web站点证书。

3.ca(证书授证中心)

ca机构,又称为证书授证(certificateauthority)中心,作为

电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验

的责任。ca中心为每个使用公开密钥的用户发放一个数字证书,数

字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开

密钥。ca机构的数字签名使得攻击者不能伪造和篡改证书。在set

交易中,ca不仅对持卡人、商户发放证书,还要对获款的银行、网

关发放证书。它负责产生、分配并管理所有参与网上交易的个体所需

的数字证书,因此是安全电子交易的核心环节。对证书的信任基于对根证书的信任.例如在申请sheca的个人数

字证书前,需要先下载根证书,然后再进行各类证书的申请。下载根证书的目的:网络服务器验证(s);安全(e)申请个人数字证书可以为inter用户提供发送的安全和

访问需要安全连接(需要客户证书)的站点。

1)个人数字证书

a.个人身份证书个人身份证书是用来表明和验证个人在网络上的身份的证书,它

确保了网上交易和作业的安全性和可靠性。可应用于:网上炒股、网

上理财、网上保险、网上缴费、网上购物、网上办公等等。个人身份

证书可以存储在软盘或ic卡中。

b.个人安全证书个人安全证书可以确保邮件的真实性和保密性。申请后

一般是安装在用户的浏览器里。用户可以利用它来发送签名或加密的

。用户在申请安装完安全安全数字证书后,就可以对要发

送的邮件进行数字签名。收信人收到该邮件后,就可以看到数字签名

的标记,这样就可以证明邮件肯定发信者本人,而不是别人盗用该帐

号伪造信件,同时也保证该邮件在传送过程中没被他人篡改过任何数

据。安全中使用的数字证书可以实现:保密性通过使用收件人的数字证书对加密。如此以来,

只有收件人才能阅读加密的邮件,在inter上传递的信息不

会被人窃取,即使发错邮件,收件人也无法看到邮件内容。认证身份在inter上传递的双方互相不能见面,所以必

须有方法确定对方的身份。利用发件人数字证书在传送前对

进行数字签名即可确定发件人身份,而不是他人冒充的。完整性利用发件人数字证书在传送前对进行数字签名不

仅可确定发件人身份,而且传递的信息也不能被人在传输过

程中修改。不可否认性由于发件人的数字证书只有发件人唯一拥有,故发件

人利用其数字证书在传送前对进行数字签名,发件人就无法

否认发过这个。

outlookexpress中的个人安全证书签名邮件带有签名邮件图标。签名邮件可能出现的任何问题都将在本信息之后可能出现的“安

全警告”中得到描述。如果存在问题,您应该认为邮件已被篡改,或

并非所谓的发件人。当收到一封加密邮件时,您应该可以自信地认为邮件未被任何第

三者读过。outlookexpress会自动对解密,如果在您的

计算机上装有正确的数字标识。

2)企业数字证书

a.企业身份证书企业身份证书是用来表明和验证企业用户在网络上身份的证书,

它确保了企业网上交易和作业的安全性和可靠性。可应用于:网上证

券、网上办公、网上交税、网上采购、网上资金转帐、网上银行等。

企业身份证书可以存储在软盘和ic卡中。

b.企业安全证书企业安全证书可以确保邮件的真实性和保密性。申请后

一般是安装在用户的浏览器里。企业可以利用它来发送签名或加密的

。可使用windowsxx中的证书服务来创建证书颁发机构(ca),它

负责接收证书申请、验证申请中的信息和申请者的身份、颁发证书、

吊销证书以及发布证书吊销列表(crl)。通常,当用户发出证书申请时,在其计算机上的加密服务提供程

序(csp)为用户生成公钥和私钥对。用户的公钥随同必要的识别信

息发送至ca。如果用户的识别信息符合批准申请的ca标准,那么

ca将生成证书,该证书由客户应用程序检索并就地存储。

4.set安全接口层协议——ssl(securesocketslayer),并且已经几乎

成为了目前世界的事实标准。这一标准使用公共密钥编码方案来对

传输数据进行加密,在双方之间建立一个inter上的加密通道,从

而使第三方无法获得其中的信息,其思路与目前流行的方案大致

相同,目的都是要保护数据不被未经授权的第三方所窃听,或即使窃

听到也不知所云。但就象一样,ssl在认证方面没有任何作为,

它们都需要通过另外的手段来确认身份和建立双方彼此间的信任,然

后再通过ssl进行交易。正是由于ssl标准在认证方面的缺憾,所以set才有存在的必要。

set(secureelectronictransacti)规范由mastercard和visa

公司于1996年发布,专家们认为set是保证用户与商家在电子商务

与在线交易中免受欺骗的重要手段。传统的信用卡交易者总在担心不

诚实的店员会将自己的信用卡号码透露给他人,而在线交易也是如此,

持卡者总在担心服务器端的管理员会将信用卡号码泄露出去,或者担

心黑客会在管理员不知情的情况下盗取信用卡号码。事实上这些担心

都是必要的,而set标准则可以保证用户的信用卡号码只传送给信

用卡公司进行认证,不会被系统管理员看到,也不会留在交易服务器

的硬盘上给黑客以可乘之机。

5.pki

pki是一种易于管理的、集中化的网络安全方案。它可支持多种

形式的数字认证:数据加密、数字签字、不可否认、身份鉴别、密钥

管理以及交叉认证等。pki可通过一个基于认证的框架处理所有的数

据加密和数字签字工作。pki标准与协议的开发迄今已有15年的历

史,目前的pki已完全可以向企业网络提供有效的安全保障。

pki是一种遵循标准的密钥管理平台,它能够为所有网络应用透明

地提供采用加密和数字签名等密码服务所必需的密钥和证书管理。

pki必须具有

1)ca、

2)证书库、

3)密钥备份及恢复系统、

4)证书作废处理系统、

5)客户端证书处理系统等基本成分,构建pki也将围绕着这五大系统来构建一个pki由众多部件组成,这些部件共同完成两个主要功能:

1)为数据加密

2)创建数字认证。服务器(即后端)产品是这一系统的核心,这些数据库管理着数字

认证、公共密钥及专用密钥(分别用于数据的加密和解密)。

ca数据库负责发布、废除和修改x.509数字认证信息,它装有用

户的公共密钥、证书有效期以及认证功能(例如对数据的加密或对数

字签字的验证)。为了防止对数据签字的篡改,ca在把每一数字签字

发送给发出请求的客户机之前,需对每一个数字签字进行认证。一旦

数字认证得以创建,它将会被自动存储于x.500目录中,x.500目录

为树形结构。ldap(lightweightdirectoryaessprotocol)协议将

响应那些要求提交所存储的公共密钥认证的请求。ca为每一用户或

服务器生成两对独立的公共和专用密钥。其中一对用于信息的加密和

解密,另一对由客户机应用程序使用,用于文档或信息传输中数字签

字的创建。大多数pki均支持证书分布,这是一个把已发布过的或续延生命

期的证书加以存储的过程。这一过程使用了一个公共查询机制,x.500

目录可自动完成这一存储过程。影响企业普遍接受pki的一大障碍

是不同ca之间的交叉认证。假设有两家公司,每一家企业分别使用不

同供应商的ca,现在它们希望相互托管一段时间。如果其后援数据库

支持交叉认证,则这两家企业显然可以互相托管它们的ca,因而它们

所托管的所有用户均可由两家企业的ca所托管。*认证机关

ca是证书的签发机构,它是pki的核心。众所周知,构建密码服务

系统的核心内容是如何实现密钥管理,公钥体制涉及到一对密钥,即

私钥和公钥,私钥只由持有者秘密掌握,无须在网上传送,而公钥是

公开的,需要在网上传送,故公钥体制的密钥管理主要是公钥的管理

问题,目前较好的解决方案是引进证书(certificate)机制。证书是公开密钥体制的一种密钥管理媒介。它是一种权威性的电

子文档,形同网络计算环境中的一种身份证,用于证明某一主体(如

人、服务器等)的身份以及其公开密钥的合法性。在使用公钥体制的

网络环境中,必须向公钥的使用者证明公钥的真实合法性。因此,在

公钥体制环境中,必须有一个可信的机构来对任何一个主体的公钥进

行公证,证明主体的身份以及他与公钥的匹配关系。ca正是这样的

机构,它的职责归纳起来有:

1、验证并标识证书申请者的身份;

2、确保ca用于签名证书的非对称密钥的质量;

3、确保整个签证过程的安全性,确保签名私钥的安全性;

4、证书材料信息(包括公钥证书序列号、ca标识等)的管理;

5、确定并检查证书的有效期限;

6、确保证书主体标识的唯一性,防止重名;

7、发布并维护作废证书表;

8、对整个证书签发过程做日志记录;

9、向申请人发通知。其中最为重要的是ca自己的一对密钥的管理,它必须确保其高度

的机密性,防止他方伪造证书。ca的公钥在网上公开,整个网络系统

必须保证完整性。*证书库证书库是证书的集中存放地,它与网上"白页”类似,是网上的一种

公共信息库,用户可以从此处获得其他用户的证书和公钥。构造证书库的最佳方法是采用支持ldap协议的目录系统,用户或

相关的应用通过ldap来访问证书库。系统必须确保证书库的完整性,

防止伪造、篡改证书。*密钥备份及恢复系统*证书作废处理系统*pki应用接口系统

pki的价值在于使用户能够方便地使用加密、数字签名等安全服

务,因此一个完整的pki必须提供良好的应用接口系统,使得各种各

样的应用能够以安全、一致、可信的方式与pki交互,确保所建立

起来的网络环境的可信性,同时降低管理维护成本。最后,pki应用

接口系统应该是跨平台的。许多权威的认证方案供应商(例如verisign、thawte以及gte)目

前都在提供外包的pki。外包pki最大的问题是,用户必须把企业托

管给某一服务提供商,即让出对网络安全的控制权。如果不愿这样做,

则可建造一个专用的pki。专用方案通常需把entrust、baltimore

technologies以及xcert的多种服务器产品与主流应用程序供应商

(如microsoft、scape以及qualm)的产品组合在一起。专用pki还

要求企业在准备其基础设施的过程中投入大量的财力与物力。

7.jaas扩展jaas实现类实例级授权“java认证和授权服务”(javaauthenticationand

authorizatiervice,jaas)在jaas下,可以给予用户或服务特定的许可权来执行java类

中的代码。在本文中,软件工程师carlosfeca向您展示如何为

企业扩展jaas框架。向jaas框架添加类实例级授权和特定关系使

您能够构建更动态、更灵活并且伸缩性更好的企业应用程序。大多数java应用程序都需要某种类实例级的访问控制。例如,

基于web的、自我服务的拍卖应用程序的规范可能有下列要求:

publicstaticobject

doas(subjectsubject,egedaction

action)

egedactionexception注意,用来保护敏感代码的方法与“java2代码源访问控制”

(java2codesourceaesscontrol)概述中描述的方法相同。请参

阅参考资料部分以了解更多关于jaas中代码源访问控制和认证的

信息。

jaas中的授权清单4显示一个授权请求的结果,该请求使用清单3中显示的

jaas策略文件。假设已经安装了securitymanager,并且

logincontext已经认证了一个带有名为“admin”

的.palexample主体的

subject。清单4.一个简单的授权请求

publicclassjaaample{

publicstaticvoidmain(string[]args){

...

//whereauthenticateduserisasubjectwith

//aprincipalexamplenamedadmin.

(authenticateduser,newjaaampleaction());

...

}

}

publicclassjaaampleactionimplementsprivilegedaction

{

publicobjectrun(){

filewriterfw=newfilewriter("");

("hello,world!");

();

}

}这里,敏感代码被封装在jaaampleaction类中。还要注意,

调用类不要求为jaaampleaction类代码源授予许可权,因为它

实现了一个privilegedaction。扩展jaas大多数应用程序都有定制逻辑,它授权用户不仅仅在类上执行操

作,而且还在该类的实例上执行操作。这种授权通常建立在用户和实

例之间的关系上。这是jaas的一个小缺点。然而,幸运的是,这样

设计jaas使得jaas可以扩展。只要做一点工作,我们将可以扩展

jaas,使其包含一个通用的、类实例级的授权框架。在文章开头处我已经说明了,抽象类

被用于代表jaas安全性策略。它的

缺省实现是由.file类提供。

policyfile类从jaas格式的文件(象清单3中显示的那个一样)

中读取策略。我们需要向这个文件添加一个东西为类实例级授权扩展策略定义:

一个与许可权语句相关的可选关系参数。缺省jaas许可权语句的格式如下:

permission;[name],[acti];我们在这个许可权语句的末尾添加一个可选的关系参数来完成策

略定义。下面是新许可权语句的格式:

permission;

[name],[acti],[relatihip];在为类实例级授权扩展jaas时要注意的最重要的一点是:许可

权实现类必须有一个带三个参数的构造函数。第一个参数是名称参数,

第二个是行为参数,最后一个是关系参数。解析新文件格式既然文件格式已经改变,就需要一个新的

子类来解析文件。为简单起见,我们的示例使用了一个新的

类.icyfile,来从xml文件

读取策略。在实际的企业应用程序中,关系数据库更适合执行这个任

务。使用xmlpolicyfile类代替缺省的jaas访问控制策略实现的

最容易的方法是向ty属性文件添加

er=.icyf

ile条目。ty属性文件位于java2平台运行时的

lib/security目录下。清单5是与xmlpolicyfile类一起使用的

样本xml策略文件:清单5.一个xml策略文件

;

;

;

".palexample"

name="users">;

".cepermission"

name=".n"

acti="create"/>;

".cepermission"

name=".n"

acti="read"/>;

".cepermission"

name=".n"

acti="write"

relatihip="owner"/>;

".cepermission"

name="."

acti="create"/>;

".cepermission"

name="."

acti="read"/>;

".cepermission"

name="."

acti="write"

relatihip="owner"/>;

".cepermission"

name="."

acti="aept"

relatihip="actionowner"/>;

;

;

;在这个示例策略文件中,任何与名为principalexample的用户

有关的用户(subject)都可以创建并读取一个实例。

但是,只有创建该实例的用户才可以更新(写)它。这是第三个

permission元素定义的,该元素包含值为owner的relatihip

属性。实例也是一样,除了相应实例的

所有者可以更改投标接受标志。

resource接口要求类实例级访问控制的类必须实现resource接口。该接口的

getowner()方法返回类实例的所有者。fulfills(subjectsubject,

stringrelatihip)方法被用于处理特定关系。另外,这些类使

用.cepermission类保护敏

感代码。例如,auction类拥有下列构造函数:

publicauction(){

permissionpermission=

newresourcepermission(".n",

"create");

ermission(permission);

}所有者关系

resourcepermission类的implies(permissionp)方法是这个

框架的关键。implies()方法就等同性比较名称和行为属性。如果定

义了一个关系,那么必须把受保护的类实例(resource)传递到

resourcepermission构造函数中。resourcepermission类理解所有

者关系。它将类实例的所有者与执行代码的subject(用户)进行比

较。特定关系被委托给受保护类的fulfills()方法。例如,在清单5中所示的xml策略文件中,只有auction类实

例的所有者可以更新(写)文件。该类的setter方法使用清单6中

显示的保护代码:清单6.运行中的implies(permission)方法

publicvoidsetname(stringnewname){

permissionpermission=

newresourcepermission(".n",

"write",this);

ermission(permission);

//sensitivecode

=newname;

}被传递到resourcepermission构造函数中的this引用代表

auction类实现的resource接口。由于策略文件中列出的关系是

owner,所以resourcepermission类使用这个引用检查当前

subject(用户)是否拥有与实例所有者相匹配的主体。如果指定了

另一个关系,那么resourcepermission类调用auction类的

fulfills(subjectsubject,stringrelatihip)方法。由

resource实现类提供fulfills()方法中的逻辑。

xml策略文件中列出的bid类拥有清单7中所示的方法(假设

bid类实例有一个对相应auction类实例的引用—auction)。清单7.处理特定关系

publicvoidsetaepted(booleanflag){

permissionpermission=

newresourcepermission(".n",

"aept",this);

ermission(permission);

//sensitivecode

=flag;

}

publicbooleanfulfills(subjectuser,stringrelatihip)

{

if(ignorecase("auctionowner")){

stringauctionowner=er();

iteratorprincipaliterator=

ncipals().iterator();

-

JAVA基础学习心得

发布时间:2022-04-13 02:43:28
文章版权声明:除非注明,否则均为IT技术网-学习WEB前端开发等IT技术的网络平台原创文章,转载或复制请以超链接形式并注明出处。

发表评论

评论列表 (有 15 条评论,752人围观)