首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

Servlet3.0 札记

2012-09-21 
Servlet3.0 笔记在这里把我学习servlet3.0遇到的一些问题记录下来,希望大虾们给点意见,呵呵?1. Servlet3.0

Servlet3.0 笔记

在这里把我学习servlet3.0遇到的一些问题记录下来,希望大虾们给点意见,呵呵

?

1. Servlet3.0中的AsyncContext对象设置监听器后,如果新来的长连接把之前的那个顶掉了,应该调用之前那个AsyncContext的complete()方法,这样之前那个监听器的onTimeout()方法才不会执行,否则会多次执行onTimeout()方法。

?

2.Servlet3.0中,给AsyncContext对象设置监听器后超时,超时时间没到,然后用AsyncContext.getResponse().getOutputStream()这个流往客户端写数据,那么之前设置的那个监听器对应的超时时间过了之后,还是会会执行的??

?

3.Servlet3.0中服务器会保存客户端请求的Context对象,需要返回数据会调用getResponse()方法,从response对象获得往客户端写数据的通道,此时客户端和服务器相当于建立了一个通道,代码如下:

?

服务器:

ServletResponse response1 = ccc1.getResponse();

?

?PrintWriter pw1 = response1.getWriter();

? ? ? ? System.out.println(pw1.checkError());

? ? ? ? pw1.println("aaaaa");

? ? ? ? pw1.flush();

?

注意服务器调用的是flush方法,不是close方法。

?

客户端:

?

public static void main(String[] args)

? ? {

? ? ? ? // 构造HttpClient的实例

? ? ? ? HttpClient httpClient = new HttpClient();

? ? ? ? // 创建GET方法的实例

? ? ? ? GetMethod getMethod = new GetMethod(

? ? ? ? ? ? ? ? "http://127.0.0.1:8888/moliao/servletTest");

? ? ? ? // 使用系统提供的默认的恢复策略

? ? ? ? getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,

? ? ? ? ? ? ? ? new DefaultHttpMethodRetryHandler());

? ? ? ? try

? ? ? ? {

? ? ? ? ? ? // 执行getMethod

? ? ? ? ? ? int statusCode = httpClient.executeMethod(getMethod);

?

? ? ? ? ? ? if (statusCode != HttpStatus.SC_OK)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? System.err.println("Method failed: "

? ? ? ? ? ? ? ? ? ? ? ? + getMethod.getStatusLine());

? ? ? ? ? ? }

? ? ? ? ? ? // //读取内容

? ? ? ? ? ? // byte[] responseBody = getMethod.getResponseBody();

? ? ? ? ? ? InputStream is = getMethod.getResponseBodyAsStream();

?

? ? ? ? ? ? InputStreamReader isr = new InputStreamReader(is, "utf-8");

?

? ? ? ? ? ? BufferedReader br = new BufferedReader(isr);

?

? ? ? ? ? ? String line = br.readLine();

?

? ? ? ? ? ? while (line != null)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? System.out.println(line);

? ? ? ? ? ? ? ? line = br.readLine();

? ? ? ? ? ? }

? ? ? ? ? ? System.out.println("line == null");

? ? ? ? }

? ? ? ? catch (HttpException e)

? ? ? ? {

? ? ? ? ? ? // 发生致命的异常,可能是协议不对或者返回的内容有问题

? ? ? ? ? ? System.out.println("Please check your provided http address!");

? ? ? ? ? ? e.printStackTrace();

? ? ? ? }

? ? ? ? catch (IOException e)

? ? ? ? {

? ? ? ? ? ? // 发生网络异常

? ? ? ? ? ? e.printStackTrace();

? ? ? ? }

? ? ? ? finally

? ? ? ? {

? ? ? ? ? ? // 释放连接

? ? ? ? ? ? getMethod.releaseConnection();

? ? ? ? }

? ? }

?

虽然这样的话,服务器和客户端的交流用一个通道就搞定了,避免了多次请求的麻烦。但是我还没搞明白,如果由于网络的原因,这个通道断了,该肿么办?

热点排行