??xml version="1.0" encoding="utf-8" standalone="yes"?>成人国产免费视频,欧美视频亚洲视频,免费国产在线视频http://www.aygfsteel.com/zhangyuan/category/45559.htmll理的空?/description>zh-cnMon, 06 Sep 2010 13:23:43 GMTMon, 06 Sep 2010 13:23:43 GMT60- JAVA拦截器原理及Struts2扩展http://www.aygfsteel.com/zhangyuan/archive/2010/09/06/331229.htmlえ经理ええ经理えMon, 06 Sep 2010 09:21:00 GMThttp://www.aygfsteel.com/zhangyuan/archive/2010/09/06/331229.htmlhttp://www.aygfsteel.com/zhangyuan/comments/331229.htmlhttp://www.aygfsteel.com/zhangyuan/archive/2010/09/06/331229.html#Feedback0http://www.aygfsteel.com/zhangyuan/comments/commentRss/331229.htmlhttp://www.aygfsteel.com/zhangyuan/services/trackbacks/331229.html最q发现很多朋友连拦截器都不知道,于是惛_个BLOGȝ一下?br />
java拦截器的基本原理其实非常单,说白了就是动态代理类?br />
下面来看一个简单的例子
首先Q我建立一个拦截器的类InterceptorClassQ这里的before()和after()Ҏ是以后拦截器会执行的Ҏ
CODE清单一Q?br />

public class InterceptorClass
{

public void before()
{
System.out.println("拦截器InterceptorClassҎ调用:before()!");
}

public void after()
{
System.out.println("拦截器InterceptorClassҎ调用:after()!");
}
}
我们模拟一个业务组件接口BusinessInterfaceQ和一个业务组件实现类BusinessClass
CODE清单二:

public interface BusinessInterface
{
public void doSomething();
}
CODE清单三:

public class BusinessClass implements BusinessInterface
{

public void doSomething()
{
System.out.println("业务lgBusinessClassҎ调用:doSomething()");
}
}
然后Q创Z个动态代理类DynamicProxyHandlerQ这个类是集成InvocationHandler接口的,动态类的原理实际上是得当你执行一个动态方
法的时候,他可以把q个动态方法dispatch到这个动态类上来。这P你就可以在这个方法的前后嵌入自己的一些方法?br />
CODE清单四:
//包含了业务对象绑定动态代理类的处理,q实CInvocationHandler接口的invokeҎ

