Servlet初始化与异步支持
Shared libraries(共享库) / runtimes pluggability(运行时插件能力)
1、Servlet容器启动会扫描,当前应用里面每一个jar包的 ServletContainerInitializer的实现
2、提供ServletContainerInitializer的实现类;
必须绑定在,META-INF/services/javax.servlet.ServletContainerInitializer
文件的内容就是ServletContainerInitializer实现类的全类名;
总结:容器在启动应用的时候,会扫描当前应用每一个jar包里面
META-INF/services/javax.servlet.ServletContainerInitializer
指定的实现类,启动并运行这个实现类的方法;传入感兴趣的类型;
ServletContainerInitializer;
@HandlesTypes;
/容器启动的时候会将@HandlesTypes指定的这个类型下面的子类(实现类,子接口等)传递过来;
//传入感兴趣的类型;
@HandlesTypes(value={HelloService.class}) public class MyServletContainerInitializer implements ServletContainerInitializer {/** * 应用启动的时候,会运行onStartup方法; * * Set<Class<?>> arg0:感兴趣的类型的所有子类型; * ServletContext arg1:代表当前Web应用的ServletContext;一个Web应用一个ServletContext; * * 1)、使用ServletContext注册Web组件(Servlet、Filter、Listener) * 2)、使用编码的方式,在项目启动的时候给ServletContext里面添加组件; * 必须在项目启动的时候来添加; * 1)、ServletContainerInitializer得到的ServletContext; * 2)、ServletContextListener得到的ServletContext; */ @Override public void onStartup(Set<Class<?>> arg0, ServletContext sc) throws ServletException { // TODO Auto-generated method stub System.out.println("感兴趣的类型:"); for (Class<?> claz : arg0) { System.out.println(claz); }//注册组件 ServletRegistration ServletRegistration.Dynamic servlet = sc.addServlet("userServlet", new UserServlet()); //配置servlet的映射信息 servlet.addMapping("/user");//注册Listener sc.addListener(UserListener.class);//注册Filter FilterRegistration FilterRegistration.Dynamic filter = sc.addFilter("userFilter", UserFilter.class); //配置Filter的映射信息 filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");}}
2.Servlet处理异步请求
1> 标注支持异步方式 asyncSupported=true
2> AsyncContext HttpRequest.startAsync();
3> asyncContext.start({线程{asyncContext.complete(); req.getAsyncContext().getResponse().getWriter().write()}});
@WebServlet(value="/async",asyncSupported=true) public class HelloAsyncServlet extends HttpServlet {@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("主线程开始。。。"+Thread.currentThread()+"==>"+System.currentTimeMillis());AsyncContext startAsync = req.startAsync();startAsync.start(new Runnable() { @Override public void run() { try { System.out.println("副线程开始。。。"+Thread.currentThread()+"==>"+System.currentTimeMillis()); service(); startAsync.complete();AsyncContext asyncContext = req.getAsyncContext(); //4、获取响应 ServletResponse response = asyncContext.getResponse(); response.getWriter().write("hello async..."); System.out.println("副线程结束。。。"+Thread.currentThread()+"==>"+System.currentTimeMillis()); } catch (Exception e) { } } }); System.out.println("主线程结束。。。"+Thread.currentThread()+"==>"+System.currentTimeMillis()); }public void service() throws Exception{ System.out.println(Thread.currentThread()+" service handler"); Thread.sleep(10000); } }
转载于:https://www.cnblogs.com/htkj/p/10100434.html
Servlet初始化与异步支持相关推荐
- JAVA Web Servlet中的异步处理 (2) -- Servlet3.1中的Non-blocking IO支持
JAVA Web Servlet中的异步处理 (2) – Servlet3.1中的Non-blocking IO支持 在servlet 3.1中,新增了non-blocking IO支持. 在serv ...
- JAVA Web Servlet中的异步处理 (1) -- Servlet3.0中的Async支持
JAVA Web Servlet中的异步处理 (1) – Servlet3.0中的Async支持 每个请求来到Web容器,Web容器会为其分配一个线程来专门负责该请求,直到完成处理前,该执行线程都不会 ...
- Servlet 3的异步Servlet功能
在深入了解什么是异步Servlet之前,让我们尝试了解为什么需要它. 假设我们有一个Servlet,处理时间很长,如下所示. LongRunningServlet.java package com.j ...
- servlet 3.0异步_Servlet 3.0异步处理可将服务器吞吐量提高十倍
servlet 3.0异步 Servlet是Java中处理服务器端逻辑的主要组件,新的3.0规范引入了一些非常有趣的功能,其中异步处理是最重要的功能之一. 可以利用异步处理来开发高度可伸缩的Web应用 ...
- 在Grails 2.0中使用Servlet 3.0异步功能
上周,我与某人谈论了Grails 2中对Servlet 3.0异步功能的新支持,并意识到我对可用功能并不了解. 所以我想我会尝试一下并分享一些例子. 该文档对这个主题有些了解,因此首先介绍一些背景信息 ...
- Servlet 3.0异步处理可将服务器吞吐量提高十倍
Servlet是Java中处理服务器端逻辑的主要组件,新的3.0规范引入了一些非常有趣的功能,其中异步处理是最重要的功能之一. 可以利用异步处理来开发高度可伸缩的Web应用程序. 使用此功能可以有效地 ...
- 浅谈Listener、Filter、Servlet初始化顺序
2019独角兽企业重金招聘Python工程师标准>>> Listener.Filter.Servlet都有一个初始化的过程,对应的方法分别为: contextInitialized( ...
- servlet 变量 及servlet 初始化 和销毁 ThreadLocal
servlet static变量是全局变量, 所有连接到服务器的用户共享一个变量,如 初始化时 static int num=1; 用户登录一次 num++; 张三 登录后 num++,此时num= ...
- Django 3.1 发布,异步支持增强
Django 3.1 已经发布.此版本亮点包括: 进一步支持异步视图与异步中间件. 要开始使用异步视图,需要声明一个视图 :async def async def my_view(request):a ...
最新文章
- CentOS 7使用systemctl如何补全服务名称
- 行为模式之Template Method模式
- java语言适合编写什么_01--Java语言概述与开发环境 最适合入门的Java教程
- ios模拟器装ipa包_在iOS开发的时候如何在模拟器中安装APP
- 在react-router中进行代码拆分
- 玩转 Tomcat 配置必备的 10 个小技巧!
- 机器学习入门——图解支持向量机
- 读《Unity 5.x 游戏开发指南》
- c语言频谱图,c-实时绘制频谱图?
- Python学习笔记4---类和对象
- 如何解决上班下午3:00发困的事情
- 【附源码】计算机毕业设计SSM汽车维修服务系统
- 非正式协议和正式协议的区别
- 利用python制作小游戏
- 引用thymeleaf模板,js中大于小于等符号转义异常问题
- 未来土地利用模拟FLUS模型
- Android高级工程师面试实战,您会挂么?
- Python Enclosing作用域、闭包、装饰器话聊(转)
- 微服务——REST(Representational State Transfer,表述性状态转移)
- 五、测试用例和设计方法