10月15
反射:
Class c = Class.forName ("java.lang.Integer");
这条语句得到一个 Integer类的类对象。还有另一种方法,如下面的语句:
Class c = Integer.class;
或者
Class c = Integer.TYPE;
它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段。
第二步是调用诸如 getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表。
一旦取得这个信息,就可以进行第三步了。
第三步是使用 reflection API 来操作这些信息,如下面这段代码:
Class c = Class.forName ("java.lang.Integer");
这条语句得到一个 Integer类的类对象。还有另一种方法,如下面的语句:
Class c = Integer.class;
或者
Class c = Integer.TYPE;
它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段。
第二步是调用诸如 getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表。
一旦取得这个信息,就可以进行第三步了。
第三步是使用 reflection API 来操作这些信息,如下面这段代码:
10月10
很久没有复习java的基础了,对于重定向forward和sendRedirect的区别都有点模棱两可了,最近用到,所以特地的来复习复习这个基础,而且上次面试被别人问forward与sendRedirect没理解太清楚,搞得比较尴尬。现将自己对这个问题的体会写在下面。期望能对一些人有帮助。其实说的简单易懂一些forward是转发,redirect是重定向 ;forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
1.RequestDispatcher.forward()
是在服务器端起作用,当使用forward()时,Servletengine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在b.jsp都可以获得,参数自动传递.
但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面(注:这个我的理解是通过参数记录,然后在框架页面中用参数来设定框架内页的地址).
重定向后浏览器地址栏URL不变.
因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个 JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。
注意,只有在尚未向客户端输出响应时才可以调用forward()方法,如果页面缓存不为空,在重定向前将自动清除缓存。否则将抛出一个异常
1.RequestDispatcher.forward()
是在服务器端起作用,当使用forward()时,Servletengine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在b.jsp都可以获得,参数自动传递.
但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面(注:这个我的理解是通过参数记录,然后在框架页面中用参数来设定框架内页的地址).
重定向后浏览器地址栏URL不变.
因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个 JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。
注意,只有在尚未向客户端输出响应时才可以调用forward()方法,如果页面缓存不为空,在重定向前将自动清除缓存。否则将抛出一个异常
9月27
9月27
至于干嘛要反编译,嘿嘿!目的咱就不说了。。。
先说些预备知识:classes.dex是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。
一般使用dexdump和Dedexer可以反dex,但是用过的人都知道这样反出来的结果可读性极差。在这个时候大家一定要相信互联网的力量,所谓只要你能想到的或许就已经有人已经做到了。瞧瞧吧,我下面要介绍的就是别人已经给我们做好的几个工具。
dex2jar,这个别人写的一个把.dex files转换成Java .class的小工具,很不错。基本使用方法如下:在apk中提取classes.dex文件 -> 利用dex2jar把dex转换成java jar(classes.dex2jar.jar)。
先说些预备知识:classes.dex是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。
一般使用dexdump和Dedexer可以反dex,但是用过的人都知道这样反出来的结果可读性极差。在这个时候大家一定要相信互联网的力量,所谓只要你能想到的或许就已经有人已经做到了。瞧瞧吧,我下面要介绍的就是别人已经给我们做好的几个工具。
dex2jar,这个别人写的一个把.dex files转换成Java .class的小工具,很不错。基本使用方法如下:在apk中提取classes.dex文件 -> 利用dex2jar把dex转换成java jar(classes.dex2jar.jar)。
9月27
There are times in your scripts when you are going to want to get the current page URL that is shown the browser URL window. For example maybe a page URL has Querystring info appended to it and you need to send an email off to someone with that same exact URL and Querystring information. There are plenty of other reasons as well.
Here is some code to do it.
Lets say the current page is simply "http://www.hecks.tk/showidc.asp"
This is all you need to get you the current page URL
<%
Thispage ="http://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
%>
Now, if your page has Querystring info and variables you want as well.
Like so "http://www.mysite,com/showidc.asp?ID=109"
Here is some code to do it.
Lets say the current page is simply "http://www.hecks.tk/showidc.asp"
This is all you need to get you the current page URL
<%
Thispage ="http://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
%>
Now, if your page has Querystring info and variables you want as well.
Like so "http://www.mysite,com/showidc.asp?ID=109"
9月26
一、page 对象
page对象代表jsp本身,更准确地说它代表jsp被转译后的servlet,它可以调用servlet类所定义的方法。
二、config 对象
config 对象里存放着一些servlet 初始的数据结构。
config 对象实现于javax.servlet.servletconfig 接口,它共有下列四种方法:
public string getinitparameter(name)
public java.util.enumeration getinitparameternames( )
public servletcontext getservletcontext( )
public sring getservletname( )
page对象代表jsp本身,更准确地说它代表jsp被转译后的servlet,它可以调用servlet类所定义的方法。
二、config 对象
config 对象里存放着一些servlet 初始的数据结构。
config 对象实现于javax.servlet.servletconfig 接口,它共有下列四种方法:
public string getinitparameter(name)
public java.util.enumeration getinitparameternames( )
public servletcontext getservletcontext( )
public sring getservletname( )
9月26
tomcat是只支持web应用系统,所以采取struts+hibernate或tapestry+hibernate(或者中间加上spring/jdon)都属于web应用系统,他们都是单机stand-alone系统,利用上述tomcat的负载平衡只能勉强支撑两三台服务器,而且随着访问量增加,tomcat等web服务器将趋于缓慢,从这篇文章观点来看,web应用程序在性能的伸缩性不太高。下面讨论的都是因为使用ejb后而使得你的应用程序自动获得的能力:
以weblogic jboss为主的采取的paired servers 对服务器复制策略则要提高性能很多,但是对load balancer算法要求高,有些普通的load balancer不一定符合要求。ibm采取的是中央状态服务器策略;而sun则采取的是特殊数据库复制hadb策略。
该文最后分析了jndi ejb和jms的集群原理,实际也是阐述了从性能集群原理上说,为什么会诞生ejb等复杂技术以及对于一些大型应用为什么需要使用ejb的原因所在。文章还否定了这样的观点:单机系统几乎可以透明的迁移到集群结构。在迁移时,需要考虑很多问题,如状态/缓存 httpsession以及特殊的服务等。
以weblogic jboss为主的采取的paired servers 对服务器复制策略则要提高性能很多,但是对load balancer算法要求高,有些普通的load balancer不一定符合要求。ibm采取的是中央状态服务器策略;而sun则采取的是特殊数据库复制hadb策略。
该文最后分析了jndi ejb和jms的集群原理,实际也是阐述了从性能集群原理上说,为什么会诞生ejb等复杂技术以及对于一些大型应用为什么需要使用ejb的原因所在。文章还否定了这样的观点:单机系统几乎可以透明的迁移到集群结构。在迁移时,需要考虑很多问题,如状态/缓存 httpsession以及特殊的服务等。
9月26
1、认真考虑是否真要使用j2ee
这个很重要,非常重要。j2ee涵盖的内容大而全,但很多不一定就是具体实际项目需要的。象ejb级的权限控制,如果你的表现层(大部分项目就是web server)和应用服务器不存在信任问题,那么基本上就不用考虑。又比如伸缩性,如果同时在线最多不超过100个,就没什么用处。针对项目的实际情况选择效费比最合适的解决方案,而不要为了应用先进技术而应用先进技术。
2、选择合适的分布模型
提起分布,很多人可能都会有这样的设想:server a处理认证,server b处理订单,server c处理仓储;如果b的负载太大,那么再细分一下:录入、修改部分的ejb部署在server d,统计、分析部分的部署在server e,等等。其实没有必要,我的体会是:除非业务必须(如分支机构统一通过总部的app server来进行权限验证),否则最好将所有的应用全部放在一个app server中,能在一个进程空间内更好(使用home interface),然后进行平行的分布?d?d即集群中的所有app server功能上都是等价的。相比前一种垂直(或者网状)分布,平行分布的可靠性、容错能力、伸缩能力都要更好,同时减少了部署、管理负担。最重要的是,减少了因为业务逻辑层内部跨进程调用引起的开销,提高了整体性能。然而,如果a、一些业务逻辑必须相互独立部署、管理,b、负载较为集中地分布在若干个ejb中,那么,垂直分布还是必不可少的。
3、为entity bean选择合适的数据存储方案
首先尽量使用cmp管理数据存储,尤其是简单的,大部分业务操作都是插入删除修改的实体,不然光insert update就够你忙的了,更不用说数据库移植问题。其次对于简单的一对一、一对多关系,如果你的app server没有实现ejb2.0规范,可以考虑使用o/r映射工具帮助开发,象cocobase, ejb creator等等,可以提高不少效率。对于复杂的对象存储,没办法,老老实实写代码吧……
这个很重要,非常重要。j2ee涵盖的内容大而全,但很多不一定就是具体实际项目需要的。象ejb级的权限控制,如果你的表现层(大部分项目就是web server)和应用服务器不存在信任问题,那么基本上就不用考虑。又比如伸缩性,如果同时在线最多不超过100个,就没什么用处。针对项目的实际情况选择效费比最合适的解决方案,而不要为了应用先进技术而应用先进技术。
2、选择合适的分布模型
提起分布,很多人可能都会有这样的设想:server a处理认证,server b处理订单,server c处理仓储;如果b的负载太大,那么再细分一下:录入、修改部分的ejb部署在server d,统计、分析部分的部署在server e,等等。其实没有必要,我的体会是:除非业务必须(如分支机构统一通过总部的app server来进行权限验证),否则最好将所有的应用全部放在一个app server中,能在一个进程空间内更好(使用home interface),然后进行平行的分布?d?d即集群中的所有app server功能上都是等价的。相比前一种垂直(或者网状)分布,平行分布的可靠性、容错能力、伸缩能力都要更好,同时减少了部署、管理负担。最重要的是,减少了因为业务逻辑层内部跨进程调用引起的开销,提高了整体性能。然而,如果a、一些业务逻辑必须相互独立部署、管理,b、负载较为集中地分布在若干个ejb中,那么,垂直分布还是必不可少的。
3、为entity bean选择合适的数据存储方案
首先尽量使用cmp管理数据存储,尤其是简单的,大部分业务操作都是插入删除修改的实体,不然光insert update就够你忙的了,更不用说数据库移植问题。其次对于简单的一对一、一对多关系,如果你的app server没有实现ejb2.0规范,可以考虑使用o/r映射工具帮助开发,象cocobase, ejb creator等等,可以提高不少效率。对于复杂的对象存储,没办法,老老实实写代码吧……
9月26
本文适合首先要对j2ee有所了解的读者,熟悉xml,tomcat等基本内容,本文主要是简单介绍一下web服务的基本内容,怎样在java web开发中构建soap服务:
一、soap(simple object access protocol)简单对象访问协议
要了解soap,首先就需要了解分布式计算的由来,随着下一代的分布式计算体系web服务的出现,soap成为了创建和调用通过网络发布的应用程序的实际通信标准。soap类似传统的二进制协议iiop(corba)和jrmp(rmi),但它不采用二进制数据表示法,而是采用使用xml的,基于文本的数据表示法。
通过xml表示法,soap定义了一种小型有线连接协议和编码格式,以表示数据类型、编程语言和数据库,还可以使用各种internet标准协议作为其消息传输工具,还可以提供表示rpc和文档驱动的消息交换等通信模型的约定。请注意,w3c正致力于soap的研究,http://www.w3c.org/2000/xp/group/ ,并得到了主流供应商的积极响应,以便对于基于xml的协议相关的重要任务达成共识,并定义其关键要求和使用场景。
soap1.2的基本规范定义了以下基本内容:
1)用于将xml文档表示为结构化soap消息的语法和语义
2)在soap消息中表示数据的编码标准
3)用于交换soap消息的通信模型
4)soap传输等底层协议的绑定
soap消息主要包括了信封头,消息头,主体,附件几部分
一、soap(simple object access protocol)简单对象访问协议
要了解soap,首先就需要了解分布式计算的由来,随着下一代的分布式计算体系web服务的出现,soap成为了创建和调用通过网络发布的应用程序的实际通信标准。soap类似传统的二进制协议iiop(corba)和jrmp(rmi),但它不采用二进制数据表示法,而是采用使用xml的,基于文本的数据表示法。
通过xml表示法,soap定义了一种小型有线连接协议和编码格式,以表示数据类型、编程语言和数据库,还可以使用各种internet标准协议作为其消息传输工具,还可以提供表示rpc和文档驱动的消息交换等通信模型的约定。请注意,w3c正致力于soap的研究,http://www.w3c.org/2000/xp/group/ ,并得到了主流供应商的积极响应,以便对于基于xml的协议相关的重要任务达成共识,并定义其关键要求和使用场景。
soap1.2的基本规范定义了以下基本内容:
1)用于将xml文档表示为结构化soap消息的语法和语义
2)在soap消息中表示数据的编码标准
3)用于交换soap消息的通信模型
4)soap传输等底层协议的绑定
soap消息主要包括了信封头,消息头,主体,附件几部分
9月26
以下为字符串匹配操作符:
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
1: 限制某些类型的客户端的访问
如果把MSIE改成 Mozilla 就基本上把IE和firefox这样pc浏览器限制了
2和3主要是针对盗链做处理
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
1: 限制某些类型的客户端的访问
如果把MSIE改成 Mozilla 就基本上把IE和firefox这样pc浏览器限制了
2和3主要是针对盗链做处理







