http session解释

Web服务器跟踪客户状态通常有四种方法:

1,建立含有跟踪数据的隐藏字段  type=hidden

2,重写包含额外参数的URL

3,使用持续的Cookie

4,使用Servlet API中的Session(会话)机制

Session概念:

Session用于跟踪客户的状态,Session是指在一段时间内,单个客户与WEB服务器一连串相关的交互过程。在一个Session中,客户可能多次请求访问同一个网页,也有可能请求访问各种不同的服务器资源。

Session运行机制:

当一个Session开始时,Servlet容器将创建一个HttpSession对象,在HttpSession对象中可以存放客户的状态信息(例如购物车)。

Servlet容器为HttpSession分配一个唯一标志符,称为SessionID。Servlet容器将SessionID作为Cookie保存在客户的浏览器中。

每次客户发送Http请求时,Servlet容器可以从HttpServletRequest对象中读取SessionID,然后根据SessionID找到对应的HttpSession对象,从而获取客户的状态信息。

Session的接口HttpSession:

getId()   返回session的ID

Invalidate()  让当前session失效,Servlet容器会释放HttpSession对象占用的资源

getAttribut()     setAttribute()

isNew()  判断是否是新创建的session,如果是返回true 否则返回false

setMaxInactiveInterval()  设置session的最大有效时间 单位为秒 如果设置为负数,表示不限制session处于不活动状态的最大有效时间,默认的设置时间为30分钟

Session的生命周期:

当客户第一次访问WEB应用中支持Session的某个页面时,就会开始一个新的session

接下来客户访问这个WEB应用中不同的网页时,都处于同一个session中

默认情况下,JSP页面是支持Session的,如果想不支持Session,可使用标签<%@ page session=”false”%>

在下列情况下,Session将结束生命周期,Servlet容器将释放HttpSession占用的资源:

1,客户浏览器关闭?

2,Session过期

3,服务器端调用了HttpSession的Invalidate()方法

如何做到在浏览器关闭时删除Session?

严格的讲,做不到这一点。可以做的努力的办法是在所有的客户端页面里使用javascript的方法window.onclose来监视浏览器的关闭动作,然后向服务器发送一个请求来删除Session;

但是对于浏览器崩溃或强行杀死进程这种非常规手段仍然无能为力。

实际上我们在项目中也不会这么做,而是让服务器在Session过期时将其删除。

AngularJS使用ng-repeat不更细View

今天在使用angularJS开发一个上传图片的功能,但是遇到了view不更新的问题,查了国内大部分网站,发现很多人都出现过这个问题,但是他们一般都是出现在请求数据中,我的项目全部都是使用promise对象处理的,所以没有出现过他们出现的问题,但是上传图片是没有数据传输的(因为我意图是在本地裁剪图片);

如果有像我这样子的,可以使用:

$scope.$apply();
通知视图更新,但是这不是一个好的习惯。

原文:
$scope.$apply(function() {
  $scope.msgs = newMsgs;
});

That is telling Angular that you’ve modified something it needs to know about from a context that it doesn’t know about (the jQuery ajax call in this case).

There are some valid uses of $scope.$apply(), such as in event handlers, but most other times it is a sign of bad practices. You should definitely be using Angular’s $http for ajax calls.

 

 

 

angularjs的自定义directive指令的绑定策略scope:”@”、”=”、”&”

通常我们知道指令默认是可以跟外界通信的.比如:

<div ng-controller="mytest">
    <test></test>
</div>

test自定义指令是可以访问到mytest控制器的scope
要想把test自定义指令独立作用域,也就是说跟mytest切断关系:可以加上指令的参数scope:{},这样就能做到互不相干了
但是也不可能完成切断关系,总会有某些东西要互相交互,如果想跟mytest控制器的某个scope属性交互,就要用绑定策略

下面来介绍三种绑定策略的做法

1.@符号
“@”是通过DOM的属性来跟mytest控制器交互绑定一起

<div ng-controller="mytest">
    <test></test>
</div>

 

