在这里把我学习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();
}
}
虽然这样的话,服务器和客户端的交流用一个通道就搞定了,避免了多次请求的麻烦。但是我还没搞明白,如果由于网络的原因,这个通道断了,该肿么办?
分享到:
相关推荐
《JSP & Servlet学习笔记(第2版)》针对Servlet 3.0的新功能全面改版,无论章节架构还是范例程序代码,都做了全面更新,是作者多年来教学实践的经验总结,汇集了学员在教学过程中遇到的概念、操作、应用或认证考试上...
本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做了全面更新。书中详细介绍了Servlet/ JSP与Web容器之间的关系,必要时从Tomcat源代码分析,了解Servlet/ JSP如何与容器互动。本书还涵盖...
本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做了全面更新。书中详细介绍了Servlet/JSP与Web容器之间的关系,必要时从Tomcat源代码分析,了解Servlet/JSP如何与容器互动。本书还涵盖了...
, 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做了全面更新。书中详细介绍了Servlet/ JSP与Web容器之间的关系,必要时从Tomcat源代码分析,了解Servlet/ JSP如何与容器互动。本书还涵盖...
自Servlet 3.0起,引入了异步Servlet,使得Servlet可以在不阻塞线程的情况下处理请求,提高了服务器的并发性能。 10. **Web应用的部署与调试** 学习Servlet时,理解如何在Servlet容器中部署Web应用,以及如何利用...
Servlet是Java平台中用于开发Web...随着Java EE的不断演进,Servlet也不断发展,如Servlet 3.0引入了异步处理和注解配置等功能,进一步简化了开发过程。学习和理解Servlet是成为一名合格的Web开发者的关键技能之一。
#### 一、Servlet3.0之WebServlet注解 ##### 1. Servlet3.0简介与环境要求 - **Servlet3.0**:Servlet规范的最新版本之一,带来了诸多改进,其中最显著的变化是引入了注解支持,简化了Servlet的配置过程。 - **...
10. **Servlet 3.0及以上的特性**:包括注解式配置、异步处理、生命周期回调方法等,简化了Servlet的开发和管理。 通过学习“韩顺平servlet笔记”,开发者可以全面掌握Servlet的基础知识和高级技巧,提升在Web开发...
### Servlet学习笔记5 #### 一、Servlet与Filter的基本概念及使用 在Web开发中,Servlet作为Java EE标准的一部分,在处理HTTP请求时扮演着至关重要的角色。而在Servlet的应用过程中,Filter是一个非常重要的组件,...
本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做了全面更新。书中详细介绍了Servlet/ JSP与Web容器之间的关系,必要时从Tomcat源代码分析,了解Servlet/ JSP如何与容器互动。本书还涵盖了...
在本文中,我们将深入探讨Spring MVC中的异步请求处理,主要关注Servlet 3.0引入的异步处理机制以及Spring MVC如何利用这个特性。首先,理解同步和异步请求的区别至关重要。 8.1 同步处理是标准的HTTP请求响应模型...
在本“Servlet初学必备,精华笔记”中,我们将深入探讨Servlet的基本概念、生命周期、部署与配置,以及常用API的使用。 1. **Servlet基本概念** Servlet是一个Java类,它遵循Servlet API规范,由Web服务器加载并...
例如,Servlet3.0之前,我们会在web.xml中配置Servlet,而在Servlet3.0之后,可以直接在Servlet类上使用`@WebServlet`注解进行映射。 **六、Servlet3.0的新特性** 1. **Servlet3.0**相对于Servlet2.5增加了许多功能...
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1 </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/* </...
**Servlet学习笔记** Servlet是Java Web开发中的一个重要组成部分,它是一种服务器端的Java应用程序,用于扩展服务器的功能,处理客户端(通常是浏览器)发送的HTTP请求,并返回响应。在本笔记中,我们将深入理解...
本笔记集合了关于JavaWeb开发的关键知识点,涵盖了从基础到高级的主题,包括Eclipse开发工具的使用,JavaWeb开发入门,Servlet和JSP编程,以及进阶特性如监听器、过滤器、文件上传下载和Servlet3.0的新特性。...
在本篇基于注解的Spring 3.0.x MVC学习笔记中,我们将深入探讨Spring MVC在3.0版本中的变化,以及如何通过注解实现快速开发。Spring 3.0.x相较于2.5版本有着显著的改进,尤其在MVC模块上,提供了更加灵活和强大的...