cookie session和application和servlet

Cookie和Session和Application记录下笔记

1.Cookie是保留在浏览器端,当浏览器关闭,Cookie自动清空

2. Session是保留在服务端,超时时间在服务端配置。

//web.xml中配置
<web-app>
<session-config>
<session-timeout>20</session-timeout>
</session-config>
</web-app>


//代码中设置
session.setMaxInactiveInterval(20*60);

    

3.Application是保留在服务端,服务端一直起着,它就一直存在。 可以用于保存全局的信息。

4.Servlet 

   说明servlet主要有三个生命周期:

     ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。

  ②装载并创建该Servlet的一个实例对象,注意这个实例是单例的,所以调用后面的service方法的时候可能有并发问题
  ③调用Servlet实例对象的init()方法。
  ④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
  ⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

    关于servlet线程安全的问题这里多提一下:

    对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。只要该Servlet中不存在全局变量就不存在线程安全问题,因为每个线程访问的时候都会有自己的方法栈,局部变量是互不影响的。

    

    那么service()方法和doGet doPost有什么关系呢?原来在service代码中有判断method属性

   

 protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
    {
        String method = req.getMethod();
        if(method.equals("GET"))
        {
            long lastModified = getLastModified(req);
            if(lastModified == -1L)
            {
                doGet(req, resp);
            } else
            {
                long ifModifiedSince = req.getDateHeader("If-Modified-Since");
                if(ifModifiedSince < (lastModified / 1000L) * 1000L)
                {
                    maybeSetLastModified(resp, lastModified);
                    doGet(req, resp);
                } else
                {
                    resp.setStatus(304);
                }
            }
        } else
        if(method.equals("HEAD"))
        {
            long lastModified = getLastModified(req);
            maybeSetLastModified(resp, lastModified);
            doHead(req, resp);
        } else
        if(method.equals("POST"))
            doPost(req, resp);
        else
        if(method.equals("PUT"))
            doPut(req, resp);
        else
        if(method.equals("DELETE"))
            doDelete(req, resp);
        else
        if(method.equals("OPTIONS"))
            doOptions(req, resp);
        else
        if(method.equals("TRACE"))
        {
            doTrace(req, resp);
        } else
        {
            String errMsg = lStrings.getString("http.method_not_implemented");
            Object errArgs[] = new Object[1];
            errArgs[0] = method;
            errMsg = MessageFormat.format(errMsg, errArgs);
            resp.sendError(501, errMsg);
        }
    }

 

<servlet>
    <servlet-name>ServletDemo</servlet-name>
    <servlet-class>com.ServletDemo</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ServletDemo</servlet-name>
    <url-pattern>/servlet/ServletDemo</url-pattern>
  </servlet-mapping>

    servlet转自 http://www.cnblogs.com/xdp-gacl/p/3760336.html

    这哥们的系列文档对学习java web基础帮助很大,各位可以参考下。

猜你喜欢

转载自labreeze.iteye.com/blog/2213884