到底是谁在偷偷摸摸创建session

今天是在学习拦截器的时候再度提起了这个问题,原本这个联系不怎么大,只是在运行这块时分别拦截了登录和表单的提交才纠结起这个问题,下面是正在写的拦截器部分代码

public boolean preHandle(
            HttpServletRequest request, 
            HttpServletResponse response,
            Object arg2) throws Exception {
        System.out.println("--preHandle实现登录检查--");

        HttpSession session = request.getSession();
        //获取登录成功后放置的用户信息
        String name = (String)session.getAttribute("username");
        System.out.println(name);
        if(name != null){//登录过
            System.out.println(name);
            return true;//继续执行mvc后续流程

        }else{//未登录或登录失效
            response.sendRedirect("tologin.do");
            System.out.println("是我");
            return false;//终止mvc后续流程
        }
    }

而后就是在XML属性文件中配置拦截器

<mvc:interceptors>
    <mvc:interceptor>
        <!-- 拦截哪些请求 -->
        <mvc:mapping path="/**"/>
        <!-- 放过哪些请求,我是让放过了初始登陆页的请求而拦截表单提交请求 -->
                <mvc:exclude-mapping path="/tologin.do"/>
        <bean class="org.yang.interceptor.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

这里写图片描述
这里写图片描述
因为登录程序中没有设置拦截器,所以可以很顺利的打开登录表单页面(如果登录程序也设置拦截器,那么我们就无法登录这个页面,因为一开始username的值就是NULL,所以页面出错也就是一致无法重定向),当我们点击登录按钮提交表单时,这时候程序才开始创建session,但是因为拦截器的作用session中并没有绑定到username的值,也就是username的值一致为NULL。
程序执行到HttpSession session = request.getSession();才开始创建了session。

后面查阅资料发现,只有当server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建,而不是说在客户端访问时就被创建,**而且JSP有创建session的机制,只要我们在创建JSP文件时没有显示的使用 <%@page session=”false”%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true)而创建session
。**
所以session在有客户端访问时就被创建看来就是一个误解。

上面只是个人今天下午看拦截器时想到的,还不知道准确性怎么样,等深深探究在回头学习。你可能要问为什么和session过不去,那就是以为它消耗内存资源呗。。。。。。。。。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人圭先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值