• 监听器


    1.监听器

    servlet规范中定义的一个特殊的类,可以对容器当中的事件进行监听。

    第一:与生命周期相关的事件

    比如创建或者销毁了request/session/servletContext对象

    第二:绑定事件

    比如调用了request/session/servletContext对象的setAttribute()或者removeAttribute()方法。

    如何定义一个监听器?

    step1.定义Java类,实现特定的接口

    step2.重写方法

    step3.在web.xml文件中配置监听器

    应用场景:在线人数统计

    2.servletContext:上下文对象

    容器会为每一个应用创建一个唯一的上下文对象,该对象一致存在,除非容器被关闭,或者应用被删除

    request:一次请求,一次响应期间

    session:一次会话期间

    servletContext:一直存在,除非容器被关闭,或者应用被删除

    获取上下文对象:

    a.通过GenericServlet提供的getServletContext方法

    b.通过HTTPSession提供的getServletContext方法

    c..通过ServletConfig提供的getServletContext方法

    常用方法:

    a.绑定数据

    setAttribute(String name,Object obj);

    Object:getAttribute(String name);

    b.获取全局初始化参数值

    String:getInitParameter(String name);

    c.根据逻辑路径获取物理地址

    String:getRealPath(String url);

    3.文件上传

    step1.form表单的method必须设置成post,enctye必须设置成"multipart/form-data"

    step2.不能再用request.getParameter获取参数,而应该用request.getInputStream获取流信息,再分析流。一般借助工具包分析流数据。

    4.servlet线程安全问题

    产生原因?

    浏览器向服务器发请求时,服务器会启动一个线程处理该请求,当多个请求到达时,服务器会启动多个线程,而它们访问的是同一份servlet对象,当在servlet方法中需要修改成员变量值的时候,会有线程安全问题。

    如何解决?

    a.加锁 synchronized(response)  (影响性能)

    b.servlet组件实现SingleModel接口(占内存)

    c.尽量避免在servlet中使用成员变量

  • 相关阅读:
    Mysql之数据库设计
    jQuery取得select选中的值
    抛java.lang.NoClassDefFoundError: org.joda.time.ReadablePeriod错误
    JS限制并且显示textarea字数
    myBaits association的使用
    IOS-Plist文件存储(1)
    Golang基于学习总结
    freemarker定义自己的标签错误(八)
    教你使用vim表白
    Cocos2d-x 3.2 大富翁游戏项目开发-第八部分 角色的散步路径
  • 原文地址:https://www.cnblogs.com/yingyigongzi/p/9171973.html
Copyright © 2020-2023  润新知