• 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字段。

  • 相关阅读:
    Lesson 1#05-用户交互和注释
    Lesson 1#04-变量与常量
    Lesson 1#03-Python安装与Hello Python World
    elementUI 表格之合并同类项(包括行和列)
    elementUI 表格之表头合并
    VSCode关于编译scss的插件
    elementUI中的级联选择器,默认赋值不起作用
    highcharts中的环形图
    highcharts中的折线图
    highcharts中的仪表盘样式
  • 原文地址:https://www.cnblogs.com/cag2050/p/7243504.html
Copyright © 2020-2023  润新知