今日内容
1. 会话技术
1. Cookie
2. Session
2. JSP: 入门学习
会话技术
-
会话:一次会话包含了多次请求和响应
一次会话:浏览器第一次给服务器发请求,会话建立,直到浏览器关闭(指的是浏览器的关闭,网页关闭不算),会话结束
-
功能:可以在一次会话范围内共享数据
-
方式:
- 客户端技术:cookie
- 服务器端技术:session
cookie是存储在客户端的,
session是存储到服务器端的。
Cookie:
-
概念:客户端会话技术,在客户端保存数据
-
快速入门
-
使用步骤:
-
创建Cookie对象,绑定数据
Cookie cookie = new Cookie(“msg”, “hello”); -
发送Cookie对象
response.addCookie(cookie);cookie是服务器给客户端发送的。
@WebServlet("/cookieDemo1") public class CookieDemo1 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建Cookie //Cookie cookie = new Cookie("msg", URLEncoder.encode("中国","utf-8")); Cookie cookie = new Cookie("msg", "hello"); //让客户端保存该信息 response.addCookie(cookie); //创建Cookie Cookie cookie2 = new Cookie("msg2", "hello2"); //让客户端保存该信息 response.addCookie(cookie2); }
-
获取Cookie对象
Cookie[] cookies = request.getCookies();
@WebServlet("/cookieDemo2") public class CookieDemo2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取cookie Cookie[] cookies = request.getCookies(); if(cookies!=null){ for (Cookie cookie : cookies) { String name = cookie.getName(); String value = cookie.getValue(); //解码 // URLDecoder.decode(value,"utf-8"); System.out.println("name:" + name + "-value:" + value); } } }
-
-
-
实现原理:
- 基于头来完成
- response : set-cookie
- request: Cookie
- 基于头来完成
-
Cookie的细节
-
一次可不可以发送多个cookie?
-
可以
-
创建多个,发送多个就行了
//创建Cookie
Cookie cookie = new Cookie(“msg31”, “hello”);
//让客户端保存该信息
response.addCookie(cookie);//创建Cookie
Cookie cookie2 = new Cookie(“msg32”, “hello2”);
//让客户端保存该信息
response.addCookie(cookie2);
-
-
cookie能在浏览器中保存多长时间
-
默认,浏览器关闭,cookie销毁
不过我们可以手动设置多长时间之后才销毁cookie。
-
持久化存储:
- setMaxAge(int seconds)
- 正数:cookie多长时间失效
- 负数:默认值
- 零: 删除cookie信息
- setMaxAge(int seconds)
-
cookie 能不能发送中文?
- tomcat 8,可以
- tomcat 8 之前的版本不可以, url编码–>%D4%C5 读取出来之后用url解码
-
cookie 共享问题
- 一个tomcat服务器,可以有多个虚拟目录,那么这些web项目是否可以共享?
- 默认,不能共享
- setPath(String Path):设置cookie的有效范围.默认,设置当前虚拟目录
- 如果要共享,可以将path设置而为"/"
- 不同tomcat服务器之间cookie共享的问题
- 一个tomcat服务器,可以有多个虚拟目录,那么这些web项目是否可以共享?
-
cookie的特点和作用
- cookie存储在浏览器中
- 浏览器对于单个cookie(4k)和cookie的数量都有限制(20个)
- 作用:
-
cookie在客户端存储少量不敏感信息
只登陆时用户名和密码。
-
不登录的情况下,完成一些识别
-
-
-
js和后台共享cookie
就是你在后台设置的cookie,前台可以获取到;
你在前台设置的cookie,后台可以获取到。
Session:服务器端的会话技术
重要的点我放到最前面声明:
session和cookie技术,在我们进行测试案例的时候不要忘了清除浏览器的缓存。
-
概念:
服务器端的会话技术,实现一次会话中多次请求间共享数据,保存在服务器端的. -
快速入门:
- 获取Session对象
- HttpSession session = request.getSession();
- 使用Session域
- session.setAttribute(“msg”,“hello session”);
- session.getAttribute(“msg”)
- session.removeAttribute(“msg”);
- 获取Session对象
-
session原理:
- 依赖于cookie或者使用url重写 ,cookie的key是:JSESSIONID
- cookie:response响应给客户端的时候设置cookie的key为JSESSIONID和value为
session的真是id–request.getSession().getId();
@WebServlet("/sessionDemo3") public class SessionDemo3 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1. 获取Session HttpSession session = request.getSession(); System.out.println(session); //期望客户端关闭后,session也能相同 Cookie jsessionid = new Cookie("JSESSIONID", session.getId()); //设置客户端cookie存活时间 jsessionid.setMaxAge(60*60); response.addCookie(jsessionid); }
- url重写: 就是直接在地址栏后面带参数-- localhost:8080/session?JSESSIONID=xxxxxxxxxxxx
-
具体细节:
-
当客户端关闭,服务器不关闭,两次获取的Session是否为同一个
- 默认情况,不是
为什么不是?
----关闭浏览器时, 服务器端的sessionId是不变的(默认情况下,session存活半小时);
session的会话技术需要客户端cookie的支持;
但是 浏览器关闭,客户端的cookie就会失效(默认情况下,没有设置cookie时长); 再次开启浏览器访问服务器的时候,服务器认为是第一次访问,然后再次创建一个session;
两次的session对象肯定是不一样的。
* 如果需要相同,则可以创建cookie,键:JSESSIONID,设置最大存活时间,
cookie和session的时长都是可以设置的。
默认cookie在关闭浏览器的时候失效;默认session是半小时失效。
-
-
客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
* 不是同一个> 服务器重启,session对象一定是重新创建的。 如何让服务器重启后是同一个session: > * session的钝化 > * 服务正常关闭之前,会把session对象存到文件 > * session的活化 > * 在服务器启动的时候,会把session文件转化为内存中的session对象
-
session什么时候被销毁
- 服务器关闭
- 手动调用session的void invalidate() 方法
- session的默认失效时间
选择性配置修改(下面这是Tomcat默认的)
30
-
session的特点
-
session用于存储一次会话的多次请求的数据,存在服务器端
-
session可以存储任意类型,任意大小的数据
-
session与Cookie的区别:
- session存储数据在服务器端,Cookie在客户端
- session没有数据大小限制,Cookie有
- session数据安全,Cookie相对于不安全
-
-
四大域对象
根据有作用范围由小到大:
1.page(jsp有效)------》page域指的是pageContext.
> 生命周期:当对JSP的请求开始,当响应结束时销毁。
jsp页面被执行,声明周期开始;
jsp页面执行完毕,声明周期结束;
2.request(一次请求)---》request域request HttpServletContext
3.session(一次会话)---》session域session HttpSession
4.application(当前web应用)---》application域指的是application ServletContext;
转发和重定向
转发:一是转发请求,二是转发到前台页面。
转发请求是后台进行的,转发到前台页面是根据地址栏url访问–相对路径而言的。
localhost:8080/servlet路径, localhost:8080/前台页面。
粗的是相对路径。
补充
案例:验证码
1. 案例需求:
1. 访问带有验证码的登录页面login.jsp
2. 用户输入用户名,密码以及验证码。
* 如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误
* 如果验证码输入有误,跳转登录页面,提示:验证码错误
* 如果全部输入正确,则跳转到主页success.jsp,显示:用户名,
JSP 补充(了解)
今日内容
1. JSP:
1. 指令
2. 注释
3. 内置对象
2. MVC开发模式
3. EL表达式
4. JSTL标签
5. 三层架构
JSP:
1. 指令
* 作用:用于配置JSP页面,导入资源文件
* 格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
* 分类:
1. page : 配置JSP页面的
* contentType:等同于response.setContentType()
1. 设置响应体的mime类型以及字符集
2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
* import:导包
* errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
* isErrorPage:标识当前也是是否是错误页面。
* true:是,可以使用内置对象exception
* false:否。默认值。不可以使用内置对象exception
2. include : 页面包含的。导入页面的资源文件
* <%@include file="top.jsp"%>
3. taglib : 导入资源
* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
* prefix:前缀,自定义的
2. 注释:
1. html注释:
<!-- -->:只能注释html代码片段
2. jsp注释:推荐使用
<%-- --%>:可以注释所有
3. 内置对象
* 在jsp页面中不需要创建,直接使用的对象
* 一共有9个:
变量名 真实类型 作用
* pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
* request HttpServletRequest 一次请求访问的多个资源(转发)
* session HttpSession 一次会话的多个请求间
* application ServletContext 所有用户间共享数据
* response HttpServletResponse 响应对象
* page Object 当前页面(Servlet)的对象 this
* out JspWriter 输出对象,数据输出到页面上
* config ServletConfig Servlet的配置对象
* exception Throwable 异常对象
4. el表达式
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
</configuration>
5. jstl模板
复习:
1. http
1. 发送的是文本(符合http协议的文本格式)
2. 服务器收到的(符合http协议的文本格式)
3. 动态服务器tomcat ,tomcat结构
4. 传文本
5. 传文件
6. 编码
2. tcp/ip
3. servlet
4. response request session cookie servletcontext
5. jsp-->servlet
6. chrome网页工具的使用方法
7. el
还没讲的:
拦截器
监听器