zoukankan      html  css  js  c++  java
  • tomcat 知识点

    • 在许多webapps中,最重要的cookie是会话标识符,由容器自动设置为JSESSIONID cookie。

    • 一种常用的不创建session的方法是在jsp页面头上加一句:
      <%@ page session=”false”>
      这样在请求这个页面的时候就不产生session了。
      这个在tomcat内部是怎么实现的呢?
      首先明确一点,jsp在本质上是httpservlet,在/tomcat/work目录下面你会发现有跟自己的应用相同目录结构的一些文件,其中的jsp文件都变成了class文件,这实际是被jspcompiler编译过的。上面提到了WrapperValue会最终调用servlet处理request。有兴趣的同学可以跟踪一下,会发现到了调用jsp对应的servlet(JspServlet)(这个是在tomcat/conf/web.xml里面配置的,对于.jsp,对应的servlet是jspservlet)时,最终会着落在tomcat下面实现了PageContext接口的特定于jsp specification的实现类:PageContextImpl。
      在这个类的initialize里面有这么一句:

    if (request instanceof HttpServletRequest && needsSession)
        this.session = ((HttpServletRequest) request).getSession();
    

    这句的意思就是,有session获取session,没session新建一个。而通常,这个地方也是客户端与tomcat下面的应用交互时产生session的入口。
    这句里面的needsSession就是之前提到的jsp页面上配置的值,默认是true.所以如果想在访问某个页面时不产生session,只需要设置成false就可以了。

    • 在默认情况下session是依靠客户端的cookie来实现的。但如果客户端浏览器不支持cookie或将cookie功能关闭,那就就意味着无法通过cookie来实现session了。在这种情况下,我们还可以有另一种选择,就是通过url来传递session id。
      对于Tomcat来说,需要使用jsessionid作为key来传递session id。
      但具体如何传呢?可能有很多人认为会是如下的格式:
    http://localhost:8080/test/MyJSP.jsp?jsessionid= D5A5C79F3C8E8653BC8B4F0860BFDBCD
    

    看源码得出,MyJSP.jsp后跟的是";",并不是"?",因此,正确的url如下:

    http://localhost:8080/test/MyJSP.jsp;jsessionid= D5A5C79F3C8E8653BC8B4F0860BFDBCD
    

    通过使用上述方法甚至可以在不同的机器上获得同一个session对象。

    • 将tomcat的cookie支持关闭
      tomcat默认的是处理cookie的。每次请求过来的时候,都会解析request head里面的cookie信息,试图从中发现sessionid的信息。
      如果我们只想使用url来支持session,可以直接将tomcat的cookie功能关闭。
      我们可以修改conf中的context.xml文件,加入一个cookies="false"即可,内容如下:
    <!-- The contents of this file will be loaded for each web application -->
    <Context cookies = "false">
    ... ...
    ... ...
    </Context>
    

    重启tomcat后,就算客户端支持cookie,tomcat也不会考虑HTTP请求头的cookie字段。

  • 相关阅读:
    单例模式(Singleton)在SQLite操作中的应用
    android中自定義progress
    eclipse中高亮显示相同的变量
    android定时滚动
    Android GridView中设置了Button以后就不能响应OnItemClick()
    java中转换文件大小
    android 的代码仓库
    Eclipse中代码提示功能补全
    poj 3635 Full Tank? (优先队列 + bfs)
    hdu 4279 Number (规律题 2012 ACM/ICPC Asia Regional Tianjin Online )
  • 原文地址:https://www.cnblogs.com/cag2050/p/7243504.html
Copyright © 2011-2022 走看看