app.controller("mytest", function ($scope) {
    $scope.name = "jack";
    $scope.age = 25;
});
app.directive("test",function(){
    return {
        restrict : "E",
        template : '<div name="{{name}}"></div>',
        replace : true,
        scope : {
            name : "@"
        },
        controller : function($scope){
            console.log($scope.name);  //"jack"
            console.log($scope.age);   //age是undefined,因为没有跟mytest进行交互
        },
        link : function ($scope) {
            console.log($scope.name); //"jack"
            console.log($scope.age);  //age是undefined,因为没有跟mytest进行交互
        }
    }
});

重点:
scope : {
name : “@”
}
scope对象声明了一个属性name,然后在DOM元素的属性加上一个name,(注意两边的名字必须要一致)这样就可以进行交互操作
点击查看完整代码

2.=符号
“=”有双重绑定的功能,比如mytest控制器与test子指令进行双重绑定(单个字符串、对象都是有效的)下面代码用对象来演示

<div ng-controller="mytest">
    父:<input type="text" ng-model="data.name" />
    <test></test>
</div>

 

app.controller("mytest", function ($scope) {
    $scope.data = {
        name : "jack",
        age : 25
    }
});
app.directive("test",function(){
    return {
        restrict : "E",
        template : '<div data="data">子指令:<input ng-model="data.name" /></div>',
        replace : true,
        scope : {
            data : "="
        },
        controller : function($scope){
            console.log($scope.data);  //Object {name: "jack", age: 25}
        },
        link : function ($scope) {
            console.log($scope.data); //Object {name: "jack", age: 25}
        }
    }
});

3.&符号
“&”的意思是子指令能调用父控制器的方法,这里的指令template元素点击调用控制器的getName方法

<div ng-controller="mytest">
    <test></test>
</div>

 

app.controller("mytest", function ($scope) {
    $scope.getName = function(){
        console.log("jack");
    }
});
app.directive("test",function(){
    return {
        restrict : "E",
        template : '<div get-name="getName()">子指令:<a href="javascript:void(0)" ng-click="getName()">点击调用父方法</a></div>',
        replace : true,
        scope : {
            getName : "&"
        },
        controller : function($scope){
            $scope.getName();  //"jack"
        },
        link : function ($scope) {
            $scope.getName(); //"jack"
        }
    }
});

8种JavaScript思维导图

一、JavaScript思维导图之<变量>的学习

1489070795-9656-iom1i-lObTO-fuAAHnyukxd68504

二、    JavaScript思维导图之<函数基础>
1489070801-1544-iom1i-ldrzs8OUAAHstqsTcNk032

三、JavaScript思维导图之<基本dom操作>

1489070801-4695-iom1i-lnHjavFSAAMn6lGXylQ249

四、JavaScript思维导图之<流程语句>

1489070801-8094-ioL1i-lvLj4-aTAAMKdP9yCsY163

五、JavaScript思维导图之<数组>

1489070790-4496-ioL1i-l8DRZUXgAAPWo3NI-Qs124

六、    JavaScript思维导图之<运算符>

1489070802-5922-iom1i-l9PhBYSbAAaDvXV6gn8492

七、JavaScript思维导图之<正则表达式>

1489070801-3756-ioL1i-l-3j86f9AAOl8EVC5pk459

八、JavaScript思维导图之<字符串函数>

1489070802-6387-iom1i-mAOj-rjrAAWrNNAmaW4766

关于 CSS absolute与relative定位

css中的定位类型一览

position这个css属性允许我们指定元素的定位类型。

css定位选项

static是此属性的默认值。这时候,我们称那个元素没有被定位。为了定位它,我们需要改变预定义的类型。

为了改变预定义类型,我们将position的属性值设置为下面中的一个:

·relative

·absolute

·fixed

·sticky

只有设置了之后,我们才能使用offset参数来为我们的元素指定我们想要的位置:

·top

·right

·bottom

·left

·这些属性的初始值是关键字auto

14567810
 
Copyright © 2008-2021 lanxinbase.com Rights Reserved. | 粤ICP备14086738号-3 |