厉害了,Servlet3的异步处理机制

                                    厉害了,Servlet3的异步处理机制

Servlet3发布好几年了,又有多少人知道它的新特性呢?下面简单介绍下。

主要增加了以下特性:

1、异步处理支持

2、可插性支持

3、注解支持,零配置,可不用配置web.xml

...


异步处理是什么鬼?


直接操起键盘干。


@WebServlet(name = "index", urlPatterns = { "/" }, asyncSupported = true)

public class IndexServlet extends HttpServlet {


    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html");

        try {

            PrintWriter out = resp.getWriter();

            out.println("servlet started.<br/>");

            out.flush();


            AsyncContext asyncContext = req.startAsync();

            asyncContext.addListener(getListener());

            asyncContext.start(new IndexThread(asyncContext));


            out.println("servlet end.<br/>");

            out.flush();


        } catch (Exception e) {

            e.printStackTrace();

        }

    }


    /**

     * 异步线程结果监听

     * @author javastack

     * @return

     */

    private AsyncListener getListener() {

        return new AsyncListener() {

            public void onComplete(AsyncEvent asyncEvent) throws IOException {

                asyncEvent.getSuppliedResponse().getWriter().close();

                System.out.println("thread completed.");

            }


            public void onError(AsyncEvent asyncEvent) throws IOException {

                System.out.println("thread error.");

            }


            public void onStartAsync(AsyncEvent asyncEvent) throws IOException {

                System.out.println("thread started.");

            }


            public void onTimeout(AsyncEvent asyncEvent) throws IOException {

                System.out.println("thread timeout.");

            }

        };

    }

}


public class IndexThread implements Runnable {


    private AsyncContext asyncContext;


    public IndexThread(AsyncContext asyncContext) {

        this.asyncContext = asyncContext;

    }


    public void run() {

        try {

            Thread.sleep(5000);


            PrintWriter out = asyncContext.getResponse().getWriter();

            out.println("hello servlet3.<br/>");

            out.flush();


            asyncContext.complete();


        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}


访问localhost:8080/test

页面首先输出

servlet started.
servlet end.

过了5秒后再输出

hello servlet3.


可以看出servlet立马返回了,但没有关闭响应流,只是把response响应传给了线程,线程再继续输出,我们可以将比较费资源消耗时间的程序放到异步去做,这样很大程序上节省了servlet资源。


Springmvc3.2开始也加入了servlet3异步处理这个特性,有兴趣的同学可以去研究下。


从上面的servlet注解也可以看出来,servlet3完全解放了web.xml配置,通过注解可以完全代替web.xml配置。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我作为AI语言模型并不具备展示代码的能力,但是我可以简单概括回答您的问题: 1. Servlet/GenericServlet/HttpServlet/ServletRequest/ServletResponse接口机制详解:Servlet是JavaWeb中的一种技术,用于动态处理HTTP请求和响应。GenericServlet是一个抽象类,实现了Servlet接口,HttpServlet继承GenericServlet,提供了处理HTTP请求的方法。ServletRequest和ServletResponse是Servlet中的请求和响应接口。 2. Servlet注解增强、Servlet3.0异步新特性、Servlet文件上传下载机制Part接口机制详解web服务器容器动态注册Servlet:在Servlet3.0中,引入了注解方式来配置Servlet,增强了Servlet的开发效率。Servlet3.0还引入了异步处理请求的特性,可以提高系统的并发处理能力。Part接口可以用于处理文件上传下载。Web服务器容器可以动态注册Servlet。 3. Filter过滤器HttpFilter增强实现全站编码统一:Filter是JavaWeb中的一种技术,用于对请求和响应进行过滤处理。HttpFilter是Filter的一种实现方式,可以通过HttpFilter实现全站的编码统一。 4. web组件9大监听器使用及原理、Session纯化活化机制、及企业生产环境使用场景:监听器是JavaWeb中的一种技术,用于监听Web应用程序中的事件,可以通过监听器实现日志记录、权限控制等功能。Session是JavaWeb中用于保存用户会话状态的机制,可以通过Session纯化活化机制来提高系统的性能和稳定性。 5. 完成用户登录功能模块的开发:可以通过新建Web项目、加入前端登录界面、创建LoginServlet程序、创建LoginFilter程序等步骤来完成用户登录功能模块的开发。其中,LoginServlet程序用于处理登录请求,LoginFilter程序用于实现全站编码统一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值