Filter学习总结,顺便提及点servlet3.0异步filter和异步监听
<!--filter过滤器-->
<filter>
<!--filter名称-->
<filter-name>myCharacterFilter</filter-name>
<!--filter处理的类-->
<filter-class>com.filter.MyCharacterFilter</filter-class>
<!--初始化参数-->
<init-param>
<param-name>defaultCharset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!--过滤器映射-->
<filter-mapping>
- <!--和过滤器名相同-->
<filter-name>myCharacterFilter</filter-name>
<!--拦截的路径-->
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!--映射多个不同路径,需要些多个<filter-mapping>-->
<filter-mapping>
<filter-name>myCharacterFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
RoleFilter doFilter === startRoleFilter doFilter === endMyCharacterFilter end==do
<filter>
<filter-name>roleFilter</filter-name>
<filter-class>com.filter.MyRoleFilter</filter-class>
<init-param>
<param-name>username</param-name>
<param-value>www</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>roleFilter</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>ASYNC</dispatcher>
</filter-mapping>
<servlet>
<description></description>
<display-name>LoginServlet2</display-name>
<servlet-name>LoginServlet2</servlet-name>
<servlet-class>com.servlet.LoginServlet2</servlet-class>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet2</servlet-name>
<url-pattern>/LoginServlet.action</url-pattern>
</servlet-mapping>
resp.setContentType("text/html;charset=UTF-8");
PrintWriter pw = resp.getWriter();
pw.println("进入servlet时间" + new SimpleDateFormat("yyyy-Mm-dd HH:mm:ss").format(new Date()));
pw.flush();
AsyncContext ctx = req.startAsync();
new Thread(new Executor(ctx)).start();
pw.println("离开servlet时间" + new SimpleDateFormat("yyyy-Mm-dd HH:mm:ss").format(new Date()));
pw.flush();
//等待10s,模拟业务逻辑
try {
Thread.sleep(10000);
PrintWriter pw = ctx.getResponse().getWriter();
pw.println("业务逻辑处理完成时间"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
pw.flush();
this.ctx.complete();
} catch (Exception e) {
e.printStackTrace();
}
- 异步线程开始时,调用 AsyncListener 的 onStartAsync(AsyncEvent event) 方法;
- 异步线程出错时,调用 AsyncListener 的 onError(AsyncEvent event) 方法;
- 异步线程执行超时,则调用 AsyncListener 的 onTimeout(AsyncEvent event) 方法;
- 异步执行完毕时,调用 AsyncListener 的 onComplete(AsyncEvent event) 方法。
ctx.addListener(new AsyncListener() {
@Override
public void onTimeout(AsyncEvent arg0) throws IOException {
System.out.println("listener===超时");
}
@Override
public void onStartAsync(AsyncEvent arg0) throws IOException {
System.out.println("listener===开始");
}
@Override
public void onError(AsyncEvent arg0) throws IOException {
System.out.println("listener===异常");
}
@Override
public void onComplete(AsyncEvent arg0) throws IOException {
System.out.println("listener===完成");
}
});
Filter学习总结,顺便提及点servlet3.0异步filter和异步监听的更多相关文章
- 【SpringBoot】SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener
=================6.SpringBoot拦截器实战和 Servlet3.0自定义Filter.Listener ============ 1.深入SpringBoot2.x过滤器Fi ...
- Servlet学习:(三)Servlet3.0 上传文件
转: Servlet学习:(三)Servlet3.0 上传文件 2018年08月03日 11:57:58 iDark_CSDN 阅读数:362 一.注意事项 客户端(浏览器) 表单的提交方法必须是 ...
- java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet
一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet- ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第6节 SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener_24、深入SpringBoot过滤器和Servlet配置过滤器
笔记 1.深入SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战(核心知识) 简介:讲解SpringBoot里面Filter讲解和使用Servle ...
- SpringBoot拦截器和 Servlet3.0自定义Filter、Listener
官方文档译文 Spring Boot 包括对嵌入式Tomcat,Jetty和Undertow服务器的支持.大多数开发人员使用适当的“Starter”来获取完全配置的实例.默认情况下,嵌入式服务器在 p ...
- 学习Android过程中遇到的问题及解决方法——电话监听
也许有时你会有这样一个需求:通电话时有一个重要的事需要记下来或者和一个陌生人特别是大骗子通话时,这是就想如果能把通话录下来就方便多了.(这才是我写这个代码的目的!!!) 在此过程中,犯了一个很大的错误 ...
- SpringBoot2.0 监听器ApplicationListener的使用-监听ApplicationReadyEvent事件
参考:http://www.shareniu.com/article/73.htm 一.需求是想将我的写一个方法能在项目启动后就运行,之前使用了redis的消息监听器,感觉可以照着监听器这个思路做,于 ...
- Vue学习笔记(二)动态绑定、计算属性和事件监听
目录 一.为属性绑定变量 1. v-bind的基本使用 2. v-bind动态绑定class(对象语法) 3. v-bind动态绑定class(数组语法) 4. v-bind动态绑定style(对象语 ...
- Servlet3.0 新特性
Servlet3.0 的注解 Servlet 允许开发人员采用注解的方式来配置 Servlet.Filter.Listener. Servlet3.0 规范在 javax.servlet.annota ...
随机推荐
- Android HttpURLConnection的使用+Handler的原理及典型应用
1.介绍 总结:HttpURLConnection用来发送和接收数据. 2.ANR异常报错 (1)ANR(Application not response) 应用无响应, 主线程(UI线程) (2)如 ...
- C++_类和动态内存分配5-使用指向对象的指针
再探new和delete new为创建的每一个对象的名称字符串分配存储空间,这是在构造函数中进行的: 析构函数使用delete来释放这些内存. 字符串是一个字符数组,所以析构函数使用的是带中括号的de ...
- BZOJ 5168 && Luogu P3740 [HAOI2014]贴海报 线段树~~
据说某谷数据十分水...但幸好BZOJ上也过了...话说我记得讲课时讲的是奇奇怪怪的离散化..但现在突然觉得什么都可以线段树瞎搞了...QAQ 直接就是这个区间有没有被覆盖,被覆盖直接return: ...
- [转] 如何批量删除Docker中已经停止的容器
[From]https://blog.csdn.net/csdn_duomaomao/article/details/78587103 方法一: #显示所有的容器,过滤出Exited状态的容器,取出这 ...
- server 2012 R2查询端口
1. win+r弹出运行对话框,输入cmd,打开cmd窗口 netstat -ano | findstr "80" (注80是你想要看查看的端口号) 就会输出包含80端口使用的情况 ...
- 2.5 References & Borrowing
Here is how you would define and use a calculate_length function that has a reference to an object a ...
- spring对异步的支持
spring中异步方法的配置 1.在web.xml文件中设置org.springframework.web.servlet.DispatcherServlet的async-supported属性为tr ...
- Zabbix的安装(源码安装)
zabbix3.0完全安装 安装zabbix首先需要安装ltmp(lnmp),这里的t是指tengine(taobao的nginx版本),安装教程见 http://www.ltmp.cc 安装的时候P ...
- (转)开发监控Linux 内存 Shell 脚本
原文:http://blog.csdn.net/timchen525/article/details/76474017 题场景: 开发Shell 脚本判断系统剩余内存的大小,如果低于100MB,就邮件 ...
- cloudermanager安装过程中出现W:GPG error错误 http://ppa.launchpad.net.trusty Release **** 4DF9B28CA252A784(图文详解)
不多说,直接上干货! 问题详情 解决办法 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4DF9B28CA252A784 ...