JSP基础 Cookie Session

(一),JSP入门
一.什么叫JSP?
JSP全称为Java Server Page。JSP是运行在服务器端的脚本语言,用来开发动态网页,是JavaWeb开发的重要技术。通过提供JSP提供的语法,可以在HTML中写Java代码,也可以使用JSP的标签。
二.JSP的作用
Servlet:
缺点:不适合设置HTML响应体
优点:可以编程,是动态的资源
html:
缺点:静态网页,不能包含动态信息
优点:可以直接使用各种HTML标签
JSP:
优点:在原有html基础上加上Java脚本,构成JSP页面
三.JSP和Servelet的分工
JSP:
作为请求发起页面:超链接,表单
作为请求结束页面:显示数据
Servlet:
作为请求中处理数据的环节.
四,JSP的组成
JSP由HTML,java脚本,jsp标签构成.
在JSP中无需创建就可以使用的对象,有九个,也就是九大内置对象.比如request,out等.
JSP中的三种Java脚本:(也就是可以在这三种格式中写java代码)
<% 代码 %>:可以在这个格式中正常的写java代码,可以在java的方法中写什么,就可以在这里写什么。


    <%
        //在这里面可以写所有(可以在java中写的)代码
        int a=2;
        String b="哈哈";
        //out就是内置对象
        //jsp中的内置对象,就是不用声明,不用创建
        //可以直接使用的对象
        //out对象,可以将信息输出到页面上显示
        out.println(a+"</br>");
        这里面的a是局部变量,只作用当前<% %>%>

<%= 代码 %>:java表达式,常用于输出一条表达式的结果,或者一个变量的值.

<%! 代码 %>:声明,可以用来定义类的成员变量,成员方法(过时了不用)

<%!
    //这里面可以定义成员变量,成员方法,甚至可以创建类
    int a=5;
%>
<%=++this.a%>
这里的a指的是成员变量,作用于整个对象中。

五.基本原理
页面第一次访问时,服务器会把JSP文件编译成Java文件(就是一个Servlet类)
这里写图片描述所以上面四中,声明类的成员变量,就是在声明这个JSP文件编译成Java文件后的成员变量
然后再把.java文件编译成.class字节码文件
执行.class文件创建该类对象
调用该对象的service()方法
若该文件没被修改过,则第二次请求同一jsp文件时,直接调用service方法
六.JSP的九大内置对象:
out:向浏览器输出信息
config:就是Servlet中的ServletConfig
page:表示当前这个jsp页面
request:封装了请求数据的对象
response:用来向客户端传输信息
session:用来保存一次会话中需要存储的数据.
application:就是ServletContext,表示应用程序上下文
exception:错误处理页面中才有该对象,封装了错误信息
pageContext:当前JSP页面的上下文,可以通过这个对象获得其他的八个对象.

(二).Cookie
一.HTTP协议与Cookie
Cookie是服务器保存到客户端的!由服务器创建,保存到客户端!
当客户端访问服务器时,会将上次请求得到的Cookie再发送给服务器.
实际上,Cookie就是由服务器保存到客户端浏览器的一个键值对…又见键值对…
二.Cookie的用途
保存服务器想存储在客户端的信息,比如用户的用户名,下次再访问该服务器直接输入密码就可以了,再比如各种广告.Cookie一般都用在这里,不排除特殊情况。
三.服务器保存Cookie
发送响应头的方式保存到本地:
response.addHeader(“Set-Cookie”,”aaa=AAA”);
response.addHeader(“Set-Cookie”,”bbb=BBB”);
保存的Cookie
key:aaa value:AAA
key:bbb value:BBB
获取请求头的方式获取发送到服务器的Cookie:
request.getHeader(“Cookie”);
直接保存Cookie对象到本地:
response.addCookie(cookie);
获取浏览器归还的Cookie对象:
request.getCookies();得到Cookie[]
四.Cookie的相关属性
name与value只是最基本的.
maxAge:可保存的最大时长,单位为秒
maxAge>0:浏览器将Cookie保存到硬盘上,有效时长有maxAge决定
maxAge<0:浏览器只将Cookie保存到浏览器内存中,用户关闭浏览器,Cookie被销毁
maxAge=0:浏览器会直接删除该Cookie,可以用来删除原有Cookie
不设置maxAge属性,则Cookie默认保存到关闭浏览器时.

 response.setHeader("Set-Cookie", "a=A");
 response.setHeader("Set-Cookie", "b=B");
 response.setHeader("Set-Cookie", "c=C");
 使用set创建A B 都被C所覆盖

 Cookie cookie=new Cookie("d","D");
 cookie.setMaxAge(10);
 我这个设置的是10秒钟

这是之前设置的,没有设置最长时间

path:

//path属性,是浏览器请求服务器时
//是否携带该Cookie的判断依据
//如果访问路径中含有Cookie的path属性
//比如访问:/path/ps
cookie的path属性为:/path
那么会将这个Cookie携带着请求服务器

//path的默认值
//访问文件路径的父路径
//比如:访问/CookieSession(项目名称)/path/ps
//则父路径为:/CookieSession/path
cookie.setPath(“/Path”)
(三),Session
一.HttpSession
Session是一种机制,可以在服务器端保存信息的机制.
JavaWeb中的HttpSession是Java平台对Session的一种实现规范.
HttpSession是用来追踪会话的类,是服务器端对象,保存在服务器端.
从用户首次访问服务器开始,到用户关闭浏览器为止,称为一次会话.
在Servlet中获得Session:request.getSession();在JSP中session是九大内置对象之一,可以直接使用.
二.HttpSession域
HttpSession是Servlet三大域对象之一,域对象都有下面的三个方法;
setAttribute();
getAttribute();
removeAttribute();
Servlet三大域对象:request域,session域,application域
三.HttpSession的作用
用来追踪会话.
什么是会话?
用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,称为一次会话.
会话范围:
从某个用户首次访问服务器开始,到该用户关闭浏览器结束.
服务器会为每个客户端创建一个session对象,session主要用于解决单个客户端访问同一网站的不同页面资源时信息的传递与控制.
比如用户A,访问了服务器的a.jsp,又访问了b.jsp,那么这个用户A的用户名和密码等资料怎么传递呢?
当用户A访问a.jsp时,可以将信息资料存储在session中,访问b.jsp时,可以从session中取出信息
四,得到session对象
Servlet中:request.getSession().getAttribute(“user”)
就是在request请求中,通过session获得user
session域的相关方法:
setAttribute();
getAttribute();
removeAttribute();
五.HttpSession的原理
服务器不会直接创建session对象,而是在第一次执行request.getSession方法获取session对象时,才会创建该对象.

获取Cookie中的JSESSIONID(如果Cookie中无JSESSIONID,那么会去获取url中是否有该JSESSIONID参数):
如果sessionId不存在,创建session,把session保存起来,把新建的sessionId保存到Cookie中.
如果sessionId存在,通过sessionId查找到session对象,如果没有查找到,创建session,把session保存起来,把新建的sessionId保存到Cookie中.
如果sessionId存在,通过sessionId查找到了session对象,那么就不会再创建session了.
找到了session后,返回session对象
如果创建了新的session,浏览器会得到一个包含了sessionId的Cookie,这个Cookie的生命为-1,即只在浏览器内存中存在, 如果不关闭浏览器,那么Cookie就一直存在.
下次请求时,再次执行request.getSession()方法,因为可以通过Cookie中的sessionId找到对应的session对象,所以与上一处请求使用的是同一个session对象.
这也就是一次会话中,多次请求明明已经是不同的request对象了,还能找到相同的session对象的原因.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章