Skip to main content

Jul 03, 15

"一个ServletContainerInitializer的例子

最近在看Servlet规范3.0,里面有一个接口叫做ServletContainerInitializer,网上关于这个接口使用方法的资料比较少,故而写一篇出来记录一下ServletContainerInitializer的使用方法。


一、什么是ServletContainerInitializer


ServletContainerInitializer是Servlet规范3.0提供的一个新的接口,它有一个方法:


[java]
public void onStartup(Set<Class<?>> c, ServletContext ctx)
throws ServletException;
[/java]
提供这个接口的目的是为了让Servlet的编程人员可以动态的加载,或者修改Servlet,Filter和Listener。


二:如何使用ServletContainerInitializer


既然ServletContainerInitializer是一个接口,那么首先,你当然要为这个接口提供一个实现类,那么Servlet容器是如何加载到这个实现类的呢,按照Servlet规范3.0,你需要WEB-INF的lib包下面有一个jar文件,这个jar文件包含了一个META-INF/services/javax.servlet.ServletContainerInitializer文件,在这个文件里面你需要将你的实现类的全限定类名添加到里面。


另外,你需要一个为你的实现类添加一个HandlesTypes注解,这个注解有一个value值,这个值是一个Class数组,包含了你想要处理的类,容器会扫描出所有匹配这个数组里面的类的类(包含实现,扩展或者被注解的类),然后将这个类所有onStartup的第一个参数传入,然后你就可以处理了


下面我们看一个ServletContainerInitializer的实现类:


[java]
/**
* 测试ServletContainerInitializer
*
* @author khotyn 2011-10-8 下午2:54:09
*/
@HandlesTypes(value = { HttpServlet.class })
public class HelloInitializer implements ServletContainerInitializer {
public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
System.out.println("Hello, Initializer!");
for (Class<?> clazz : c) {
if (clazz.getName().contains("ByteServlet")) {
Dynamic dynamic = ctx.addServlet("byte", clazz.getName());
dynamic.addMapping("/byte");
}
}
}
}
[/java]
容器会扫描出所有实现了HttpServlet这个类的类,如果类名包含了ByteServlet,就动态地加载到容器中去,并将路径映射到"/byte"下。"

Jun 27, 15

" JAVA中清空StringBuffer变量
2013-05-31 10:09:27
标签:清空StringBuffer StringBuffer 清空StringBuffer效率
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chcchb.blog.51cto.com/3592607/1213601
一直使用new来清空,刚度娘了下,结合几个文章内容摘记一下.
几种方法:
方法1:
1
2
3
4
StringBuffer my_StringBuffer = new StringBuffer();
my_StringBuffer.append('helloworld');    //添加字符串到StringBuffer中
int  sb_length = my_StringBuffer.length();// 取得字符串的长度
my_StringBuffer.delete(0,sb_length);    //删除字符串从0~sb_length-1处的内容 (这个方法就是用来清除StringBuffer中的内容的)

方法2:
1
my_StringBuffer.setLength(0);           //设置StringBuffer变量的长度为0

方法3:也是我以前一直用的
1
my_StringBuffer = new StringBuffer()

几种方法的效率:
测试程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private static void testStringBufferclear() {
     StringBuffer sbf = new  StringBuffer("wwwwww");
     StringBuffer sbi = new  StringBuffer("wwwwww");
     long s1 = System.currentTimeMillis();
     for (int i = 0; i < 500000; i++) {
      sbi.setLength(0);
     }
     long s11 = System.currentTimeMillis();
     System.out.println("StringBuffer-setLength:" + (s11 - s1));
     s1 = System.currentTimeMillis();
     for (int i = 0; i < 500000; i++) {
      sbf.delete(0, sbf.length());
     }
     s11 = System.currentTimeMillis();
     System.out.println("StringBuffer--delete:" + (s11 - s1));
     s1 = System.currentTimeMillis();
     for (int i = 0; i < 500000; i++) {
      sbf = new StringBuffer("");
     }
     s11 = System.currentTimeMillis();
     System.out.println("StringBuffer--new StringBuffer:" + (s11 - s1));
    }
测试结果:
1
2
3
StringBuffer-setLength:63
StringBuffer--delete:109
StringBuffer--new StringBuffer:78
测试结论:
   要通过使用sbi.setLength(0);来清空StringBuffer对象中的内容效率最高。"

Jun 15, 15

"SocketAddress remoteaddr = new InetSocketAddress(host, port);
socket.connect(remoteaddr, timeout);
socket.setSoTimeout(timeout);
socket.setTcpNoDelay(true);//数据不作缓冲,立即发送"

Jun 15, 15

"new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("username","password");
}
}"

May 30, 15

"警告:
未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期
日期 (2063-07-18) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。
入有这个警告的话本身对签名没有影响,但是总感觉怪怪的,要想去掉这个警告只要在命令上再加上 -tsa https://timestamp.geotrust.com/tsa 就可以了

最终命令是:

 jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa https://timestamp.geotrust.com/tsa -keystore test.keystore -storepass test123 -signedjar signed_client.apk client.apk test"

May 22, 15

"小米手机MIUI V4中无法清除带锁的程序图标
发布:牵手网| 分类:数码测评与应用
问题:
小米手机MIUI V4系统,一键清理后台时发现有些程序图标是带锁的,清理不掉,该怎么办?

解答:
这是MIUI V4一键清理的锁定功能,可以锁定应用程序不被清理,向下滑动可以锁定,向上滑动可以解锁,解锁就可清理掉了。"

May 22, 15

"Ant脚本中echo输出换行符的写法 (2013-05-31 15:14:53)转载▼
标签: ant 换行符 echo it
今天在编辑Ant脚本中,需要在打包的时候在配置文件末尾加一句配置。
一开始直接写

<echo message="Last-Modified=${NOW}" file="${dist.dir.classes}/config.properties" append="true" />

运行后发觉有问题,输出的语句与配置文件最后一行连在了一行中,而没有另起一行输出。
然后我天真的以为前面加上“\n”就可以解决。事实证明我错了。
然后再google上搜到了解决方法:
原文如下:

You could use the built in property ${line.separator} (this comes from the
set of java system properties):

<echo message="First line${line.separator}Second line"/>

原来Ant脚本中有专门的变量来处理换行符。
修改我的脚本
<echo message="${line.separator}Last-Modified=${NOW}" file="${dist.dir.classes}/config.properties" append="true" />
解决问题"

May 19, 15

"  sudo apt-get install g++-multilib "

1 - 20 of 3545 Next › Last »
20 items/page

Highlighter, Sticky notes, Tagging, Groups and Network: integrated suite dramatically boosting research productivity. Learn more »

Join Diigo