public class DynamicProxyHandler implements InvocationHandler
{
private Object business;//被代理对?/span>
private InterceptorClass inceptor = new InterceptorClass();//拦截?br />
// 动态生成一个代理类对象,q绑定被代理cd代理处理?/span>

public Object bind(Object business)
{
this.business = business;
return Proxy.newProxyInstance(
//被代理类的ClassLoader
business.getClass().getClassLoader(),
//要被代理的接?本方法返回对象会自动声称实现了这些接?/span>
business.getClass().getInterfaces(),
//代理处理器对?/span>
this);
}
// 代理要调用的Ҏ,q在Ҏ调用前后调用q接器的Ҏ

/** *//**
* @param proxy 代理cd?br />
* @param method 被代理的接口Ҏ
* @param args 被代理接口方法的参数
* @throws Throwable
*/
public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable
{
Object result = null;
inceptor.before();
result=method.invoke(business,args);
inceptor.after();
return result;
}

OKQ我们来写个cL试一?br />
CODE清单五:

public static void main(String[] args)
{
//生成动态代理类实例
DynamicProxyHandler handler = new DynamicProxyHandler();
//生成待测试的业务lg对象
BusinessInterface business = new BusinessClass();
//业务组件对象和动态代理类实例l定
BusinessInterface businessProxy = (BusinessInterface) handler.bind(business);
//用动态代理类调用Ҏ
businessProxy.doSomething();
}
来看看结果:

q期struts2很流行,而且拦截器是struts2里面一个比较好的功能,下面举个例子说明一下拦截器在struts2中的用法?br />
struts2Ҏ截器实现做了一个封装,使得我们在实现的时候比较简单?br />
首先我们要徏一个拦截器c?br />
CODE清单六:

public class AuthorizationInterceptor extends AbstractInterceptor
{
@Override

public String intercept(ActionInvocation invocation) throws Exception
{
Map session = invocation.getInvocationContext().getSession();
String userName = (String) session.get("userName");

if ( userName != null && userName.equals("test"))
{
System.out.println("拦截器:合法用户d---");
return invocation.invoke();
}
else

{
System.out.println("拦截器:用户未登?--");
return Action.LOGIN;
}
}
}

q个cL必须要承struts2包中提供的AbstractInterceptorc,q个cL一个抽象方法interceptQ这个方法是必须要实现的?br />
那么l理在这个拦截器里面写了一个简单的实现Q对url用户合法性做了一个限制?/p>
接下来比较关键的是过滤器在struts2中的配置Q先看看代码
CODE清单七:
<package name="system" extends="struts-default">
<interceptors>
<!-- 定义权限控制拦截?nbsp; -->
<interceptor name="authority"

class="com.sharesin.biz.common.intercepts.struts2.AuthorizationInterceptor"/>
<!-- 定义一个包含权限控制的拦截器栈 -->
<interceptor-stack name="mystack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="authority"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--定义默认拦截?nbsp; -->
<default-interceptor-ref name="mystack" />
<!--定义全局处理l果 -->
<global-results>
<result name="login">index.jsp</result>
</global-results>
<action name="login_*" class="com.sharesin.biz.web.system.LoginAction" method="{1}">
<result name="success">system/homepage.jsp</result>
</action>
</package>


在interceptors节点里,我们可以定义多个拦截器,q里的名为authority的只是其中的一个。struts2的拦截器栈我是先执行struts2默认的拦
截器defaultStackQ然后再执行我的。然后只需要用default-interceptor-ref标签讄好这个system包中的默认拦截器个拦截器OK了?/p>
struts2中引入了packageq个概念Q我觉得十分实用Q当然这对struts2拦截器也是个实惠Q我们可以根据不同的action来分包和不同的拦截器
okQ来q行试一下?/p>

l果..


]]>- 关于Integer大小比较的问?/title>http://www.aygfsteel.com/zhangyuan/archive/2010/07/24/327011.htmlえ经理ええ经理えSat, 24 Jul 2010 08:03:00 GMThttp://www.aygfsteel.com/zhangyuan/archive/2010/07/24/327011.htmlhttp://www.aygfsteel.com/zhangyuan/comments/327011.htmlhttp://www.aygfsteel.com/zhangyuan/archive/2010/07/24/327011.html#Feedback10http://www.aygfsteel.com/zhangyuan/comments/commentRss/327011.htmlhttp://www.aygfsteel.com/zhangyuan/services/trackbacks/327011.html
首先l大家看一个例子:
1
public class Test
{
2
3
/** *//**
4
* 关于Integer大小比较问题
5
* @author l理
6
*/
7
public static void main(String[] args)
{
8
Integer a = 10;
9
Integer b = 10;
10
System.out.println("a==b : " + String.valueOf(a==b));
11
System.out.println("a.equals(b) : " + String.valueOf(a.equals(b)));
12
}
13
}
14
q行一下,在控制台得到的结果是q样?br />
a==b : true
a.equals(b) : true
当是当我们变换一下?br />
1
public class Test
{
2
3
/** *//**
4
* 关于Integer大小比较问题
5
* @author l理
6
*/
7
public static void main(String[] args)
{
8
Integer a = 1000;
9
Integer b = 1000;
10
System.out.println("a==b : " + String.valueOf(a==b));
11
System.out.println("a.equals(b) : " + String.valueOf(a.equals(b)));
12
}
13
}
q行一下,控制台的l果又是
a==b : false
a.equals(b) : true
q是什么原因呢Q我当时也有点犯p涂。有点冲动就直接开源码看了?br />
实际上在我们用Integer a = 数字Q来赋值的时候Integerq个cL调用的public static Integer valueOf(int i)q个Ҏ?br />
1
public static Integer valueOf(int i)
{
2
if(i >= -128 && i <= IntegerCache.high)
3
return IntegerCache.cache[i + 128];
4
else
5
return new Integer(i);
6
}
我们来看看ValueOf(int i)的代码,可以发现他对传入参数i做了一个if判断。在-128<=i<=127的时候是直接用的int原始数据cdQ而超Zq个范围则是new了一个对象。我们知?=="W号在比较对象的时候是比较的内存地址Q而对于原始数据类型是直接比对的数据倹{那么这个问题就解决了?br />
至于Z么用int型的时候g?128<=i<=127范围呢呢?我们知道八位二进制的表示的范围正好就?128?27。大概就是因吧?br />
把^时出现的问题记录下来Q自己就可以一点一点进步了?

]]> - JAVAd配置文ghttp://www.aygfsteel.com/zhangyuan/archive/2010/07/12/325843.htmlえ经理ええ经理えMon, 12 Jul 2010 03:48:00 GMThttp://www.aygfsteel.com/zhangyuan/archive/2010/07/12/325843.htmlhttp://www.aygfsteel.com/zhangyuan/comments/325843.htmlhttp://www.aygfsteel.com/zhangyuan/archive/2010/07/12/325843.html#Feedback4http://www.aygfsteel.com/zhangyuan/comments/commentRss/325843.htmlhttp://www.aygfsteel.com/zhangyuan/services/trackbacks/325843.html
q里写了一个例子,先给大家看看目录l构

l理是用properties文g来做的,因ؓq个非常单,而且dproperties文g的速度比读xml要快的多?br />
q里的主要文件有两个Qconfig.properties是配|文ӞTest是测试javac?br />
config文g的内容就是一个ip一个port

原理很简单就是首先取得config.properties的二q制,然后用JAVA装好的PropertiescLq个loadq来Q最后只需要用Properties对象中的getProperty(String key)Ҏ可以取g。是不是很简单?br />
l大家看看代码:

我们来运行下l果Q?br />

成功了~

]]>
վ֩ģ壺
|
|
|
ϽϽ|
ຣʡ|
ʤ|
찲|
ƺ|
ϰˮ|
з|
̫|
|
ϼ|
|
ϴ|
|
|
|
Ϫ|
|
|
|
|
׳|
|
|
|
|
ˮ|
|
|
Ӫ|
|
|
|
ͼʲ|
ڳ|
|
|
|
˱|