zoukankan      html  css  js  c++  java
  • JSP/Servlet Web 学习笔记 DayFive

    ServletConfig

      <只对当前Servlet有效>

      (1)在Web容器初始化Servlet实例时,都会为这个Servlet准备一个唯一的ServletConfig实例(俗称Servlet配置对象)。

      (2)Web容器会从部署文件中读出该Servlet类的初始化参数,并设置到ServletConfig实例中,然后再把这个ServletConfig实例传递给该Servlet实例的init()方法。


    ServletContext

      <整个Web应用有效>

      (1)一个Web应用程序中的所有Servlet都共享一个ServletContext上下文实例。因此,ServletContexts实例也称application对象

      (2)可以通过setAttribute(String name,Object obj)、getAttribute(String name)方法来存放和获取属性。

      (3)可以通过getInitParameter(String name)方法来获取指定名称的Web应用上下文初始化参数的值。

      例如:

    ServletContext context=this.getServletContext();
    String appName=context.getInitParameter("appName");

    Servlet的线程安全问题

      Servlet默认时以多线程模式执行的。当多个客户同时并发请求一个Servlet时,容器将启动多个线程调用的请求方法。

      请求处理方法中的局部变量时安全,而成员变量和共享数据时不安全的。解决线程安全的问题由如下常用方法:

      (1)synchornized

         但要尽可缩小同步代码的范围,不要直接再doGet()、doPost()等请求处理方法使用同步,这将严重影响性能。

      (2)尽量少使用成员变量和共享数据

          Servlet类尽量不要定义成员变量;

          尽量少在ServletContext、HttpSession中保存会被修改的数据。

          单例模式处理共享数据。


    会话跟踪

      Cookie  

        Cookie是在浏览器访问Web服务器的某个资源时,由Web服务器在HTTP响应消息头中附带传送给浏览器的一段数据。

        Servlet规范规定用于会话跟踪的名字必须是JSESSIONID。

        Servlet API中提供了一个javax.servlet.http.Cookie类来封装Cookie信息,提供一些常用的方法:

          public Cookie(String name,String Value);

          getName()、setValue()、setMaxAge()、getMaxAge()、setPath()、getPath()、setDomain()以及getDomain()。

        如果要将一个构造好的Cookie实例的信息添加到消息头中,可以使用HttpServletResponse接口中提供的addCookie()方法。

      Session

        一个客户端在Web服务器端对应一个各自的HttpSession实例。

        Web容器并不在每个客户端第一次访问时就自动创建HttpSession实例。只有客户端访问某个编写了创建HttpSession实例代码的Servlet时,才会创建一个HttpSession实例。

        HttpServletRequest接口提供了两个方法来创建HttpSession实例:

           public HttpSession getSession();

           public HttpSession getSession(boolean flag);

        常用方法:setAttribute(String name,Object obj)、getAttribute(String name)、invalidate()等。

       URL重写

         将会话ID添加到URL接回,以标识该会话,这样服务器就可以从请求URL中取出会话ID,并用它查找匹配的回话了。

         HttpServletResponse接口中定义了两个用于自动完成URL重写的方法:

        (1) 用于对超链接和form表单的action属性的URL进行自动URL重写

              public String encodeURL(String url);

        (2)用于对要传递给HttpServletResponse.sendRedirect()方法的URL进行自动URL重写

              public String encodeRedirectURL(String url);         


    过滤器

        Filter可以改变一个request和修改一个reponse。

        Filter不是一个Servlet,它不能产生一个response,它能够在一个request到达Servlet之前预处理request,也可以在离开Servlet时处理response。

        Filter可以完成验证客户是否来可信的网络,可以对客户提交的数据进行重新编码,可以验证客户是否登陆等。

        所有过滤器都必须实现javax.servlet.Filter接口,这个接口包含三个方法,分别是:doFilter()、init()和destroy()。

        doFilter()方法为大多数过滤器的关键部分,每当调用一个过滤器时,都要执行该方法。通过调用FilterChain对象的doFilter()方法时,可以激活下一个相关的过滤器。


    Servlet监听器

        Servlet API提供了以下几个监听器接口:

          (1)ServletContextListener:监听Web应用的启动和销毁事件。

          (2)ServletContextAttributeListener:监听Web应用上下文中的属性改变事件。

          (3)ServletRequestListener:用于监听请求的创建和销毁。

          (4)ServletRequestAttributeListener:监听请求中的属性改变。

          (5)HttpSessionListener:监听会话的创建和销毁事件。

          (6)HttpSessionActivationListrener:监听会话的激活和钝化的事件。

          (7)HttpSessionAttributeListener:监听会话中的属性改变事件。

          (8)HttpSessionBindingListener:会话值绑定监听器。不用在web.xml中设定的Listener。


    Servlet 3.0 ——新增标签支持

        简化Servlet、Filter和Listener的申明。使得web.xml部署描述文件从该版本开始不在时必选的了。

        web.xml的顶层标签<web-app>中有一个metadata-compete属性,如果设置为true,则容器的部署只依赖web.xml的配置,会忽略所有标注。

        @WebServlet

          声明Servlet。

          常用属性:name(<servlet-name>)、

               value(等价urlPatterns属性)

               urlPatterns(<url-pattern>)

                 loadOnStartup(<load-on-startup>)

               initParams(<init-param>)

               asyncSupported(<async-supported>)

               dscription(<desciption>)

               displayName(<display-name>)

        @WebInitParam

          通常不单独使用,配合@WebServlet或者@WebFilter使用,为Servlet或者过滤器指定初始化参数。

          常用属性:name(<param-name>)、

               value(<param-value>)、

                    description(<description>)。

        例如:

    @WebServlet(name="servlet",urlPatterns={"/servlet1"},initParams={@WebInitParam(name="usrname",value="rekent")} )  
    public class servlet extends HttpServlet{
    }

        @WebFilter

        申明过滤器。

        @WebListener

        声明监听器,必须实现接口

        @MultipartConfig

        辅助Servlet3.0中HttpServletResquest提供的对上传文件的支持。

    作者:Rekent
    出处:http://www.cnblogs.com/rekent/
    本文版权归作者和博客园共有,欢迎转载、点赞,但未经作者同意必须保留此段申明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    c# WinForm 定时执行某个后台操作 如把B文件夹下的文件Copy到A文件夹下
    c# 创建指定大小的空字符填充的文本文件 在指定位置读写相关内容
    c# DirectShow 通过IAMVideoProcAmp的Set方法 来设置视频图像的Brightness 调整亮度
    [转]灰度图像的腐蚀算法和细化算法(C#代码)
    利用fleximage实现图片上传
    利用acts_as_ferret实现全文检索
    纯CSS无hacks的跨游览器多列布局
    IE私有CSS样式属性一览
    利用thinking sphinx实现全文检索
    搭建rails运行环境
  • 原文地址:https://www.cnblogs.com/rekent/p/6954320.html
Copyright © 2011-2022 走看看